Benchmark tussen x86 en ARM cloud servers

ARM, vooral gekend van het gebruik in mobiele apparaten en de M2-CPU van Apple, maakt een stevige opmars naar servers. Zo ontwierp Fujitsu in 2020 de (toenmalig) 's werelds krachtigste supercomputer "Fugaku" wat draait op ARM CPU's.

ARM vs x86

CPU's verschillen door hun instructieset architectuur (Instruction Set Architecture, ISA). CPU's van Intel en AMD zijn gebaseerd op de x86 ISA, terwijl chips gebaseerd op het ontwerp van Arm, gebaseerd zijn op de ARM ISA. ISA's zijn onderling niet compatibel. Software die geschreven is voor de x86 ISA, zal niet werken op de ARM ISA en omgekeerd.

De x86 ISA werd eind jaren 1970 door Intel ontworpen. Na een juridisch debacle zijn Intel en AMD overeengekomen dat AMD ook het recht heeft om zelfs chips op de x86 ISA te ontwikkelen. AMD ontwikkelde daarop de eerste 64-bit variant van x86; ook toen kwamen beide fabrikanten overeen dat Intel 64-bit varianten van de x86 chipset mag produceren. Enkel het kleine Taiwanese VIA is de derde firma wereldwijd met de x86-licentie die chips mag ontwikkelen. Daardoor zien we vooral alleen Intel en AMD CPU's in de rekken.

Ampere Altra CPU

ARM (Advanced RISC Machines) werd in de jaren 1980 ontwikkeld door Acorn; ondertussen door Arm. Arm ontwikkelt ARM CPU-ontwerpen en verkoopt die ontwerpen onder licentie aan derden. Arm zelf produceert dus zelf geen ARM CPU's. Zo hebben bv. Samsung, MediaTek, Apple en Qualcomm een ARM ISA licentie en bouwen zij hun eigen ARM CPU's.

Hardwarefabrikanten van servers moeten een keuze maken tussen de x86 en de ARM ISA. Tot nu viel de keuze meestal op x86, want daarvoor is de meeste software geschreven. Er kan gewerkt worden met emulators om x86 software te laten draaien op ARM chips, maar het is beter om dat te vermijden omdat dat ten koste gaat van performantie.

Het technisch verschil

De x86 ISA is gebaseerd op het CISC principe (Complex Instruction Set Computing). ARM processors zijn gebaseerd op het RISC principe (Reduced Instruction Set Computing). Daar zit het wezenlijk technisch verschil. x86 is in staat om complexe instructies per klokcyclus uit te voeren; waartegen ARM slechts een (1) instructie per klokcyclus kan uitvoeren.

Wat is een klokcyclus?

De kloksnelheid is de indicator voor de snelheid van een CPU en verwijst naar de frequentie waarmee de processor de kloksignalen genereert die bewerkingen binnen de processor synchroniseren. De meeteenheid is 'klokcycli per seconde', of hertz (Hz). Hedendaagse CPU's voeren per seconde miljarden klokcycli uit.

Voor die complexe taken beroept de x86 ISA zich op hardwarematige transistors en schakelingen. ARM heeft die extra hardware niet nodig. ARM heeft wel meer RAM-geheugen nodig dan x86; maar de lage kost van RAM-geheugen vandaag de dag doet dat rechtvaardigen - in tegenstelling tot pakweg een decennium geleden. ARM met RISC heeft dus het voordeel om gebruik te kunnen maken van zuinigere en eenvoudigere hardware.

Een verdere gedetailleerde uitleg van het verschil tussen de ARM en x86 zou ons te veel afleiden van deze benchmark. Maar heb je daar interesse in, bekijk dan zeker onderstaande video van Gary Explains (Engels, 20min.). Ook het artikel 'ARM vs x86: What's the difference' van Red Hat geeft een beknopte samenvatting.

ARM vs x86 - Key differences explained

ARM en cloud servers

Cloud servers die we vinden bij partijen zoals Digital Ocean, Vultr, Linode (Akamai) en UpCloud bieden virtuele servers aan op x86 architectuur CPU's. Hetzner biedt naast x86 ook ARM cloud servers aan. Omwille van onder andere het lager stroomverbruik (bijgevolg minder warmte en dus minder koeling nodig), kunnen zij deze servers ook aanbieden tegen een lagere prijs dan de x86 tegenhangers.

In 2018 lanceerde hyperscaler AWS hun eerste ARM cloud servers 'AWS Graviton' met hun zelfontwikkelde ARM CPU. Ook Google Cloud biedt sinds 2022 met hun product 'Tau T2A' ARM cloud servers aan. Hetzner kwam in 2023 als eerste provider in het middensegment op de proppen met ARM servers op basis van Ampere Altra.

Prijssetting

We hebben een aantal ARM cloud servers van AWS, Google en Hetzner erbij genomen voor een prijsvergelijking. Een exacte vergelijking maken is niet mogelijk omdat de combinatie vCPU en RAM niet precies overeen komen; maar het geeft een idee. Qua kostprijs hebben we USD's omgezet naar Euro's. Prijzen zijn van augustus 2023 en zijn exclusief btw.

Provider Type Prijs/maand
AWS a1.large (2vCPU, 4GB RAM) € 38,6
Google t2a.standard-2 (2vCPU, 8GB RAM) € 54,46
Hetzner CAX11 (2vCPU, 4GB RAM) € 3,79
AWS a1.xlarge (4vCPU, 8GB RAM) € 78,38
Google t2a.standard-4 (4vCPU, 16GB RAM) € 108,93
Hetzner CAX21 (4vCPU, 8GB RAM) € 6,49

Wat we vergelijken

Gezien het grote prijsverschil tussen AWS, Google Cloud en Hetzner, vergelijken we in deze benchmark enkel cloud servers van Hetzner. We vergelijken Hetzner's x86 aanbod met hun ARM cloud servers. We vergelijken drie x86 virtuele machines (VM's) met drie gelijkaardige ARM VM's. Prijzen zijn van augustus 2023 en zijn exclusief btw. Alle VM's hadden een 'gedeelde CPU' en lokale opslagruimte.

We waren benieuwd of we een verschil in performantie konden meten tussen de x86 en de ARM cloud servers.

Type Specificaties Prijs/maand
CX21 Intel, 2 vCPU 4GB RAM € 5,35
CPX31 AMD, 4 vCPU 8GB RAM € 13,60
CPX41 AMD, 8vCPU 16GB RAM € 25,20
CAX11 Arm64, 2 vCPU 4GB RAM € 3,79
CAX21 Arm64, 4 vCPU 8GB RAM € 6,49
CAX31 Arm64, 8vCPU 16GB RAM € 12,49

Hoe we de virtuele machines vergeleken hebben

We voerden de benchmarks uit op een Ubuntu 22.04 LTS installatie. We installeerde alle updates, maar voerde geen aanpassingen uit. Voor de benchmarks gebruikten we Phoronix Test Suite v10.8.4. Wanneer er tussen de testen een standaardafwijking (deviation) groter dan 2,5% geconstateerd werd, dan werd er een bijkomende test gedaan totdat de standaarddeviatie onder de 2,5% daalde, met een maximaal van 40 tests. Als resultaat werd telkens de gemiddelde waarde genoteerd.

We voerde onderstaande benchmarks uit, met een focus op het systeem, een single en multi core CPU, het ram-geheugen en de opslagruimte. Omdat we in deze benchmark ons focussen op de CPU, voerden we drie verschillende multi core CPU tests uit.

  • pts/apache (focus op het systeem). Dit is een test van de Apache HTTPD-webserver. Dit benchmark-testprofiel voor de Apache HTTPD-webserver maakt gebruik van het Golang "Bombardier"-programma voor het faciliteren van HTTP-verzoeken gedurende een vaste periode met een configureerbaar aantal gelijktijdige clients.
  • pts/hint (focus op single core CPU). Deze test voert de Energy's Ames Laboratory Hierarchical INTegration (HINT)van het Amerikaanse ministerie van Energie uit.
  • pts/stockfish (focus op multi core CPU). Dit is een test van Stockfish, een geavanceerde open-source C++11-schaakbenchmark die tot 512 CPU-threads kan opschalen.
  • pts/openssl (focus op multi core CPU). OpenSSL is een open-source toolkit die SSL en TLS protocollen implementeert.
  • pts/compress-7zip (focus op multi core CPU). Dit is een test van 7-Zip compressie/decompressie met zijn geïntegreerde benchmarkfunctie.
  • pts/stream (focus op het geheugen). Dit is een benchmark van Stream, de populaire benchmark voor systeemgeheugen (RAM).
  • pts/postmark (focus op de opslagruimte). Dit is een test van de PostMark-benchmark van NetApp, die is ontworpen om het testen van kleine bestanden te simuleren, vergelijkbaar met de taken die worden uitgevoerd door web- en mailservers. Dit testprofiel stelt PostMark in staat om 25.000 transacties met 500 bestanden tegelijkertijd uit te voeren met een bestandsgrootte tussen 5 en 512 kilobytes.

Resultaten

Voor de duidelijkheid hebben we steeds de x86 en de ARM VM met dezelfde specificaties (Cores en Memory) in een opeenvolgende kolom geplaatst. We hielden dus telkens deze volgorde van kolommen aan:

  • CX21 (x86 2C2M) (2 Cores en 2 GB Memory)
  • CAX11 (ARM 2C2M)
  • CPX31 (x86 4C8M)
  • CAX21 (ARM 4C8M)
  • CPX41 (x86 8C16M)
  • CAX31 (ARM 8C16M)

Benchmark: pts/apache

Focus op het systeem. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Concurrent Requests: 20 (Reqs/sec) 8929.03 8396.6 21583.93 11851.32 28775.56 13866.27
Concurrent Requests: 100 (Reqs/sec) 8721.59 8500.81 23902.41 13827.31 40303.72 25811.99
Concurrent Requests: 200 (Reqs/sec) 8409.15 8360.37 24437.22 14412.63 44176.32 27884.56
Concurrent Requests: 500 (Reqs/sec) 8099.12 8659.95 23457.27 14417.18 40599 25157.7
Concurrent Requests: 1000 (Reqs/sec) 8109.32 8509.21 23123.16 14061.9 39624.6 25842.47

Hier zien we dat de x86 VM's vanaf 4 cores duidelijk beter scoren dan de ARM VM's.

Benchmark: pts/hint

Focus op single core CPU. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
FLOAT (QUIPs) 245077735.5 324279108 255728756.6 323302616.1 256482173.5 323597349

Voor een single core CPU test scoren de ARM CPU's merkelijk beter.

Benchmark: pts/stockfish

Focus op multi core CPU. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Total Time (Nodes/s) 2212880 2458096 6258003 5206669 13194825 9757003

Zoveel te meer cores, zoveel te beter scoren de x86 machines in deze multi core CPU test.

Benchmark: pts/openssl

Focus op multi core CPU. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Algorithm: SHA256 (byte/s) 417284440 1560538643 2827727480 3150497120 5768424633 6344199607
Algorithm: SHA512 (byte/s) 436448190 536639563 1262125013 1075240673 2628704613 2152238263
Algorithm: RSA4096 (sign/s) 339 98.8 899 197.6 1819.1 393.4
Algorithm: RSA4096 (verify/s) 22348.4 8065.4 58486.2 16153.3 118880.3 32243.2
Algorithm: ChaCha20 (byte/s) 6560171807 2520305663 10879505840 5043876203 22068229733 10070370990
Algorithm: AES-128-GCM (byte/s) 7450392257 5945657843 15182816323 11888070930 31208029663 23774275450
Algorithm: AES-256-GCM (byte/s) 5528949737 4826336007 13902395437 9682090120 28343330043 19344769023
Algorithm: ChaCha20-Poly1305 (byte/s) 3290716726 1749239397 7049334327 3499712147 14375567270 6982201343


Uitgezonderd voor de SHA256 en SHA512 test, scoren de x86 machines beter in deze multi core CPU test.

Benchmark: pts/compression-7zip

Focus op multi core CPU. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Compression Rating (MIPS) 7681 10286 19046 20368 36971 39161
Decompression Rating (MIPS) 5392 8634 13913 17024 28768 34205

Voor het comprimeren zijn alle CPU's sterk aan elkaar gewaagd. Voor het decomprimeren winnen de ARM CPU's met een kleine voorsprong.

Benchmark: pts/stream

Focus op het ramgeheugen. Een hogere score is beter.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Copy (MB/s) 20394.3 43034 85046.9 74044.8 123673.2 110804.1
Scale (MB/s) 21657 41494.6 50265.9 71391.2 77822 106582.1
Triad (MB/s) 24999.3 40091.9 54782.8 71122.4 83999.5 114068.5
Add (MB/s) 24930.9 39883.2 54297.9 70704.4 83635.8 113249.5

De ARM machines winnen in de geheugentest (met uitzondering van de Copy-test) met ruime voorsprong.

Benchmark: pts/postmark

Focus op de opslagruimte. Een hogere score is beter. Iedere VM gebruikte ext4 als bestandssysteem.

Test CX21 (Intel 2C2M) CAX11 (ARM 2C2M) CPX31 (AMD 4C8M) CAX21 (ARM 4C8M) CPX41 (AMD 8C16M) CAX31 (ARM 8C16M)
Disk Transaction Performance (TPS) 2459 3846 4629 3989 4716 3969

Voor de VM's met 4 en 8 CPU cores halen de x86 servers het van de ARM machines met een kleine voorsprong.

Conclusie

Van iedere testscore hebben we een procentuele vergelijking gemaakt. Van al die scores hebben we een totale procentuele verdeling gemaakt om zo te komen tot een eindvergelijking. Die zie je in onderstaande grafiek.

We zien dat de 2C2M VM's ongeveer gelijk scoren. Als we kijken naar de 4C8M en de 8C16M VM's, dan is de x86 de winnaar; maar daartegenover staat het dubbel van de kostprijs.

Als Apache je workload is, dan lijkt het nog steeds beter om te kiezen voor x86 CPU's. Maar vereist je applicatie daarentegen veel geheugen, dan neem je genoegen met ARM machines. Is je applicatie CPU-intensief, dan doe je best een test om te kijken of je verder bouwt op x86 of op ARM cloud servers.

💡
Uiteraard kan je je applicatie ook altijd horizontaal schalen, waardoor je de load over meerdere ARM servers spreidt en dat tegen de helft van de prijs van x86 servers.

Zelf proberen?

Wil je zelf een ARM server ervaren? Via deze (affiliate) link van Hetzner krijg je alvast 20 euro startbudget. Veel succes en plezier gewenst!