Apple a choqué le marché des processeurs de bureau cette année avec la puce Apple M1 et les appareils basés sur celle-ci. Un événement similaire a eu lieu dans le monde du cloud computing l'année dernière. AWS a publié un nouveau type de serveur basé sur ses propres processeurs ARM Graviton2. Selon Amazon, les nouveaux processeurs ont un rapport performances / prix 40% plus élevé que leurs homologues x86. Une autre mise à jour récente concerne les serveurs Amazon RDS (un service cloud fournissant des serveurs de base de données) sur Graviton2. J'ai exécuté quelques tests de performance et un test de charge sur une vraie application backend pour voir si les serveurs ARM sont aussi bons et pour voir quels problèmes de compatibilité pourraient survenir.
Performance
Je comparais les types de serveurs t4g.small (ARM) et t3.small (x86) sur AWS. Au moment d'écrire ces lignes, le prix de l'heure pour un serveur x86 est de 0,0208 USD et pour un serveur ARM de 0,0168 USD. Un serveur ARM est 20% moins cher.
Tout d'abord, j'ai fait un test de charge en utilisant wrk, en exécutant une nouvelle installation de recap.dev sur les serveurs
Il s'agit d'un modèle docker-compose avec 4 processus. Un serveur Web qui accepte les demandes et les stocke dans RabbitMQ et un processus d'arrière-plan distinct qui stocke les demandes par groupes de 1000 dans PostgreSQL.
J'ai exécuté wrk sur un serveur t3.2xlarge situé dans la même région à l'aide de la commande suivante:
wrk -t24 -c1000 -d300s -s ./post.lua <hostname>
Il envoie des requêtes en continu pendant 5 minutes en utilisant 24 flux et 1000 connexions HTTP.
Résultat pour le serveur 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
Pour le serveur 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
Le serveur ARM a servi 27% de requêtes en plus par seconde en moyenne 26% plus rapidement.
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.