Promising gain from the rewrite of Keystone in Rust
Artem Goncharov
2025-05-14
Warning
Keystone token is bound to a requested scope
Technically just peanuts compared to the lib itself
import pytest
from keystone.token.providers.fernet.core import Provider
from keystone.token.provider import Manager
import keystone.conf
from keystone.conf import configure
CONF = keystone.conf.CONF
@pytest.fixture(scope="session", autouse=True)
def execute_before_any_test():
configure(CONF)
@pytest.mark.benchmark(group="group-name", timer=time.time, disable_gc=True, warmup=False)
def test_fast(benchmark):
manager = Manager()
fernet = Provider()
result = benchmark(lambda: fernet.validate_token(token))
assert result
token = "gAAAAABnuDa_xLN1n9DrJyv-uDfOD...."Python
Linux
=====
-------------------------------------------- benchmark 'group-name': 1 tests ---------------------------------
Name (time in us) Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds
--------------------------------------------------------------------------------------------------------------
test_fast 206.4705 315.6662 218.3426 11.8152 215.5304 11.6825 52;21 4.5800 498
--------------------------------------------------------------------------------------------------------------
Mac
===
------------------------------------------ benchmark 'group-name': 1 tests ------------------------------
Name (time in us) Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds
---------------------------------------------------------------------------------------------------------
test_fast 71.7640 124.9313 77.4613 3.8331 77.9629 4.7684 165;14 12.9097 685
---------------------------------------------------------------------------------------------------------
Rust
Linux
=====
fernet token/project time: [8.8575 µs 9.1288 µs 9.4079 µs]
Mac
===
fernet token/project time: [3.1311 µs 3.1386 µs 3.1465 µs]
Note: Mac numbers can not be compared with Linux
❯ hyperfine 'openstack --os-cloud dev-keystone user list'
Benchmark 1: openstack --os-cloud dev-keystone user list
Time (mean ± σ): 622.5 ms ± 64.5 ms [User: 269.4 ms, System: 41.5 ms]
Range (min … max): 591.5 ms … 800.8 ms 10 runs
❯ hyperfine 'osc --os-cloud dev-keystone identity user list'
Benchmark 1: osc --os-cloud dev-keystone identity user list
Time (mean ± σ): 107.6 ms ± 84.8 ms [User: 6.0 ms, System: 3.3 ms]
Range (min … max): 78.8 ms … 348.8 ms 10 runs
❯ hyperfine 'osc --os-cloud dev-keystone-rust identity user list'
Benchmark 1: osc --os-cloud dev-keystone-rust identity user list
Time (mean ± σ): 15.0 ms ± 1.5 ms [User: 5.6 ms, System: 2.8 ms]
Range (min … max): 12.6 ms … 27.1 ms 123 runs
=> 40x+ time improvement
Links: