
| Key: |
DIRSERVER-600
|
| Type: |
Improvement
|
| Status: |
Closed
|
| Resolution: |
Fixed
|
| Priority: |
Major
|
| Assignee: |
Unassigned
|
| Reporter: |
Emmanuel Lecharny
|
| Votes: |
0
|
| Watchers: |
0
|
|
If you were logged in you would be able to see more operations.
|
|
|
| Resolution Date: |
31/Aug/06 08:14 AM
|
|
We have mesured that DN parsing is the hot spot in the server : we spend around 80 % of server time to parse DNs.
After having studied the way BindRequest does handle DN, we can say that for a single bind for the user "uid=admin,ou=system", we have more than 40 parsing done. Here is a list of all the parsing in the DnComparator.compare() method :
(The '*' in front of each line shows where a parsing of both DN is done)
* Compare 'ou=groups,ou=system' and 'uid=admin,ou=system'
* Compare 'prefnodename=sysPrefRoot,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
* Compare 'ou=groups,ou=system' and 'uid=admin,ou=system'
* Compare 'prefnodename=sysPrefRoot,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
If we can change this compare function to work with Name instead of String we could have a huge improvment : more that 35x faster
(I wrote a micro-bench to mesure the difference : around 36 times faster).
As this is not the single place where we can gain time (we have a lot or String -> DN and DN -> String conversions during the Bind process), we would be able to handle Bind Request much much faster, too (being aware that we have a lot of other costly operaions that will nor allow a x40 improvment).
My personnal guess is that we should be able to handle around 5000 binds per second against the current 300, but this is just a guess :)
|
|
Description
|
We have mesured that DN parsing is the hot spot in the server : we spend around 80 % of server time to parse DNs.
After having studied the way BindRequest does handle DN, we can say that for a single bind for the user "uid=admin,ou=system", we have more than 40 parsing done. Here is a list of all the parsing in the DnComparator.compare() method :
(The '*' in front of each line shows where a parsing of both DN is done)
* Compare 'ou=groups,ou=system' and 'uid=admin,ou=system'
* Compare 'prefnodename=sysPrefRoot,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
* Compare 'ou=groups,ou=system' and 'uid=admin,ou=system'
* Compare 'prefnodename=sysPrefRoot,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
Compare 'uid=admin,ou=system' and 'uid=admin,ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
* Compare 'ou=groups,ou=system' and 'ou=system'
* Compare 'ou=interceptors,ou=configuration,ou=system' and 'ou=system'
* Compare 'ou=configuration,ou=system' and 'ou=system'
Compare 'ou=system' and 'ou=system'
If we can change this compare function to work with Name instead of String we could have a huge improvment : more that 35x faster
(I wrote a micro-bench to mesure the difference : around 36 times faster).
As this is not the single place where we can gain time (we have a lot or String -> DN and DN -> String conversions during the Bind process), we would be able to handle Bind Request much much faster, too (being aware that we have a lot of other costly operaions that will nor allow a x40 improvment).
My personnal guess is that we should be able to handle around 5000 binds per second against the current 300, but this is just a guess :)
|
Show » |
| There are no subversion log entries for this issue yet.
|
|