You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by Sam Ruby <ru...@us.ibm.com> on 2001/04/18 04:14:58 UTC
Timings for processing of small messages
Summary:
Axis and Xerces 2 provide hope for significantly better response time
for small messages then their predecessors.
Disclaimers:
Processing of small messages is not the only scenario, but I would argue
it is an important one. Particularly from the perspective of measuring
overhead. This test is also designed to measure latency (time to send
and receive a request) under rather ideal conditions (one client,
request is completely processed before the next is issued). Other
measurements are important, like throughput (number of messages a server
can process under heavy loads).
These disclaimers aside, this is just the first scenario I have analyzed
in any detail. It is likely to identify areas of fixed overhead, and
any improvement made here will likely benefit all scenarios and will
improve throughput too. I designed these tests unaware of what the
results would be. The tests were not designed to produce a specific
result. I encourage others to reproduce the results. All sources are
attached.
Methodology.
I sent a rather small but syntactically correct soap message, and
generated an appropriate reply. The reply contains data found in the
request, so parsing is required. In the soap and axis cases,
conversions to and from floating point were done, in all others the data
was simply copied as is. In each case, the results were verified using
the TcpTunnelGui tool. The number of request/response pairs were
counted in periods of eleven seconds each, with the first second
ignored. Each test was repeated five times, with the best time taken.
As a general rule, timings improved each time, a phenomenon I attribute
to hotspot. The messages were designed so that they could be processed
by MS dot net beta 1, the Apache xml-soap, and the Apache xml-axis
implementations. All tests were performed with the latest versions of
each of the products compiled from source from CVS within the last 24
hours.
The standard message was:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="
http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<soap:Body>
<echoFloat xmlns="http://tempuri.org/">
<input xsi:type="xsd:float">3.14159</input>
</echoFloat>
</soap:Body>
</soap:Envelope>
With a response of:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="
http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<soap:Body>
<echoFloatResult xmlns="http://tempuri.org/">
<result>3.14159</result>
</echoFloatResult>
</soap:Body>
</soap:Envelope>
Overall results:
The xml-soap implementation processed 50.8 messages at the end, whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.
Parser overhead:
Alternatives to Xerces 1's implementation of DOM (5533 usec) include
JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
worth repeating - these measurements are based on repeatedly parsing
small messages in the context of a web server; performance of other
scenarios may differ.
Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
1,583 usec for Crimson, and 690 usec for Xerces 2.
With Xerces 2, a native interface is available. Timings were 621 usec
for the standard configuration, and 531 usec for the non-validating
configuration.
Two non-parser implementations were also created - one was based on
strings, the other was based on byte arrays. The byte array version was
faster by 163 usec. Hopefully this kind of data can be used to identify
techniques to target in order to further optimize the soap and axis
implementations.
Configuration:
550 Mhz Pentium III
196M RAM
Sun JDK 1.3 w/hotspot
Win2K server
- Sam Ruby
(See attached file: echosoap.zip)
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
graham glass wrote:
> hi guys,
>
> incidentally, the Electric XML 1.4 library for parsing
> and manipulating XML was just released, with almost double
> the performance of version 1.3.
>
> Electric XML 1.4 takes about 0.3 milliseconds to parse
> a standard small SOAP message similar to the one that
> sam posted. the benchmark sample i used is here:
>
> http://www.themindelectric.com/products/xml/benchmarks.html
>
> GLUE uses Electric XML/HTTP/servlets and currently
> gets around 550 SOAP messages/second round trip using
> HTTP 1.1 keep alive connections. i think the production
> release should be able to achieve better performance,
> maybe 800 messages/second.
i think that it is only meaningful when compared in exactly the same
environment.
could you add electric xml to tests that are already in echosoap? it would be
very interesting ot see how it compares with other parsers (you would need just
to add two new files and to modify *.bat file as i did with XPP in
http://www.extreme.indiana.edu/~aslom/echosoap/).
thanks,
alek
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
graham glass wrote:
> hi guys,
>
> incidentally, the Electric XML 1.4 library for parsing
> and manipulating XML was just released, with almost double
> the performance of version 1.3.
>
> Electric XML 1.4 takes about 0.3 milliseconds to parse
> a standard small SOAP message similar to the one that
> sam posted. the benchmark sample i used is here:
>
> http://www.themindelectric.com/products/xml/benchmarks.html
>
> GLUE uses Electric XML/HTTP/servlets and currently
> gets around 550 SOAP messages/second round trip using
> HTTP 1.1 keep alive connections. i think the production
> release should be able to achieve better performance,
> maybe 800 messages/second.
i think that it is only meaningful when compared in exactly the same
environment.
could you add electric xml to tests that are already in echosoap? it would be
very interesting ot see how it compares with other parsers (you would need just
to add two new files and to modify *.bat file as i did with XPP in
http://www.extreme.indiana.edu/~aslom/echosoap/).
thanks,
alek
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
graham glass wrote:
> hi guys,
>
> incidentally, the Electric XML 1.4 library for parsing
> and manipulating XML was just released, with almost double
> the performance of version 1.3.
>
> Electric XML 1.4 takes about 0.3 milliseconds to parse
> a standard small SOAP message similar to the one that
> sam posted. the benchmark sample i used is here:
>
> http://www.themindelectric.com/products/xml/benchmarks.html
>
> GLUE uses Electric XML/HTTP/servlets and currently
> gets around 550 SOAP messages/second round trip using
> HTTP 1.1 keep alive connections. i think the production
> release should be able to achieve better performance,
> maybe 800 messages/second.
i think that it is only meaningful when compared in exactly the same
environment.
could you add electric xml to tests that are already in echosoap? it would be
very interesting ot see how it compares with other parsers (you would need just
to add two new files and to modify *.bat file as i did with XPP in
http://www.extreme.indiana.edu/~aslom/echosoap/).
thanks,
alek
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
RE: Timings for processing of small messages
Posted by graham glass <gr...@mindspring.com>.
hi guys,
incidentally, the Electric XML 1.4 library for parsing
and manipulating XML was just released, with almost double
the performance of version 1.3.
Electric XML 1.4 takes about 0.3 milliseconds to parse
a standard small SOAP message similar to the one that
sam posted. the benchmark sample i used is here:
http://www.themindelectric.com/products/xml/benchmarks.html
GLUE uses Electric XML/HTTP/servlets and currently
gets around 550 SOAP messages/second round trip using
HTTP 1.1 keep alive connections. i think the production
release should be able to achieve better performance,
maybe 800 messages/second.
cheers,
graham
-----Original Message-----
From: Aleksander Slominski [mailto:aslom@cs.indiana.edu]
Sent: Wednesday, April 18, 2001 2:41 AM
To: axis-dev@xml.apache.org
Cc: soap-dev@xml.apache.org; xerces-j-dev@xml.apache.org
Subject: Re: Timings for processing of small messages
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified
test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version
was
> faster by 163 usec. Hopefully this kind of data can be used to
identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by
number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that
XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and
memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP
keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not
introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more
difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end,
whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and
xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX
1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i
guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per
second in servlet).
i could not get any good conclusion from tests - calculating overhead it
would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input
stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to
achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on
java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
RE: Timings for processing of small messages
Posted by graham glass <gr...@mindspring.com>.
hi guys,
incidentally, the Electric XML 1.4 library for parsing
and manipulating XML was just released, with almost double
the performance of version 1.3.
Electric XML 1.4 takes about 0.3 milliseconds to parse
a standard small SOAP message similar to the one that
sam posted. the benchmark sample i used is here:
http://www.themindelectric.com/products/xml/benchmarks.html
GLUE uses Electric XML/HTTP/servlets and currently
gets around 550 SOAP messages/second round trip using
HTTP 1.1 keep alive connections. i think the production
release should be able to achieve better performance,
maybe 800 messages/second.
cheers,
graham
-----Original Message-----
From: Aleksander Slominski [mailto:aslom@cs.indiana.edu]
Sent: Wednesday, April 18, 2001 2:41 AM
To: axis-dev@xml.apache.org
Cc: soap-dev@xml.apache.org; xerces-j-dev@xml.apache.org
Subject: Re: Timings for processing of small messages
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified
test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version
was
> faster by 163 usec. Hopefully this kind of data can be used to
identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by
number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that
XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and
memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP
keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not
introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more
difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end,
whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and
xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX
1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i
guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per
second in servlet).
i could not get any good conclusion from tests - calculating overhead it
would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input
stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to
achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on
java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
RE: Timings for processing of small messages
Posted by graham glass <gr...@mindspring.com>.
hi guys,
incidentally, the Electric XML 1.4 library for parsing
and manipulating XML was just released, with almost double
the performance of version 1.3.
Electric XML 1.4 takes about 0.3 milliseconds to parse
a standard small SOAP message similar to the one that
sam posted. the benchmark sample i used is here:
http://www.themindelectric.com/products/xml/benchmarks.html
GLUE uses Electric XML/HTTP/servlets and currently
gets around 550 SOAP messages/second round trip using
HTTP 1.1 keep alive connections. i think the production
release should be able to achieve better performance,
maybe 800 messages/second.
cheers,
graham
-----Original Message-----
From: Aleksander Slominski [mailto:aslom@cs.indiana.edu]
Sent: Wednesday, April 18, 2001 2:41 AM
To: axis-dev@xml.apache.org
Cc: soap-dev@xml.apache.org; xerces-j-dev@xml.apache.org
Subject: Re: Timings for processing of small messages
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified
test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version
was
> faster by 163 usec. Hopefully this kind of data can be used to
identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by
number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that
XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and
memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP
keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not
introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more
difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end,
whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and
xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX
1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i
guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per
second in servlet).
i could not get any good conclusion from tests - calculating overhead it
would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input
stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to
achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on
java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version was
> faster by 163 usec. Hopefully this kind of data can be used to identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end, whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX 1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per second in servlet).
i could not get any good conclusion from tests - calculating overhead it would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version was
> faster by 163 usec. Hopefully this kind of data can be used to identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end, whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX 1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per second in servlet).
i could not get any good conclusion from tests - calculating overhead it would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)
Re: Timings for processing of small messages
Posted by Aleksander Slominski <as...@cs.indiana.edu>.
Sam Ruby wrote:
> Summary:
>
> Axis and Xerces 2 provide hope for significantly better response time
> for small messages then their predecessors.
hi,
i have re-run your tests and added new tests for Xml Pull Parser (modified test sources are available at
http://www.extreme.indiana.edu/~aslom/echosoap/).
> Parser overhead:
>
> Alternatives to Xerces 1's implementation of DOM (5533 usec) include
> JDOM (5224 usec), Crimson (1789 usec), and Xerces 2 (801 usec). It is
> worth repeating - these measurements are based on repeatedly parsing
> small messages in the context of a web server; performance of other
> scenarios may differ.
>
> Alternatives to DOM is SAX. Measurements were 3,050 usec for Xerces 1,
> 1,583 usec for Crimson, and 690 usec for Xerces 2.
>
> With Xerces 2, a native interface is available. Timings were 621 usec
> for the standard configuration, and 531 usec for the non-validating
> configuration.
>
> Two non-parser implementations were also created - one was based on
> strings, the other was based on byte arrays. The byte array version was
> faster by 163 usec. Hopefully this kind of data can be used to identify
> techniques to target in order to further optimize the soap and axis
> implementations.
i have got different results (though following your patter)
here are my observations: there is following hierarchy (as measured by number of messages per second):
#messages per second/#microseconds per message test_name(s)
108/9200 jdom, dom1 (from xerces1.3.0)
150/6500 sax1 (from xerces1.3.0)
255/3900 dom2 (from xerces2)
260/3740 sax2
277/3600 xnin, xnis (internal xerces2 interfaces)
300/3300 char, xpp (Xml Pull Parser 1.1)
330/3030 byte
i think that tests should be re-evaluated as from it one could infer that XPP is fast as reading characters directing from input and it seems not
right :-)
i am suspecting that tests are spending too much time doing buffering and memory IO including socket connection and disconnection that heavily
affects performance - it would be interesting to see tests that uses HTTP keep-alive and allows for streaming of input into parsers (and not
buffering it). however it requires very careful coding that will not introduce unnecessary buffering and delays...( it would be also interesting
to do some testing with chunked encoding but this is even more difficult...).
(...) The xml-soap implementation processed 50.8 messages at the end, whereas
xml-axis was able to process 93.7 messages per second. This translates
to 19,685 microseconds per message for xml-soap, and 10,672 microseconds
per message for xml-axis.
Both results are based on the Xerces 1 DOM implementation and Tomcat
3.3. The overhead per message for each have been computed at 5,533
microseconds and 3,548 microseconds respectively - the latter number
includes wait time for the client. Subtracting out this fixed cost
results in an overhead of 10,604 microseconds per message for xml-soap
and 1,591 microseconds per message for xml-axis.(...)
that seems like extremely good result :-)
i have run also servlet tests (without soap and axis but just dom, sax and xpp) but the results here are extremely inconclusive - i was using
tomcat 3.2.1 and during all tests (sax, dome, xpp and xpp2sax which is SAX 1.0 driver on top of XML Pull Parser) cpu utilization was below 50%!
that means that there are very significant delays somewhere in tomcat IO (i guess) affecting heavily servlet performance (in tests they are 20x
slower - from 250+ messages per second when standalone to 15-17 messages per second in servlet).
i could not get any good conclusion from tests - calculating overhead it would seem that char test is _maximum_ performance that parser can
possible achieve (as it is just converting to UNICODE from byte input stream and it must be done in any XML parser) so then i could conclude that
XPP _is_ getting this maximum performance but i think it is possible to achieve even better performance when streaming input into parser...
let me know what you think about it.
thanks,
alek
ps. tests were executed on PII450Mhz/256MB RAM. with Windows 2000 SP1 on java -version:
java version "1.3.1-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-beta-b15)
Java HotSpot(TM) Client VM (build 1.3.1beta-b15, mixed mode)
and here are actual results:
byte 342.3 2921.0
byte 330.0 3030.0
byte 326.3 3064.0
byte 329.4 3035.0
byte 319.5 3129.0
char 288.4 3467.0
char 297.6 3360.0
char 301.7 3314.0
char 303.3 3297.0
char 304.5 3284.0
sax1 140.2 7132.0
sax1 150.4 6648.0
sax1 153.0 6535.0
sax1 152.6 6553.0
sax1 148.2 6747.0
dom1 96.3 10384.0
dom1 102.3 9775.0
dom1 105.5 9478.0
dom1 105.4 9487.0
dom1 105.3 9496.0
sax2 241.6 4139.0
sax2 267.3 3741.0
sax2 266.9 3746.0
sax2 267.3 3741.0
sax2 267.3 3741.0
dom2 224.3 4458.0
dom2 255.7 3910.0
dom2 256.1 3904.0
dom2 257.8 3878.0
dom2 256.1 3904.0
jdom 83.8 11933.0
jdom 102.7 9737.0
jdom 107.7 9285.0
jdom 108.2 9242.0
jdom 104.5 9569.0
xnin 253.7 3941.0
xnin 278.0 3597.0
xnin 277.5 3603.0
xnin 278.6 3589.0
xnin 277.5 3603.0
xnis 248.6 4022.0
xnis 272.7 3667.0
xnis 274.1 3648.0
xnis 272.6 3668.0
xnis 273.6 3654.0
xpp 290.0 3448.0
xpp 299.0 3344.0
xpp 301.7 3314.0
xpp 300.8 3324.0
xpp 301.4 3317.0
echo/xpp 17.7 56497.0
echo/xpp 16.9 59171.0
echo/xpp 17.7 56497.0
echo/xpp 17.7 56497.0
echo/xpp 17.8 56179.0
echo/xpp2sax 17.7 56497.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.6 56818.0
echo/xpp2sax 17.8 56179.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/sax 16.3 61349.0
echo/sax 16.6 60240.0
echo/dom 15.2 65789.0
echo/dom 15.2 65789.0
echo/dom 14.6 68493.0
echo/dom 15.0 66666.0
echo/dom 15.0 66666.0
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika(1162-1241)