Test Results
These results are for v0.3 of SuperPermsTest on 1. Dec. 2011. To the newest version. To the previous version
Test Results
This page will display test results of myself running the testcases for the various plugins. You can use them as a reference to compare plugin performance. Be aware that the results will slightly differ between each run of the test (+- 5% usually), therefore small differences in runtime may have just been "bad luck". I ran the tests multiple times for each plugin and picked one of the most favourable for each.
The tests were set up according to this guideline and run on a fresh craftbukkit server, with a newly generated world and no other plugins besides SuperPermsTest and the relevant permissions plugin (and support plugins,usually a fake "Permissions" plugin).
How to read the tables:
You'll see two tables. The first table displays results collected by calling "player.hasPermission(node);", which is the usual way of checking permissions against "SuperPerms". The second displays results collected by calling "permissionHandler.has(player, world, node)", which is the "old" way to interact with plugins that are Permissions 2/3 compatible.
Each table has some columns:
- The first column will show the testcase. To find out what each testcase is about, read this.
- The second column the checked "node".
- The next five columns show the result we get from bP (bPermissions 1.9.1), GM (Essentials GroupManager 1.6.18 Phoenix), PB (PermissionsBukkit 1.2) and PEx (PermissionsEx 1.17).
- The last columns will show the time needed for a lookup in ns (only if the testcase was a success). Smaller times are usually better.
If a plugin failed a part of a testcase, the result is written in red font. This means that the plugins results didn't match any of the expected results for that testcase (there may be more than one accepted result for a testcase, so don't wonder if plugins pass a test despite having different results).
All tests were done with a file backend.
Test results for SuperPerms
Using default sample size of 10000
Test | Node | bP | GM | BP | PEx | bP | GM | BP | PEx |
---|---|---|---|---|---|---|---|---|---|
test01 | layer11 | false | false | false | false | 349 | 356 | 379 | 139 |
layer21 | false | false | false | false | 333 | 340 | 355 | 139 | |
layer31 | false | false | false | false | 336 | 340 | 338 | 140 | |
layer41 | false | false | false | false | 341 | 342 | 360 | 163 | |
test02 | layer12 | true | true | true | true | 129 | 129 | 141 | 139 |
layer22 | true | true | true | true | 126 | 124 | 128 | 150 | |
layer32 | true | true | true | true | 124 | 125 | 139 | 149 | |
layer42 | true | true | true | true | 126 | 124 | 137 | 147 | |
test03 | layer13 | true | true | true | true | 128 | 127 | 126 | 138 |
layer23 | true | true | true | true | 124 | 128 | 144 | 136 | |
layer33 | true | true | true | true | 130 | 126 | 133 | 137 | |
layer43 | true | true | true | true | 124 | 144 | 145 | 139 | |
test04 | layer14 | false | false | false | false | 343 | 350 | 351 | 136 |
layer24 | true | true | true | true | 130 | 135 | 129 | 133 | |
layer34 | true | true | true | true | 124 | 136 | 132 | 134 | |
layer44 | true | true | true | true | 126 | 128 | 127 | 140 | |
test05 | layer15 | false | false | false | false | 351 | 346 | 343 | 142 |
layer25 | false | false | false | false | 399 | 341 | 450 | 141 | |
layer35 | true | true | true | true | 126 | 126 | 125 | 138 | |
layer45 | true | true | true | true | 127 | 126 | 130 | 134 | |
test06 | layer16 | false | false | false | false | 357 | 353 | 352 | 139 |
layer26 | false | false | false | false | 354 | 338 | 337 | 140 | |
layer36 | false | false | false | false | 556 | 353 | 346 | 133 | |
layer46 | true | true | true | true | 126 | 129 | 126 | 136 | |
test07 | layer17 | true | true | true | true | 131 | 136 | 132 | 140 |
layer27 | false | false | false | false | 127 | 128 | 135 | 137 | |
layer37 | false | false | false | false | 130 | 131 | 135 | 134 | |
layer47 | false | false | false | false | 129 | 134 | 140 | 132 | |
test08 | layer18 | true | true | true | true | 128 | 127 | 131 | 143 |
layer28 | false | false | false | false | 134 | 130 | 133 | 142 | |
layer38 | true | true | true | true | 131 | 126 | 136 | 143 | |
layer48 | true | true | true | true | 131 | 126 | 137 | 140 | |
test09 | single1 | true | true | true | true | 133 | 139 | 137 | 136 |
single2 | false | false | false | false | 355 | 367 | 395 | 135 | |
test10 | str1 | true | true | true | true | 90 | 90 | 93 | 132 |
str1.c1 | true | true | true | true | 133 | 128 | 126 | 142 | |
str1.c2 | false | false | false | false | 342 | 348 | 343 | 136 | |
test11 | str2.* | true | true | true | true | 112 | 114 | 116 | 133 |
str2 | false | false | false | false | 284 | 293 | 309 | 130 | |
str2.c1 | true | true | true | true | 123 | 125 | 130 | 136 | |
str2.c2 | false | true | false | true | 347 | 126 | 352 | 135 | |
test12 | str3.* | true | true | true | true | 127 | 124 | 120 | 139 |
str3 | false | false | false | false | 282 | 298 | 301 | 128 | |
c1.str3 | false | false | false | false | 335 | 349 | 344 | 136 | |
test13 | case1 | true | true | true | true | 109 | 106 | 105 | 146 |
test14 | attach1 | true | true | true | true | 112 | 108 | 113 | 135 |
Test results for "old" Permissions (bridges/compat layers etc.)
Using default sample size of 10000
Test | Node | bP | GM | BP | PEx | bP | GM | BP | PEx |
---|---|---|---|---|---|---|---|---|---|
test01 | layer11 | false | false | false | false | 456 | 660 | 2019 | 314 |
layer21 | false | false | false | false | 448 | 653 | 1980 | 306 | |
layer31 | false | false | false | false | 450 | 650 | 1974 | 302 | |
layer41 | false | false | false | false | 449 | 659 | 2027 | 297 | |
test02 | layer12 | true | true | true | true | 548 | 495 | 1866 | 310 |
layer22 | true | true | true | true | 550 | 499 | 1766 | 311 | |
layer32 | true | true | true | true | 552 | 495 | 1763 | 326 | |
layer42 | true | true | true | true | 544 | 490 | 1755 | 336 | |
test03 | layer13 | true | true | true | true | 557 | 494 | 1793 | 322 |
layer23 | true | true | true | false | 551 | 491 | 1781 | 420 | |
layer33 | true | true | true | false | 543 | 495 | 1880 | 303 | |
layer43 | true | true | true | false | 537 | 497 | 1852 | 311 | |
test04 | layer14 | false | false | false | false | 457 | 667 | 2043 | 298 |
layer24 | true | true | true | true | 560 | 501 | 1790 | 313 | |
layer34 | true | true | true | false | 559 | 611 | 1780 | 300 | |
layer44 | true | true | true | false | 559 | 495 | 1768 | 302 | |
test05 | layer15 | false | false | false | false | 451 | 664 | 2164 | 311 |
layer25 | false | false | false | false | 450 | 680 | 2057 | 309 | |
layer35 | true | true | true | true | 536 | 517 | 1861 | 314 | |
layer45 | true | true | true | false | 543 | 494 | 1833 | 302 | |
test06 | layer16 | false | false | false | false | 449 | 653 | 2069 | 314 |
layer26 | false | false | false | false | 452 | 659 | 2025 | 309 | |
layer36 | false | false | false | false | 459 | 647 | 2096 | 296 | |
layer46 | true | true | true | true | 534 | 503 | 1838 | 307 | |
test07 | layer17 | true | true | true | true | 576 | 503 | 1851 | 314 |
layer27 | false | false | false | false | 556 | 499 | 1827 | 352 | |
layer37 | false | false | false | false | 564 | 509 | 1790 | 297 | |
layer47 | false | false | false | false | 547 | 505 | 1761 | 315 | |
test08 | layer18 | true | true | true | true | 561 | 518 | 1855 | 318 |
layer28 | false | false | false | false | 572 | 514 | 1858 | 313 | |
layer38 | true | true | true | true | 555 | 522 | 1771 | 322 | |
layer48 | true | true | true | false | 570 | 498 | 1764 | 313 | |
test09 | single1 | true | true | true | false | 545 | 504 | 1783 | 307 |
single2 | false | false | false | false | 448 | 658 | 2035 | 296 | |
test10 | str1 | true | true | true | true | 473 | 434 | 1687 | 305 |
str1.c1 | true | true | true | false | 545 | 526 | 3062 | 299 | |
str1.c2 | false | false | false | false | 593 | 666 | 3251 | 299 | |
test11 | str2.* | true | true | true | true | 517 | 471 | 2970 | 320 |
str2 | false | false | false | false | 422 | 594 | 1922 | 313 | |
str2.c1 | true | true | true | true | 525 | 499 | 3103 | 334 | |
str2.c2 | true | true | false | true | 646 | 489 | 3333 | 353 | |
test12 | str3.* | true | true | true | true | 516 | 473 | 2959 | 315 |
str3 | false | false | false | false | 426 | 608 | 1888 | 307 | |
c1.str3 | false | false | false | false | 591 | 660 | 3251 | 315 | |
test13 | case1 | true | true | true | false | 518 | 568 | 1803 | 308 |
test14 | attach1 | true | false | true | false | 538 | 1676 | 1841 | 297 |
Interpreting the results
Here are my thoughts about the results that you can see above. They are by no means the be all, end all of truth, just educated guesses and ideas.
- SuperPerms Correctness: All plugins manage to deliver expected results, although some may differ in how they interpret permission nodes that contain a "*". PermissionsEx fixed the problem that would sometimes prevent SuperPerms from working correctly.
- SuperPerms Speed: All plugins are very fast in their latest versions. PermissionsEx 1.17 manages to be faster in checking permissions that evaluate to "false" than the rest.
- "Old" Permissions Correctness: Again, all plugins manage to deliver expected results. Either they deliver "SuperPerms" results like bPermissions and PermissionsBukkit), or results that are similar to what Permissions 3 would give. If you plan on using the Permissions 3 API in your plugin to query permissions, be aware of those differences!
- "Old" Permissions Speed: All plugins manage to be very fast in their latest versions, except for PermissionsBukkit, which falls a bit behind. PermissionsEx 1.17 manages to be a bit faster than the others. Essentials GroupManager fixed the serious performance problems it had before.
Differences between the plugins
I just want to make a small list of key differences/similarities to help people understand why something may (not) work with specific plugins. If you have ideas on what other properties should be listed in this table, message me. This list should be about how the plugins are designed, not if they have (currently) a bug or similar.
bPerms | GroupMan | PermBukkit | PermEx | |
---|---|---|---|---|
wildcard node (usually a *) | yes | yes | no | yes |
wildcard has precendence over SuperPerms | no | no | no | yes |
"old" Permissions requests handled like SuperPerms requests | yes | yes* | yes | no |
negation of permissions possible | yes | yes | yes | yes |
(*)GroupManager ignores permission attachments in these cases, but respects default permission settings.