Avatar

Pomiar IPC pojedynczego rdzenia na dowolnej platformie (linux) (Ogólne)

by smola ⌂, 2025-04-03, 15:28 (30 days ago)
edited by smola, 2025-04-26, 06:30

To jest bardzo prosty test, ktory pozwala szybko okreslic wydajnosc ipc pojedynczego rdzenia cpu. Moze nie jest ultra dokladny, ale od lat daje rade i wyniki sa porownywalne miedzy roznymi maszynami. Jego zaleta jest mega prostota i dzialanie na praktycznie kazdej platformie na ktorej sa dostepne 2 polecenia: time oraz bc.

Sam test uzywa linuxowego kalkulatora bc, ktory dla liczby pi wylicza 5000 miejsc po przecinku. Wiecej info na wiki.

Czas trwania testu wynosi od kilkunastu sekund do kilku minut (wolniejsze maszynki typu routery lub starsze sprzety).

Zapraszam do dzielenia sie wlasnymi wynikami, beda one sukcesywnie dodawane do glownej listy.

Jak na razie, bariera 10s jest trudna do pokonania, niczym zejscie ponizej 10s w sprincie na 100m ;)

Dzieki uprzejmosci kolegow, mamy coraz wiecej roznych cpu, w tym takie perelki jak Xeony i Epic'i. Ze staroci goszcza P3/1400, Athlon XP/2800, Athlon Thunderbird 1200 oraz VIA C3 1GHz :) I najnowsze "smoki" jak AMD Ryzen AI 9 365. Z maluchow/embedded sa rpi 4, rozne warianty rpi zero oraz odroid.

Uwaga: bc musi byc w standardowej wersji gnu! Jest dostepna zoptymalizowana wersja na githubie i wystepuje ona rowniez na macos, jednak jest "nieprzyzwoicie" szybka i nie nadaje sie do testow porownawczych. Na koncu zostaly dodane wyniki z obu wersji pokazujace problem.

Staty i test:

  • cpu info:
    $ lscpu | grep "Model name:"
    Model name: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

    albo:
    $ lscpu | grep "Model name:" | cut -d':' -f2 | xargs
    Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

  • kernel info:
    $ uname -r
    5.15.0-135-generic

  • run test:
    $ time echo "scale=5000; a(1)*4" | bc -l
    then copy real/user/sys times

Wyniki (od najwolniejszego do najszybszego):

  • piotr, VIA Nehemiah C3 1GHz, 2.6.11
    real 3m11.660s
    user 3m11.393s
    sys 0m0.014s

  • piotr, Raspberrypi Zero W, ARM1176, 5.10.103+
    real 2m20.448s
    user 2m20.104s
    sys 0m0.034s

  • ARMv7 Processor rev 1 (v7l) @ 1GHz, Marvell Armada 375 (Device Tree)
    real 2m9.215s
    user 2m9.180s
    sys 0m0.010s

  • piotr, Wyse 3020, PJ4B-MP, 6.3.5-mvebu-tld-1
    real 1m44.236s
    user 1m44.085s
    sys 0m0.035s

  • kimsufi N2800 1,8
    real 1m38.478s
    user 1m38.452s
    sys 0m0.008s

  • piotr, ODROID-GO SUPER, Cortex-A35, 5.10.160+rocksbc
    real 1m32.723s
    user 1m32.528s
    sys 0m0.016s

  • zami, Athlon Thunderbird 1200MHz, 3.19.0-25-generic
    real 1m31.406s
    user 1m31.292s
    sys 0m0.008s

  • piotr, centos 6, Intel(R) Pentium(R) III CPU family 1400MHz, 2.6.32-754.el6.i686
    real 1m30.200s
    user 1m30.169s
    sys 0m0.007

  • kimsufi few years later, new ubuntu server 24.10, Intel(R) Atom(TM) CPU N2800 @ 1.86GHz, 6.11.0-19-generic
    real 1m22.695s
    user 1m22.666s
    sys 0m0.028s

  • e350m1:
    real 1m6.630s
    user 1m6.548s
    sys 0m0.028s

  • piotr, Orange Pi Zero 3, Cortex-A53, 6.13.7-edge-sunxi64
    real 1m5.511s
    user 1m5.468s
    sys 0m0.032s

  • piotr, Raspberry Pi Zero 2w, Cortex-A72, 6.12.21-arm64
    real 0m54.471s
    user 0m54.264s
    sys 0m0.011s

  • zami, Xubuntu 16.04 32bit + 3GB RAM, AMD Athlon(tm) XP 2800+, 4.4.0-210-generic
    real 0m53.226s
    user 0m53.168s
    sys 0m0.004s

  • piotr, Raspberry PI 4, Cortex-A72, 6.12.20-arm64
    real 0m47.714s
    user 0m47.542s
    sys 0m0.018s

  • Intel(R) Pentium(R) CPU J2900 @ 2.41GHz
    real 0m41.771s
    user 0m41.663s
    sys 0m0.000s

  • piotr, ODROID-HC2, 6.6.81-current-odroidxu4
    Cortex-A15
    real 0m40.920s
    user 0m40.668s
    sys 0m0.053s

    Cortex-A7
    real 1m28.818s
    user 1m28.300s
    sys 0m0.034s

  • piotr, ODROID GO ULTRA, Cortex-A73, 4.9.277+
    real 0m39.262s
    user 0m39.248s
    sys 0m0.000s

  • piotr, ODROID N2L, 6.14.1-edge-meson64
    Cortex-A73
    real 0m30.679s
    user 0m30.643s
    sys 0m0.008s

    Cortex-A53
    real 0m46.027s
    user 0m45.916s
    sys 0m0.016s

  • piotr, AMD A8-3870 APU with Radeon(tm) HD Graphics, 6.12.21-amd64
    real 0m27.709s
    user 0m27.694s
    sys 0m0.005s

  • gallu, Intel(R) Xeon(R) CPU E5-1603 0 @ 2.80GHz, 6.8.12-8-pve
    real 0m22.214s
    user 0m22.210s
    sys 0m0.001s

  • gallu, e5-2680v2, 5.15.83-1-pve #1 SMP
    real 0m21.618s
    user 0m21.613s
    sys 0m0.000s

  • lukas12p, Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz, 4.14.355-275.591.amzn2.x86_64
    real 0m20.588s
    user 0m19.513s
    sys 0m0.000s

  • piotr, AMD EPYC 3151 4-Core Processor, 6.12.20-amd64, Gigabyte MJ11-EC1 AMD EPYC Embedded 3151 4x2,7GHz mITX DDR4
    real 0m20.079s
    user 0m20.058s
    sys 0m0.001s

  • beanus, Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz, 5.15.0-136-generic
    real 0m19,621s
    user 0m19,601s
    sys 0m0,007s

  • piotr, Intel(R) Xeon(R) Gold 6136 CPU @ 3.00GHz, 4.18.0-553.45.1.el8_10
    real 0m19.152s
    user 0m19.129s
    sys 0m0.002s

  • i7-3770T:
    real 0m19.076s
    user 0m19.012s
    sys 0m0.000s

  • beanus, Intel(R) Core(TM) i5-7400T CPU @ 2.40GHz, 5.15.0-136-generic
    real 0m18.312s
    user 0m18.284s
    sys 0m0.000s

  • beanus, i5-7400T CPU @ 2.40GHz, 5.15.0-70-generic:
    real 0m18.299s
    user 0m18.290s
    sys 0m0.009s

  • i7-3700 kernel 4.15.72:
    real 0m18.260s
    user 0m18.253s
    sys 0m0.004s

    real 0m17.705s
    user 0m17.719s
    sys 0m0.000s

  • piotr, Intel(R) Xeon(R) Gold 6242 CPU @ 2.80GHz, 4.18.0-553.45.1.el8_10
    real 0m18.176s
    user 0m18.156s
    sys 0m0.001s

  • i7-3770T kernel 3.18 native:
    real 0m18.124s
    user 0m18.137s
    sys 0m0.000s

  • Xeon(R) CPU E3-1225 V2 @ 3.20GHz 4/4, 6.8.0-40-generic
    real 0m16.847s
    user 0m16.846s
    sys 0m0.001s

  • magu, Intel(R) N100 CPU @ 2.8GHz, 6.5.13-1-pve
    real 0m16.733s
    user 0m16.710s
    sys 0m0.008s

  • piotr, AMD EPYC 7302 16-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m16.512s
    user 0m16.442s
    sys 0m0.004s

  • piotr, Intel(R) Core(TM) i5-5675C CPU @ 3.10GHz, 6.12.21-amd64
    real 0m16.411s
    user 0m16.410s
    sys 0m0.000s

  • beanus, Neoverse-N1, 6.8.0-1020-oracle
    real 0m16.371s
    user 0m16.249s
    sys 0m0.008s

  • i7-3770 5.4.0-147-generic:
    real 0m15.986s
    user 0m15.964s
    sys 0m0.004s

  • gallu, Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz, 6.8.12-8-pve
    real 0m15.289s
    user 0m15.285s
    sys 0m0.003s

  • michal u, AMD Ryzen 7 2700X Eight-Core Processor, 6.14.2-arch1-1
    real: 14.51s
    user: 14.46s
    sys: 0.00s

  • gallu, Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz, 5.15.102-1-pve
    real 0m14.221s
    user 0m14.218s
    sys 0m0.000s

  • piotr, Intel(R) Pentium(R) CPU G3260 @ 3.30GHz, 13.1-RELEASE-p9
    real 0m14.205s
    user 0m14.195s
    sys 0m0.000s

  • zami, Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz, 6.8.0-57-generic
    real 0m13,592s
    user 0m13,586s
    sys 0m0,007s

  • piotr, AMD EPYC 7543 32-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m13.617s
    user 0m13.592s
    sys 0m0.001s

  • piotr, thinkpad x13s, Cortex-A78C, Cortex-X1C, 6.14.0-sc8280xp-arm64
    real 0m13.294s
    user 0m13.281s
    sys 0m0.004s

  • piotr, AMD EPYC 7313 16-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m13.222s
    user 0m13.162s
    sys 0m0.005s

  • piotr, AMD EPYC 9354 32-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m12.526s
    user 0m12.496s
    sys 0m0.003s

  • piotr, AMD EPYC 7343 16-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m12.515s
    user 0m12.488s
    sys 0m0.002s

  • piotr, AMD EPYC 74F3 24-Core Processor, 4.18.0-553.45.1.el8_10
    real 0m12.268s
    user 0m12.244s
    sys 0m0.004s

  • piotr, 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz, 6.11.0-8-generic
    real 0m12.062s
    user 0m12.056s
    sys 0m0.004s

  • piotr g, Intel(R) Core(TM) i9-11900 @ 2.50GHz, 6.13.7-200.fc41.x86_64
    Executed in 11.24 secs fish external
    usr time 11.18 secs 188.00 micros 11.18 secs
    sys time 0.00 secs 89.00 micros 0.00 secs
    bc v1.08.1

  • piotr, AMD Ryzen 5 PRO 5650G with Radeon Graphics, 6.12.20-amd64
    real 0m10.808s
    user 0m10.806s
    sys 0m0.000s

  • piotr, AMD Ryzen 5 5600X 6-Core Processor, 6.12.20-amd64
    real 0m10.335s
    user 0m10.331s
    sys 0m0.000s

  • czen, AMD Ryzen AI 9 365 w/ Radeon 880M, Linux fedora 6.13.9-200.fc41.x86_64, Lenovo Yoga Pro Ryzen9 AI 365 HX
    real 0m9,679s
    user 0m9,656s
    sys 0m0,004s
    bc v1.07.1

  • michal u, AMD Ryzen 5 PRO 8540U w/ Radeon 740M Graphics, 6.14.2-arch1-1
    real 9.42
    user 9.38
    sys 0.00
    bc v1.08.1

  • 12th Gen Intel(R) Core(TM) i5-12600K, 6.8.0-57-generic, Ubuntu 22.04.5 LTS
    real 0m9.127s
    user 0m9.124s
    sys 0m0.004s
    bc v1.07.1

  • Intel(R) Core(TM) i5-14600K, 6.8.0-57-generic, Ubuntu Server 24.04.2 LTS, 128GB RAM 3200 CL14
    real 0m8.768s
    user 0m8.764s
    sys 0m0.004s
    bc v1.07.1

  • piotr g, AMD Ryzen 7 PRO 6850U with Radeon Graphics, 6.14.0-63.fc42.x86_64
    Executed in 8.00 secs fish external
    usr time 7.95 secs 235.00 micros 7.95 secs
    sys time 0.00 secs 235.00 micros 0.00 secs
    bc v1.08.1

  • current winner: piotr g, 8secs :) gratz!

Roznica miedzy real i user to czas na operacje i/o na dysku/sieci itp. To swietnie pokazuje czy jest waskie gardlo. Dzieki temu doszedlem do wniosku, ze macierz ssala palke na hdd i byl lag na i/o. Przelom nastapil po zmianie hdd na ssd ;) Nizej staty starej macierzy na hdd i nowej na ssd:

platforma: i7-3770 + 32GB DDR3
test: 60k plikow, 7.8GB
$ time ./48-extract_data_v1_users.py

stara macierz hdd r6 4x2TB:
real 85m23.175s
user 60m7.458s
sys 0m12.143s

i/o time = ~25m = 1500s

nowa macierz ssd r0 2x256GB:
real 59m54.789s
user 59m48.122s
sys 0m6.528s

i/o time = ~6.6s --> 1500/6.6=227x mniejszy lag...

nie ma za co ;)

Wyniki bc z koszernej wersji gnu oraz niekoszernej (thx piotr):

  • wersja zoptymalizowana/niekoszerna z gita:
    # time echo "scale=5000; a(1)*4" | bc -l > /dev/null
    real 0m1.045s
    user 0m1.042s
    sys 0m0.001s

    # bc --version
    bc 6.7.5
    Copyright (c) 2018-2023 Gavin D. Howard and contributors
    Report bugs at: https://git.gavinhoward.com/gavin/bc
    This is free software with ABSOLUTELY NO WARRANTY.

  • wersja koszerna gnu:
    # time echo "scale=5000; a(1)*4" | /usr/local/bin/bc -l > /dev/null
    real 0m14.205s
    user 0m14.195s
    sys 0m0.000s

    # /usr/local/bin/bc --version
    bc 1.07.1
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.

Complete thread: