[Seaside] Re: Benchmark proposal

Klaus D. Witzel klaus.witzel at cobss.com
Thu Jan 18 08:17:21 UTC 2007


Hi Ramon,

in the case you reported below method #do: is innocent, instead the sender  
of #valuesDo: has to be blamed for doing a sequential access to the  
elements of a dictionary (which may have and almost always has, to skip  
all the nil entries). Moreover, just the SoapHref members are filtered by  
SoapDecoder>>resolve and again, this might be a futile noop but  
aDictionary must check all its "raw" elements if its [the dictionary's]  
size > 0.

It may perhaps be possible to cache members of SoapHref in an array (or  
so) for speeding up SoapDecoder>>resolve drastically but this is only  
speculative because the relevant portions of SoapDecoder lack  
documentation 100%[tm].

/Klaus

On Thu, 18 Jan 2007 01:13:19 +0100, Ramon wrote:
>> > Just wanted to mention that there is IIRC a bit of work that can be
>> > done in the lower levels of Squeak web serving - at least
>> if you use
>> > KomHttpServer. I profiled and tweaked it quite a bit (2-3
>> years ago)
>> > for fun and managed to squeeze out a substantial improvement.
>
> For fun...  How about a look at this... For fun... I'm having some speed
> issues with SoapCore in conjunction with Seaside, i.e., using it with
> Seaside so it's kind of on topic....
>
> Using Soap against .Net.  It's my only access to my SqlServer database,  
> and
> recently I've noticed that a large part of my performance issues seem to
> stem from Soap Decoding.  I'd like to know what you think.  Here's a  
> Message
> tally on a result set that takes about 1.7 seconds to return from the
> service, but nearly a minute to decode 192 objects...
>
> - 54494 tallies, 54557 msec.
>
> **Tree**
> 100.0% {54557ms} WBBookingEngine>>soapCallBackDoor:sql:
>   100.0% {54557ms} SoapCall>>invokeAndReturn
>     97.7% {53302ms} SoapResponse>>returnValue
>       |97.7% {53302ms} SoapResponse>>buildAdditionalResults
>       |  97.7% {53302ms} SoapResponse>>extractDecodedValueFrom:
>       |    97.5% {53193ms} SoapDecoder>>decodeXmlElement:
>       |      96.2% {52484ms} SoapDecoder>>resolve
>       |        92.0% {50192ms} Dictionary>>valuesDo:
>       |          |92.0% {50192ms} Dictionary>>associationsDo:
>       |          |  92.0% {50192ms} Dictionary(Set)>>do:
>       |        2.7% {1473ms} SoapHref>>resolve
>     2.3% {1255ms} SoapCall>>invoke
>       2.3% {1255ms} SoapHttpConnector>>send:to:with:
> 
> **Leaves**
> 92.1% {50247ms} Dictionary(Set)>>do:
>
> **Memory**
> 	old			-1,547,728 bytes
> 	young		-72,492 bytes
> 	used		-1,620,220 bytes
> 	free		+1,420,712 bytes
>
> **GCs**
> 	full			1 totalling 229ms (0.0% uptime), avg 229.0ms
> 	incr		623 totalling 361ms (1.0% uptime), avg 1.0ms
> 	tenures		33 (avg 18 GCs/tenure)
> 	root table	0 overflows
>
> Which leaves me staring at #do: wondering where to proceed from here.  I
> emailed the author hoping maybe he'd have a better clue, but if anyone  
> likes
> tweaking code... Here's some code that needs tweaking.
>
> Ramon Leon
> http://onsmalltalk.com




More information about the Seaside mailing list