Markus,
I've profiled/debugged PDS service and found two bottlenecks in XDI4J:
1. The most part of processing time takes xdi4j.xri3.impl.parser.Parser, see
attached 1_thread.html.
However this is a class generated from ABNF, and I am not sure there is a way
to significantly increase its performance.
2. XDI has multithreading problems. The time of processing for parallel threads
increases linearly
the number of threads (see attached 5_threads.html and 10_threads.html).
This occurs because XDIReaderRegistry contains singleton readers, which, in
turn, are not thread-safe and
contain synchronized method read(). So, all threads in
EndpointServlet.readFromBody() method get the same singleton
instance of XDIReader from XDIReaderRegistry and wait on its read() method. We
can try to fix that by changing
XDIReaderRegistry to return a new instance of reader instead of singleton.
Thanks,
Sergey Lyakhov
Execution Statistics - unknown at lyakhov [ PID: 18005 ]
| Package |
|
<Base Time (seconds) |
Average Base Time (seconds) |
Cumulative Time (seconds) |
Calls |
| [-] org.eclipse.higgins.xdi4j.xri3.impl.parser |
|
2.750492 |
0.000097 |
2.750492 |
28389 |
| [-] Parser |
|
2.413481 |
0.000101 |
2.750492 |
23846 |
| decode_StringValue(java.lang.String) org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$StringValue |
|
0.447630 |
0.000153 |
0.717258 |
2930 |
| pop(java.lang.String, boolean, int) void |
|
0.363105 |
0.000046 |
0.363105 |
7878 |
| decode_NumericValue(java.lang.String, java.lang.String, int) org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$NumericValue |
|
0.282829 |
0.000198 |
0.444954 |
1426 |
| decode_iunreserved() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$iunreserved |
|
0.146287 |
0.000347 |
1.146472 |
421 |
| push(java.lang.String) void |
|
0.143105 |
0.000041 |
0.143105 |
3530 |
| push(java.lang.String, java.lang.String) void |
|
0.124827 |
0.000043 |
0.124827 |
2930 |
| decode_ALPHA() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$ALPHA |
|
0.118466 |
0.000281 |
0.527425 |
421 |
| decode_xri_pchar() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$xri_pchar |
|
0.108411 |
0.000258 |
1.668247 |
421 |
| decode_gcs_char() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$gcs_char |
|
0.064499 |
0.000403 |
0.268826 |
160 |
| push(java.lang.String, java.lang.String, java.lang.String) void |
|
0.056941 |
0.000040 |
0.056941 |
1426 |
| [+] Rule |
|
0.079069 |
0.000048 |
0.079069 |
1637 |
| [+] Parser$ALPHA |
|
0.058602 |
0.000107 |
0.078298 |
548 |
| [+] Parser$xri_pchar |
|
0.047259 |
0.000086 |
0.063165 |
548 |
| [+] Parser$iunreserved |
|
0.044059 |
0.000080 |
0.054450 |
548 |
| [+] Parser$NumericValue |
|
0.023890 |
0.000087 |
0.036128 |
274 |
| [+] Parser$subseg |
|
0.015814 |
0.000101 |
0.018772 |
156 |
| [+] Parser$gcs_char |
|
0.015168 |
0.000082 |
0.018669 |
186 |
| [+] Parser$global_subseg |
|
0.015012 |
0.000082 |
0.018644 |
184 |
| [+] Parser$literal |
|
0.011734 |
0.000080 |
0.014612 |
146 |
| [+] org.eclipse.higgins.xdi4j.io |
|
1.072608 |
0.002530 |
2.660948 |
424 |
| [+] org.eclipse.higgins.idas.cp.rdf2.impl |
|
0.986696 |
0.082225 |
0.986734 |
12 |
| [+] org.eclipse.higgins.xdi4j.xri3.impl |
|
0.755928 |
0.000333 |
3.483660 |
2272 |
| [+] org.eclipse.higgins.xdi4j.impl.memory |
|
0.431276 |
0.000687 |
0.499036 |
628 |
| [+] org.eclipse.higgins.xdi4j.messaging |
|
0.212099 |
0.000371 |
0.913515 |
571 |
| [+] org.eclipse.higgins.xdi4j.messaging.server |
|
0.179809 |
0.012843 |
6.656804 |
14 |
| [+] org.eclipse.higgins.xdi4j.impl |
|
0.066009 |
0.000446 |
0.075236 |
148 |
| [+] org.eclipse.higgins.idas.proxy |
|
0.056609 |
0.004717 |
2.102434 |
12 |
| [+] org.eclipse.higgins.xdi4j.messaging.server.impl |
|
0.030162 |
0.001160 |
2.734758 |
26 |
|
Execution Statistics - unknown at lyakhov [ PID: 18167 ]
| Package |
|
<Base Time (seconds) |
Average Base Time (seconds) |
Cumulative Time (seconds) |
Calls |
| [-] org.eclipse.higgins.xdi4j.xri3.impl.parser |
|
29.136240 |
0.000299 |
29.136240 |
97488 |
| [+] Parser |
|
25.457523 |
0.000311 |
29.136240 |
81910 |
| [+] Rule |
|
0.722059 |
0.000129 |
0.722059 |
5608 |
| [+] Parser$ALPHA |
|
0.600648 |
0.000327 |
0.713200 |
1836 |
| [+] Parser$iunreserved |
|
0.514586 |
0.000280 |
0.659610 |
1836 |
| [+] Parser$xri_pchar |
|
0.510353 |
0.000278 |
0.617685 |
1836 |
| [+] Parser$NumericValue |
|
0.249927 |
0.000272 |
0.363276 |
918 |
| [+] Parser$gcs_char |
|
0.179973 |
0.000282 |
0.208933 |
638 |
| [+] Parser$global_subseg |
|
0.179423 |
0.000282 |
0.232805 |
636 |
| [+] Parser$subseg |
|
0.125755 |
0.000271 |
0.157500 |
464 |
| [+] Parser$literal |
|
0.116042 |
0.000265 |
0.145595 |
438 |
| [-] org.eclipse.higgins.xdi4j.messaging.server |
|
16.503250 |
0.211580 |
66.269191 |
78 |
| [-] EndpointServlet |
|
16.468306 |
0.279124 |
66.269191 |
59 |
| readFromBody(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.MessageEnvelope |
|
14.774707 |
1.477471 |
26.502365 |
10 |
| sendResult(org.eclipse.higgins.xdi4j.messaging.MessageResult, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
1.570270 |
0.174474 |
2.054770 |
9 |
| execute(org.eclipse.higgins.xdi4j.messaging.MessageEnvelope, org.eclipse.higgins.xdi4j.messaging.server.MessagingTarget, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.MessageResult |
|
0.081696 |
0.008170 |
37.665725 |
10 |
| findMessagingTarget(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.server.MessagingTarget |
|
0.021808 |
0.002181 |
0.025341 |
10 |
| processPostRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
0.011499 |
0.001150 |
66.260865 |
10 |
| doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
0.008326 |
0.000833 |
66.269191 |
10 |
| [+] EndpointRegistry |
|
0.034944 |
0.001839 |
0.034944 |
19 |
| [+] org.eclipse.higgins.idas.cp.rdf2.impl |
|
7.154126 |
0.077762 |
7.154480 |
92 |
| [+] org.eclipse.higgins.xdi4j.xri3.impl |
|
3.163009 |
0.000315 |
32.269896 |
10057 |
| [+] org.eclipse.higgins.idas.proxy |
|
2.750889 |
0.036196 |
23.926678 |
76 |
| [+] org.eclipse.higgins.xdi4j.messaging |
|
2.412885 |
0.000848 |
5.599597 |
2845 |
| [+] org.eclipse.higgins.xdi4j.impl.memory |
|
1.474631 |
0.000431 |
2.227595 |
3421 |
| [+] org.eclipse.higgins.xdi4j.io |
|
0.796342 |
0.000488 |
8.772104 |
1632 |
| [+] org.eclipse.higgins.xdi4j.impl |
|
0.749180 |
0.000797 |
0.969203 |
940 |
| [+] org.eclipse.higgins.as |
|
0.634668 |
0.009473 |
0.787123 |
67 |
|
Execution Statistics - unknown at lyakhov [ PID: 18376 ]
| Package |
|
<Base Time (seconds) |
Average Base Time (seconds) |
Cumulative Time (seconds) |
Calls |
| [-] org.eclipse.higgins.xdi4j.messaging.server |
|
57.058745 |
0.633986 |
138.950985 |
90 |
| [-] EndpointServlet |
|
57.007592 |
0.950127 |
138.950227 |
60 |
| readFromBody(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.MessageEnvelope |
|
48.335809 |
4.833581 |
65.046512 |
10 |
| sendResult(org.eclipse.higgins.xdi4j.messaging.MessageResult, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
8.517519 |
0.851752 |
10.077293 |
10 |
| doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
0.076527 |
0.007653 |
138.950227 |
10 |
| execute(org.eclipse.higgins.xdi4j.messaging.MessageEnvelope, org.eclipse.higgins.xdi4j.messaging.server.MessagingTarget, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.MessageResult |
|
0.048369 |
0.004837 |
63.717306 |
10 |
| findMessagingTarget(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) org.eclipse.higgins.xdi4j.messaging.server.MessagingTarget |
|
0.020433 |
0.002043 |
0.021076 |
10 |
| processPostRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) void |
|
0.008935 |
0.000893 |
138.873701 |
10 |
| [+] EndpointRegistry |
|
0.051153 |
0.001705 |
0.051153 |
30 |
| [-] org.eclipse.higgins.xdi4j.xri3.impl.parser |
|
46.601419 |
0.000468 |
46.601419 |
99513 |
| [-] Parser |
|
40.901421 |
0.000489 |
46.601419 |
83587 |
| decode_StringValue(java.lang.String) org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$StringValue |
|
7.727352 |
0.000747 |
12.541608 |
10347 |
| pop(java.lang.String, boolean, int) void |
|
6.069264 |
0.000220 |
6.069264 |
27624 |
| decode_NumericValue(java.lang.String, java.lang.String, int) org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$NumericValue |
|
4.061131 |
0.000840 |
7.042438 |
4834 |
| push(java.lang.String) void |
|
2.772412 |
0.000223 |
2.772412 |
12443 |
| push(java.lang.String, java.lang.String) void |
|
2.403805 |
0.000232 |
2.403805 |
10347 |
| decode_iunreserved() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$iunreserved |
|
2.341118 |
0.001636 |
18.268974 |
1431 |
| decode_ALPHA() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$ALPHA |
|
1.923859 |
0.001344 |
7.956026 |
1431 |
| decode_xri_pchar() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$xri_pchar |
|
1.849527 |
0.001292 |
26.834277 |
1431 |
| push(java.lang.String, java.lang.String, java.lang.String) void |
|
1.161920 |
0.000240 |
1.161920 |
4834 |
| decode_gcs_char() org.eclipse.higgins.xdi4j.xri3.impl.parser.Parser$gcs_char |
|
1.126510 |
0.001932 |
4.505486 |
583 |
| [+] Rule |
|
1.290699 |
0.000225 |
1.290699 |
5733 |
| [+] Parser$iunreserved |
|
0.855441 |
0.000456 |
1.046797 |
1876 |
| [+] Parser$ALPHA |
|
0.827930 |
0.000441 |
1.042043 |
1876 |
| [+] Parser$xri_pchar |
|
0.809764 |
0.000432 |
1.021660 |
1876 |
| [+] Parser$NumericValue |
|
0.409141 |
0.000436 |
0.624630 |
938 |
| [+] Parser$gcs_char |
|
0.281124 |
0.000432 |
0.361617 |
650 |
| [+] Parser$global_subseg |
|
0.258846 |
0.000398 |
0.322397 |
650 |
| [+] Parser$subseg |
|
0.155374 |
0.000331 |
0.190034 |
470 |
| [+] Parser$literal |
|
0.151399 |
0.000339 |
0.196707 |
446 |
| [+] org.eclipse.higgins.idas.cp.rdf2.impl |
|
14.002660 |
0.072931 |
14.005165 |
192 |
| [+] org.eclipse.higgins.xdi4j.xri3.impl |
|
4.882577 |
0.000478 |
51.215716 |
10212 |
| [+] org.eclipse.higgins.idas.proxy |
|
3.492929 |
0.043123 |
39.765002 |
81 |
| [+] org.eclipse.higgins.as |
|
3.390204 |
0.018627 |
3.969223 |
182 |
| [+] org.eclipse.higgins.xdi4j.messaging |
|
3.225453 |
0.001133 |
7.037514 |
2848 |
| [+] org.eclipse.higgins.xdi4j.impl.memory |
|
1.969135 |
0.000563 |
2.776412 |
3495 |
| [+] org.eclipse.higgins.xdi4j.io |
|
1.222081 |
0.000745 |
13.996577 |
1640 |
| [+] org.eclipse.higgins.xdi4j.util.iterators |
|
0.851448 |
0.000402 |
6.807340 |
2120 |
|
_______________________________________________
higgins-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/higgins-dev