Benchmarks
- Go
- Python
- C++
- Lua (JIT)
ポリシー強制のオーバーヘッドはmodel_b_test.goでベンチマークされています。 テストベッドの設定は以下の通りです:
Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 2601 Mhz, 4 Core(s), 8 Logical Processor(s)
以下は、go test -bench=.
を実行して得られたベンチマーク結果です。 -benchmem(op = Enforce()
呼び出し、ms = ミリ秒、KB = キロバイト):
テストケース | ルールサイズ | 時間オーバーヘッド(ms/op) | メモリオーバーヘッド(KB) |
---|---|---|---|
ACL | 2ルール(2ユーザー) | 0.015493 | 5.649 |
RBAC | 5ルール(2ユーザー、1ロール) | 0.021738 | 7.522 |
RBAC(小) | 1100ルール(1000ユーザー、100ロール) | 0.164309 | 80.620 |
RBAC(中) | 11000ルール(10000ユーザー、1000ロール) | 2.258262 | 765.152 |
RBAC(大) | 110000ルール(100000ユーザー、10000ロール) | 23.916776 | 7,606 |
リソースロール付きRBAC | 6つのルール(2ユーザー、2ロール) | 0.021146 | 7.906 |
ドメイン/テナントを持つRBAC | 6つのルール(2ユーザー、1ロール、2ドメイン) | 0.032696 | 10.755 |
ABAC | 0のルール(0ユーザー) | 0.007510 | 2.328 |
RESTful | 5つのルール(3ユーザー) | 0.045398 | 91.774 |
Deny-override | 6つのルール(2ユーザー、1ロール) | 0.023281 | 8.370 |
優先度 | 9つのルール(2ユーザー、2ロール) | 0.016389 | 5.313 |
Pycasbinのポリシー強制のオーバーヘッドは、tests/benchmarks
ディレクトリでベンチマークされました。 テストベッドの設定は以下の通りです:
Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz (Runned by Github actions)
platform linux -- Python 3.11.4, pytest-7.0.1, pluggy-1.2.0
casbin_benchmark
を実行して得られたベンチマーク結果は以下の通りです(op = enforce()
呼び出し、ms = ミリ秒):
テストケース | ルールサイズ | 時間オーバーヘッド(ms/op) |
---|---|---|
ACL | 2つのルール(2人のユーザー) | 0.067691 |
RBAC | 5つのルール(2人のユーザー、1つの役割) | 0.080045 |
RBAC(小) | 1100のルール(1000人のユーザー、100の役割) | 0.853590 |
RBAC(中) | 11000のルール(10000人のユーザー、1000の役割) | 6.986668 |
RBAC(大) | 110000のルール(100000人のユーザー、10000の役割) | 77.922851 |
リソースロール付きRBAC | 6つのルール(2人のユーザー、2つの役割) | 0.106090 |
ドメイン/テナント付きRBAC | 6つのルール(2人のユーザー、1つの役割、2つのドメイン) | 0.103628 |
ABAC | 0のルール(0人のユーザー) | 0.053213 |
RESTful | 5つのルール(3人のユーザー) | NA |
Deny-override | 6つのルール(2人のユーザー、1つの役割) | NA |
優先度 | 9つのルール(2人のユーザー、2つの役割) | 0.084684 |
Casbin CPPのポリシー強制のオーバーヘッドは、Googleのベンチマークツールを使用してtests/benchmarks
ディレクトリでベンチマーク測定されました。 テストベッドの設定は以下の通りです:
Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz, 4 cores, 4 threads
Release
設定でビルドされたcasbin_benchmark
ターゲットを実行して得られたベンチマーク結果は以下の通りです(op = enforce()
呼び出し、ms = ミリ秒):
テストケース | ルールのサイズ | 時間オーバーヘッド(ms/op) |
---|---|---|
ACL | 2つのルール(2人のユーザー) | 0.0195 |
RBAC | 5つのルール(2人のユーザー、1つの役割) | 0.0288 |
RBAC(小) | 1100のルール(1000人のユーザー、100の役割) | 0.300 |
RBAC(中) | 11000のルール(10000人のユーザー、1000の役割) | 2.113 |
RBAC(大) | 110000のルール(100000人のユーザー、10000の役割) | 21.450 |
リソースロール付きRBAC | 6つのルール(2人のユーザー、2つの役割) | 0.03 |
ドメイン/テナント付きRBAC | 6つのルール(2人のユーザー、1つの役割、2つのドメイン) | 0.041 |
ABAC | 0のルール(0ユーザー) | NA |
RESTful | 5のルール(3ユーザー) | NA |
Deny-override | 6のルール(2ユーザー、1ロール) | 0.0246 |
優先度 | 9のルール(2ユーザー、2ロール) | 0.035 |
Lua Casbinのポリシー強制のオーバーヘッドは、bench.luaでベンチマークされました。 テストベッドの設定は以下の通りです:
AMD Ryzen(TM) 5 4600H CPU @ 3.0GHz, 6 Cores, 12 Threads
ここには、luajit bench.lua
を実行して得られたベンチマーク結果があります(op = enforce()
呼び出し、ms = ミリ秒):
テストケース | ルールサイズ | 時間オーバーヘッド(ms/op) |
---|---|---|
ACL | 2のルール(2ユーザー) | 0.0533 |
RBAC | 5のルール(2ユーザー、1ロール) | 0.0972 |
RBAC(小) | 1100のルール(1000ユーザー、100ロール) | 0.8598 |
RBAC(中) | 11000のルール(10000ユーザー、1000ロール) | 8.6848 |
RBAC(大) | 110000のルール(100000のユーザー、10000のロール) | 90.3217 |
リソースロールを持つRBAC | 6つのルール(2人のユーザー、2つのロール) | 0.1124 |
ドメイン/テナントを持つRBAC | 6つのルール(2人のユーザー、1つのロール、2つのドメイン) | 0.1978 |
ABAC | 0のルール(0のユーザー) | 0.0305 |
RESTful | 5つのルール(3人のユーザー) | 0.1085 |
Deny-override | 6つのルール(2人のユーザー、1つのロール) | 0.1934 |
優先度 | 9つのルール(2人のユーザー、2つのロール) | 0.1437 |
ベンチマーク監視
以下の埋め込みウェブページで、各コミットごとのCasbinのパフォーマンス変化を確認できます。
また、直接以下のURLで閲覧することもできます:https://v1.casbin.org/casbin/benchmark-monitoring