基准测试
本页面报告不同 model 和规则规模下的执行开销(enforcement overhead)(每次 Enforce() 调用的时间和内存)。结果取决于硬件和语言,请将其作为粗略参考。
- Lua (JIT)
Go 基准测试: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 |
| 带 domain/租户的 RBAC | 6 条规则(2 个用户、1 个角色、2 个 domain) | 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 |
| Priority | 9 条规则(2 个用户、2 个角色) | 0.016389 | 5.313 |
Pycasbin 的策略执行开销在 tests/benchmarks 中进行基准测试。测试环境:
Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz (Run 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 |
| 带 domain/租户的 RBAC | 6 条规则(2 个用户、1 个角色、2 个 domain) | 0.103628 |
| ABAC | 0 条规则(0 个用户) | 0.053213 |
| RESTful | 5 条规则(3 个用户) | NA |
| Deny-override | 6 条规则(2 个用户、1 个角色) | NA |
| Priority | 9 条规则(2 个用户、2 个角色) | 0.084684 |
Casbin CPP 的策略执行开销在 tests/benchmarks 中使用 Google 的基准测试工具 进行测试。测试环境:
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 |
| 带 domain/租户的 RBAC | 6 条规则(2 个用户、1 个角色、2 个 domain) | 0.041 |
| ABAC | 0 条规则(0 个用户) | NA |
| RESTful | 5 条规则(3 个用户) | NA |
| Deny-override | 6 条规则(2 个用户、1 个角色) | 0.0246 |
| Priority | 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 |
| 带 domain/租户的 RBAC | 6 条规则(2 个用户、1 个角色、2 个 domain) | 0.1978 |
| ABAC | 0 条规则(0 个用户) | 0.0305 |
| RESTful | 5 条规则(3 个用户) | 0.1085 |
| Deny-override | 6 条规则(2 个用户、1 个角色) | 0.1934 |
| Priority | 9 条规则(2 个用户、2 个角色) | 0.1437 |
基准测试监控
下面的内嵌页面展示 Casbin 在各个提交上的性能表现。