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.
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 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 |
t2a.standard-2 (2vCPU, 8GB RAM) | € 54,46 | |
Hetzner | CAX11 (2vCPU, 4GB RAM) | € 3,79 |
AWS | a1.xlarge (4vCPU, 8GB RAM) | € 78,38 |
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.
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!