I have been trying out some basic performance tests on a single instance of spicedb running on an AMD 2.7G 24core processor. I have 3 subjects and 5 objects. My go client is running on the same machine and checks permissions between each subject and object (ie 15 checks) 10000 times.That is a total of 150k checks. I measure the total time at the client to send and receive responses for all 150k requests. Each check request is fired in a separate go routine.
I see a couple of issues.
- The total time taken to run 150k checks increases from around 9 secs in the first run of the client and stabilizes at around 22 secs at around the 7th/8th run. I do not restart spicedb between runs
- I can never get spicedb threads to close to 100% CPU utilization. The threads hover in the low 15-30% CPU utilization range. I see this behavior with both memdb and crdb as the DS. The overall CPU utilization for the 24core machine is in the 10-15% range
To make sure it’s not a client side bottleneck I ran two instances of the client at the same time. The time taken to finish 150k checks simply doubles! There is enough free CPU available.
Any ideas on what might be happening? I can supply the schema, relations and the client code if needed.