This year, Apple shocked the desktop processor market with the Apple M1 chip and devices based on it. A similar event took place in the cloud computing world last year. AWS has released a new type of server based on its own ARM Graviton2 processors. Amazon claims the new processors have a performance-to-price ratio 40% higher than their x86 counterparts. Another recent update is Amazon RDS (a cloud service providing database servers) servers on Graviton2. I ran a few benchmarks and a load test on a real backend application to see if the ARM servers are that good and see what compatibility issues might arise.
Performance
I was comparing server types t4g.small (ARM) and t3.small (x86) on AWS. At the time of this writing, the price per hour for an x86 server is $ 0.0208, and for an ARM server - $ 0.0168. An ARM server is 20% cheaper.
First, I did a load test using wrk, running a fresh recap.dev installation on the servers
This is a docker-compose template with 4 processes. A web server that accepts requests and stores them in RabbitMQ and a separate background process that stores requests in groups of 1000 in PostgreSQL.
I ran wrk on a t3.2xlarge server located in the same region using the following command:
wrk -t24 -c1000 -d300s -s ./post.lua <hostname>
It sends requests continuously for 5 minutes using 24 streams and 1000 HTTP connections.
Result for server t4g.small (ARM):
24 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 473.53ms 53.06ms 1.96s 81.33%
Req/Sec 115.83 96.65 494.00 71.32%
620751 requests in 5.00m, 85.84MB read
Socket errors: connect 0, read 0, write 0, timeout 225
Requests/sec: 2068.48
Transfer/sec: 292.90KB
For server t3.small (x86):
24 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 600.28ms 70.23ms 2.00s 72.53%
Req/Sec 92.77 82.25 404.00 70.26%
488218 requests in 5.00m, 67.51MB read
Socket errors: connect 0, read 0, write 0, timeout 348
Requests/sec: 1626.87
Transfer/sec: 230.37KB
The ARM server served 27% more requests per second on average 26% faster.
pts/compress-7zip-1.7.1 t4g.small (ARM) 6833 MIPS, t3.small (x86) - 5029 MIPS. ARM 35%.
ARM pts/c-ray 2 . 958 x86 458 ARM .
pts/ramspeed, .
|
t4g.small (ARM) |
t3.small (x86) |
Add/Integer |
50000 /c |
13008 /c |
Copy/Integer |
58650 /c |
11772 /c |
Scale/Integer |
31753 /c |
11989 /c |
Triad/Integer |
36869 /c |
12818 /c |
Average/Integer |
44280 /c |
12314 /c |
Add/Floating Point |
49775 /c |
12750 /c |
Copy/Floating Point |
58749 /c |
11694 /c |
Scale/Floating Point |
58721 /c |
11765 /c |
Triad/Floating Point |
49667 /c |
12809 /c |
Average/Floating Point |
54716 /c |
12260 /c |
, t4g.small Graviton2 3 5 .
, ARM . .
, .
ARM . , Docker .rpm .deb, (, Docker ). , docker-compose ARM , . , , ARM . , , , ARM , .
Amazon RDS Graviton2 ARM .
ARM Docker recap.dev arm/v7 arm64.