sc-membench - új RAM-mérőke

Címkék

A Spare Cores oldallal arra vállalkoztunk, hogy összegyűjtjük a nagyobb felhőszolgáltatók "compute" kínálatát, begyűjtünk és rendszerezünk róluk minden adatot, benchmarkokat futtatunk a gépeken, majd mindezt strukturált formában elérhetővé és összehasonlíthatóvá tesszük.

Az egyik mért adat a memóriasávszélesség, amelyre eredetileg az lmbench bw_mem programját használtuk, de a nagyobb, mélyebb memóriahierarchiával rendelkező gépek miatt úgy gondoltuk, hogy megpróbálkozunk egy saját implementációval, amely talán jobban támogatja ezeket a gépeket, illetve a mérési környezetünket.

Ennek eredménye lett az sc-membench, amely az alábbiakat tudja:

  • Több platform támogatás – x86 és ARM64-on tesztelve (teljes támogatás Linuxon elérhető, de némi effort került abba is, hogy más OS-en is leforduljon :D)
  • Több memória-művelet – külön-külön méri az olvasási, írási és másolási sávszélességet, valamint a memória-késleltetést
  • OpenMP párhuzamosítás – multithread működés
  • NUMA-támogatás – felismeri a NUMA-topológiát, és a memória/CPU kiosztást ahhoz igazítja
  • Huge Pages támogatás a késleltetés mérésénél nagyobb puffereknél jelentős lehet a TLB miss miatti veszteség, így -támogatott környezetben- ezeknél nagyobb lapokat használ a program
  • Cache-érzékeny tesztméretek – a mérési méretek dinamikusan igazodnak a gépben lévő L1/L2/L3 cache-méretekhez, így jobban láthatóvá válnak a cache-határok
  • Késleltetés-mérés – pointer-chasing technikával méri a késleltetést, amellyel megpróbáljuk kiküszöbölni a prefetch hatásait (valódi random access)
  • Statisztikai adatok – medián és szórás a késleltetésmérésekhez
  • CSV kimenet – könnyen feldolgozható, géppel olvasható formátum

Kipróbálni a README-ben leírtak szerint lehet, a legegyszerűbb módon konténerben, pld:

docker run --rm --privileged ghcr.io/sparecores/membench:main -H

A weblapon a mérési eredmények grafikus formában is megtekinthetők (jelenleg még a bw_mem mérései alapján, a gépek újbóli mérése még folyamatban van), illetve a keresőben az egyes benchmarkok pontszámaira lehet rendezni a találati listát.

Hozzászólások

Tök jó és hasznos.

De az összehasonlitás szinezése nekem fura. 

Miért zöld (azaz jobb, ha jól értem) a megegyező paraméter? pl. CPU magszám vagy cache.

Hát szerintem ilyen esetben nem kéne szinezni/kiemelni, hiszen nincs mit nézni rajta: egyformák.

Ha majd tényleg bejön egy harmadik, ami jobb, mint az előző kettő, azt kellene szinezni. Az egyforma értékek pont nem érdekesek egy összehasonlitásban, csak a különbségek. (én még azt is nagyon szeretem, ha van egy checkbox, hogy tűnjön is el minden sor ami egyezik, mert minek)

Eddig úgy voltam vele, hogy a lat_mem_rd és a bw_mem olyan mint a derékszög: nincs mit továbbfejleszteni rajta. (Kőhalmi után szabadon) :)

Viccet félretéve, a stride paraméter mindig is "gyanús" része volt ezeknek a méréseknek, azt minden processzorhoz úgy kellett "belőni", hogy a prefetch méreténél éppen nagyobb legyen (enélkül irreálisan alacsony latency-t mért). De annyira meg ne legyen magas, hogy TLB-ből kifusson (akkor meg irreálisan magasat fog mérni). Ezzel kell itt is játszani, vagy a random stride elkerüli ezt az egész problémát?

Régóta vágyok én, az androidok mezonkincsére már!

egyreszt ez tok jo. masreszt a nyers adatok igy ilyen formaban kb semmire sem hasznalhatok.

jo lenne, ha a vegen szamolna valami "kezzel foghatot" a reszeredmenyekbol, pl:

  • benchmark pontszamot, amolyan virtualis f@szmeregeteshez (kie a nagyobb?)
  • sulyozott-atlagolt MByte/sec sebesseg erteket