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의 성능 변화를 볼 수 있습니다.
다음에서도 직접 찾아볼 수 있습니다: https://v1.casbin.org/casbin/benchmark-monitoring