On Mon, 02 May 2005, Christopher Fry wrote:
One of the things we gathered from our profiling was that more of the SWASH*
activity in our apps was happening around regexes. We took a closer look
and, for the regexes that could never have unicode values (e.g. for internal
URL checking), we just scoped them and did a "use bytes" within that scope.
It helped, but not to the degree that we thought it would.
Turns out the act of profiling the code actually exacerbated the frequency
of these SWASH* functions. Instrumenting suspect functions outside of
profiling demonstrated that.
How did you show that? Would running code in the debugger also have an
effect? Here is the profile for Kwiki's index.cgi below.
30 percent of the time is in utf8::SWASHNEW.
-----Original Message-----
From: Rafael Garcia-Suarez [mailto:rgarciasuarez(_at_)mandriva(_dot_)com]
Sent: Friday, April 29, 2005 8:58 AM
To: perl-unicode(_at_)perl(_dot_)org
Subject: Re: utf8::SWASHNEW
Eric Cholet wrote in perl.unicode :
I just did a profiling on one of my programs, and it turns out it
spends most of its time in utf8::SWASHNEW. In second place is one of my
own functions, and in third place comes utf8::SWASHGET. What do
SWASHNEW and SWASHGET do ? (in layman's terms-- I browsed the source
but it gave me a headache). Is this a price to pay when using Perl
unicode strings?
They're used to load and initialise the swatchs, ie. internal hashes
that contain unicode properties (sets of unicode chars, e.g.
alphabetics, etc).
So, they're typically called rarely. Can you post an example of code
that reproduces the problem ?
Here's no code, but running Kwiki's index.cgi from the command
line with perl -d:DProf index.cgi, produces this profile:
%Time ExclSec CumulS #Calls sec/call Csec/c Name
30.4 1.178 0.000 98 0.0120 0.0000 utf8::SWASHNEW
4.80 0.186 0.329 106 0.0018 0.0031 Spiffy::import
4.54 0.176 1.541 3103 0.0001 0.0005 Spiffy::__ANON__
3.72 0.144 1.517 19 0.0076 0.0798 Spoon::Hub::load_class
3.69 0.143 0.143 2743 0.0001 0.0001 overload::mycan
3.48 0.135 0.291 143 0.0009 0.0020 Spiffy::field
3.20 0.124 0.113 436 0.0003 0.0003 Spiffy::parse_arguments
3.10 0.120 0.168 8 0.0149 0.0210 Template::Config::load
3.07 0.119 0.332 10 0.0119 0.0332 Spoon::Base::BEGIN
2.94 0.114 0.303 236 0.0005 0.0013 Carp::caller_info
2.71 0.105 0.105 4374 0.0000 0.0000 Filter::Util::Call::filter_read
2.32 0.090 0.090 8 0.0112 0.0112 CGI::_compile
2.04 0.079 0.174 10 0.0079 0.0174 Template::BEGIN
1.94 0.075 1.280 332 0.0002 0.0039 Spoon::Formatter::Unit::match_phra
se
1.81 0.070 0.089 4 0.0175 0.0223 Spoon::Cookie::BEGIN
30 percent of the time in utf8::SWASHNEW!
--
Greg Matheson, Taiwan