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

TestNodebPGMBPPExbPGMBPPEx
test01layer11falsefalsefalsefalse349356379139
layer21falsefalsefalsefalse333340355139
layer31falsefalsefalsefalse336340338140
layer41falsefalsefalsefalse341342360163
test02layer12truetruetruetrue129129141139
layer22truetruetruetrue126124128150
layer32truetruetruetrue124125139149
layer42truetruetruetrue126124137147
test03layer13truetruetruetrue128127126138
layer23truetruetruetrue124128144136
layer33truetruetruetrue130126133137
layer43truetruetruetrue124144145139
test04layer14falsefalsefalsefalse343350351136
layer24truetruetruetrue130135129133
layer34truetruetruetrue124136132134
layer44truetruetruetrue126128127140
test05layer15falsefalsefalsefalse351346343142
layer25falsefalsefalsefalse399341450141
layer35truetruetruetrue126126125138
layer45truetruetruetrue127126130134
test06layer16falsefalsefalsefalse357353352139
layer26falsefalsefalsefalse354338337140
layer36falsefalsefalsefalse556353346133
layer46truetruetruetrue126129126136
test07layer17truetruetruetrue131136132140
layer27falsefalsefalsefalse127128135137
layer37falsefalsefalsefalse130131135134
layer47falsefalsefalsefalse129134140132
test08layer18truetruetruetrue128127131143
layer28falsefalsefalsefalse134130133142
layer38truetruetruetrue131126136143
layer48truetruetruetrue131126137140
test09single1truetruetruetrue133139137136
single2falsefalsefalsefalse355367395135
test10str1truetruetruetrue909093132
str1.c1truetruetruetrue133128126142
str1.c2falsefalsefalsefalse342348343136
test11str2.*truetruetruetrue112114116133
str2falsefalsefalsefalse284293309130
str2.c1truetruetruetrue123125130136
str2.c2falsetruefalsetrue347126352135
test12str3.*truetruetruetrue127124120139
str3falsefalsefalsefalse282298301128
c1.str3falsefalsefalsefalse335349344136
test13case1truetruetruetrue109106105146
test14attach1truetruetruetrue112108113135

Test results for "old" Permissions (bridges/compat layers etc.)

Using default sample size of 10000

TestNodebPGMBPPExbPGMBPPEx
test01layer11falsefalsefalsefalse4566602019314
layer21falsefalsefalsefalse4486531980306
layer31falsefalsefalsefalse4506501974302
layer41falsefalsefalsefalse4496592027297
test02layer12truetruetruetrue5484951866310
layer22truetruetruetrue5504991766311
layer32truetruetruetrue5524951763326
layer42truetruetruetrue5444901755336
test03layer13truetruetruetrue5574941793322
layer23truetruetruefalse5514911781420
layer33truetruetruefalse5434951880303
layer43truetruetruefalse5374971852311
test04layer14falsefalsefalsefalse4576672043298
layer24truetruetruetrue5605011790313
layer34truetruetruefalse5596111780300
layer44truetruetruefalse5594951768302
test05layer15falsefalsefalsefalse4516642164311
layer25falsefalsefalsefalse4506802057309
layer35truetruetruetrue5365171861314
layer45truetruetruefalse5434941833302
test06layer16falsefalsefalsefalse4496532069314
layer26falsefalsefalsefalse4526592025309
layer36falsefalsefalsefalse4596472096296
layer46truetruetruetrue5345031838307
test07layer17truetruetruetrue5765031851314
layer27falsefalsefalsefalse5564991827352
layer37falsefalsefalsefalse5645091790297
layer47falsefalsefalsefalse5475051761315
test08layer18truetruetruetrue5615181855318
layer28falsefalsefalsefalse5725141858313
layer38truetruetruetrue5555221771322
layer48truetruetruefalse5704981764313
test09single1truetruetruefalse5455041783307
single2falsefalsefalsefalse4486582035296
test10str1truetruetruetrue4734341687305
str1.c1truetruetruefalse5455263062299
str1.c2falsefalsefalsefalse5936663251299
test11str2.*truetruetruetrue5174712970320
str2falsefalsefalsefalse4225941922313
str2.c1truetruetruetrue5254993103334
str2.c2truetruefalsetrue6464893333353
test12str3.*truetruetruetrue5164732959315
str3falsefalsefalsefalse4266081888307
c1.str3falsefalsefalsefalse5916603251315
test13case1truetruetruefalse5185681803308
test14attach1truefalsetruefalse53816761841297

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.

bPermsGroupManPermBukkitPermEx
wildcard node (usually a *)yesyesnoyes
wildcard has precendence over SuperPermsnononoyes
"old" Permissions requests handled like SuperPerms requestsyesyes*yesno
negation of permissions possibleyesyesyesyes

(*)GroupManager ignores permission attachments in these cases, but respects default permission settings.