This book contains performance benchmarks using the Sh Cache Microservice
Topics
Descriptions of each of the benchmark scenarios, and notes on the benchmark methodology used |
|
Details of the hardware, software, and configuration used for the benchmarks |
|
Summaries of the benchmarks and links to detailed metrics. |
Other documentation for the Sh Cache Microservice can be found on the Sh Cache Microservice product page.
Benchmark Scenarios and Methodology
This page describes the methodology used when running the benchmarks.
Rationale
The benchmark was performed using a real Sh Cache Microservice, and simulated network functions. The simulated network functions were run on separate hosts from the Sh Cache Microservice. The network functions (HSS, VoLTE, IP-SM-GW) were simulated to abstract away performance considerations for these functions. A real replicated Cassandra database was used, as simulating this effectively is impractical.
The benchmark was run at the maximum sustainable load level for the SH Cache Microservice node. In this configuration there is no tolerance for node failure, any additional incoming messages will be dropped. To allow for node failure, additional nodes need to be added to provide an acceptable margin (an N+K configuration).
Test setup
20 minutes of ramp up allows for the cache to reach a steady state. At this point data is expiring from the cache as fast as it is being replaced, due to a custom cache retention period. Additionally, this allows the majority of JIT compilation to occur before full load is reached. The JIT compiler compiles Java bytecode to machinecode, and recompiles code on the fly to take advantage of optimizations not otherwise possible. This dynamic compilation and optimization process takes some time to complete. During the early stages of JIT compilation/optimization, the node cannot process full load. At this point, the node is ready to enter full service.
The tests are run for two hours after reaching full load. Load is not stopped between ramp up and starting the test timer.
Scenarios
For the benchmark we used 5 scenarios representing common requests made to the SH Cache Microservice. The SH Cache Microservice implements a REST API for interaction with VoLTE and IP-SM-GW. All scenarios are written assuming no errors occur, and every request recieves a 200 response. Each of the 5 scenarios were assigned a data pool of 200,000 unique subscribers to ensure that there is a meaningful amount of data to cache.
GET MMTel-Services
The client-ShCM scenario makes two GET requests for the MMTEL-Services transparent data XML document. Two requests are made to guarantee that there will be a cache hit on the second request. The first request may or may not be a cache hit.
In the case of a cache miss, the SH Cache Microservice will send a User Data Request to the HSS to populate the cache.
GET MSISDN
The client-ShCM scenario makes two GET requests for the MSISDN. Two requests are made to guarantee that there will be a cache hit on the second request. The first request may or may not be a cache hit.
In the case of a cache miss, the SH Cache Microservice will send a User Data Request to the HSS to populate the cache.
PUT MMTel-Services
The client-ShCM scenario makes a PUT request, with a new MMTEL-Services transparent data XML document, and a GET request for the same information.
The SH Cache Microservice will send a Profile Update Request to the HSS for every PUT request.
Hardware and Software
This page describes the hardware and software used when running the benchmarks.
Hardware
All machines used for benchmarking are provided by Amazon’s EC2 public cloud. We use exclusively c5.xlarge
instances as described here. The c5.xlarge
instance type has 4 vCPU (hardware threads) and 8 GiB of ram, with up to 10 Gbps networking. Of particular note here, there are two generations of Intel hardware which may be used for any instance, entirely at Amazon’s discretion.
Software
Software | Version |
---|---|
4.0.0.1 |
|
3.0.0.5 |
|
3.11.2 |
|
Oracle Corporation OpenJDK 64-Bit Server VM 11.0.4+11-LTS |
Sh Cache Microservice configuration
The Sh Cache Microservice configuration is modified from the out-of-the-box install. Cache lifetimes have been reduced to 20 minutes from 24 hours to allow data to move in and out of the cache during the test. Addresses of the various simulated network elements have been configured as well. Some customization of Rhino and JVM configuration is required to be suitable for the Sh Cache Microservice application. These are detailed below.
Parameter | Value |
---|---|
-Xmx |
6144M |
-Xms |
6144M |
-XX:MaxNewSize |
1536M |
-XX:NewSize |
1536M |
Parameter | Value |
---|---|
Staging Threads |
150 |
Staging queue size |
5000 |
MemDB committed size |
400MB |
io.netty.leakDetectionLevel |
advanced |
Benchmark Results
Call rate
The benchmark was run at the maximum sustainable load level for the Sh Cache Microservice. In this configuration there is no tolerance for node failure, any additional incoming messages will be dropped. To allow for node failure, additional nodes need to be added to provide an acceptable margin (an N+K configuration).
The benchmark is run at 700 sessions per second split unevenly across all scenarios. Scenarios are weighted unequally to mimic the GET heavy workload expected of the Sh Cache Microservice. We expect a GET heavy workload, as the TAS does multiple SH GET queries for many call flows. HSS writes (and resulting PUTs/POSTs) are comparatively rare.
Scenario |
Percentage |
35% |
|
35% |
|
10% |
|
10% |
|
10% |
Scenario latencies
Scenario | 50th percentile | 75th percentile | 90th percentile | 95th percentile | 99th percentile |
---|---|---|---|---|---|
get-mmtel-services |
7.3ms |
17.1ms |
66.3ms |
155.4ms |
325.8ms |
get-msisdn |
6.1ms |
17.2ms |
66.5ms |
156.5ms |
326.1ms |
put-mmtel-services |
7.5ms |
22.8ms |
73.3ms |
164.1ms |
336.6ms |
put-stn-sr |
6.5ms |
20.8ms |
70.6ms |
162.2ms |
333.2ms |
ue-reachability-subscribe |
3.0ms |
11.9ms |
59.4ms |
146.3ms |
320.9ms |