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.
Avatar

Pomiar IPC pojedynczego rdzenia na dowolnej platformie (windows)

by smola ⌂, 2025-04-03, 20:27 (30 days ago) @ smola
edited by smola, 2025-05-02, 14:16

Jest to proba ogarniecia na windows poprzedniego testu dostepnego tylko na linuxopodobnych platformach. Testy byly przeprowadzane na win10, ale powinno wsio dzialac na kazdym, wspolczesnym, no moze z wyjatkiem w9x ;)

Do dzialania jest konieczna instalacja pakietu cygwin oraz dodanie opcjonalnych toolsow: time i bc. Cygwin to zestaw linuxowych narzedzi ktore mozna uruchamiac na windows. Troszke proteza ale dziala ;)

Aktualny instalator cygwina jest dostepny tutaj. Sa tez starsze wersje, wyglada ze jest wsparcie dla win7 i nowszych os.

Ponizej informacje jak wyciagnac info o cpu i systemie oraz sam test. Wyniki z windows prosze dodawac jako odpowiedz na ten post, prosze nie dawac reply na inne odpowiedzi w tym watku.

Jesli wyniki z bc beda porownywalne z wynikami na linuxie, zostana polaczone z wynikami w glownym poscie dot. linuxa.

To jest faza eksperymentalna, potrzebne jest wiecej testow i danych. Idealnie byloby na tej samej maszynie wykonac test na win/lin i wrzucic staty. No ale to duzo roboty, wiec to opcja dla oddanych desperatow ;)

Instalacja cygwin (przyklad dla win10 64-bit):

  • sciagnac installer cygwina i uruchomic 'cygwin_setup-x86_64.exe'
  • wybrac instalacje z internetu
  • domyslny katalog: C:\cygwin64
  • dodatkowe pakiety (uzyc szukaj i zmienic 'Pomin' na podana wersje):
    • Math/bc v1.07.1-1
    • Utils/time v1.9-1

Staty i test:

  • uruchomic konsole cmd: win+r, cmd[enter]

  • cpu info:
    wmic cpu get name
    Name
    AMD Ryzen 9 5950X 16-Core Processor

  • system info:
    systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Model" /C:"Total Physical Memory"
    OS Name: Microsoft Windows 10 Pro
    OS Version: 10.0.19045 N/A Build 19045
    System Model: X570 AORUS MASTER
    Total Physical Memory: 32 691 MB

  • run test:
    on win is problem with pipes, so we have to use hacky way ;)
    c:\cygwin64\bin\echo.exe "scale=5000; a(1)*4" >"%tmp%\bc-args"
    c:\cygwin64\bin\echo.exe "quit" >>"%tmp%\bc-args"
    c:\cygwin64\bin\time.exe -p c:\cygwin64\bin\bc.exe -l "%tmp%\bc-args"
    del "%tmp%\bc-args"

    real 10.47
    user 10.46
    sys 0.00

    albo 1 dlugi one-liner:
    c:\cygwin64\bin\echo.exe "scale=5000; a(1)*4" >"%tmp%\bc-args" & c:\cygwin64\bin\echo.exe "quit" >>"%tmp%\bc-args" & c:\cygwin64\bin\time.exe -p c:\cygwin64\bin\bc.exe -l "%tmp%\bc-args" & del "%tmp%\bc-args"

    then copy real/user/sys times

Wyniki (od najwolniejszego do najszybszego):

  • Lenovo ThinkPad T440S, Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz, Windows 10 Pro 10.0.19045 Build 19045, 8GB
    real 18.59
    user 18.46
    sys 0.01

  • leosh, AMD Ryzen 7 5800X3D 8-Core Processor, Windows 10 Pro 10.0.19045 Build 19045, 32GB
    real 11.39
    user 11.35
    sys 0.01

  • AMD Ryzen 9 5950X 16-Core Processor, Windows 10 Pro 10.0.19045 Build 19045, X570 AORUS MASTER, 32GB
    real 10.47
    user 10.46
    sys 0.00
Avatar

Roznica IPC miedzy p-core i e-core w cpu intela (linux)

by smola ⌂, 2025-04-09, 16:27 (24 days ago) @ smola
edited by smola, 2025-04-09, 20:16

Udalo mi sie w koncu zrobic testy wolnych i szybkich rdzeni w tym samym cpu :) Sa to 2 testy p-core i e-core z i5-12600K. Ten cpu ma 6 szybkich p-cores z HT i 4 wolne e-cores, lacznie 16 logicznych cpu (6*2 + 4). Do testu wymagany jest dodatkowy tool taskset, ktory ustawia affinity mask dla danego procesu. Dzieki temu mozna przypisac konkretny rdzen do konkretnego zadania. Sama skladnia jest specyficzna dla taskset i nie mozna go uzyc byle gdzie, tutaj musi byc przed bc.

Liste corow sie robi tak:
$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE   MAXMHZ   MINMHZ       MHZ
0     0      0    0 0:0:0:0          yes 4900.0000 800.0000  800.0000
1     0      0    0 0:0:0:0          yes 4900.0000 800.0000  800.0000
2     0      0    1 4:4:1:0          yes 4900.0000 800.0000  800.1410
3     0      0    1 4:4:1:0          yes 4900.0000 800.0000  800.0000
4     0      0    2 8:8:2:0          yes 4900.0000 800.0000  800.0000
5     0      0    2 8:8:2:0          yes 4900.0000 800.0000  800.0000
6     0      0    3 12:12:3:0        yes 4900.0000 800.0000  800.0000
7     0      0    3 12:12:3:0        yes 4900.0000 800.0000  800.0000
8     0      0    4 16:16:4:0        yes 4900.0000 800.0000  800.0640
9     0      0    4 16:16:4:0        yes 4900.0000 800.0000  800.0000
10    0      0    5 20:20:5:0        yes 4900.0000 800.0000  800.0000
11    0      0    5 20:20:5:0        yes 4900.0000 800.0000  800.0000
12    0      0    6 28:28:7:0        yes 3600.0000 800.0000  800.0000
13    0      0    7 29:29:7:0        yes 3600.0000 800.0000 3600.1150
14    0      0    8 30:30:7:0        yes 3600.0000 800.0000  800.0000
15    0      0    9 31:31:7:0        yes 3600.0000 800.0000  800.0000

Po maxmhz widac ktory jest szybki a ktory nie ale p-cory maja tez swoja tabelke w bios i nie kazdy skacze w turbo na maxa. U mnie to sa 0 i 1, pozostale w stresie boostuja ciut mniej, no ale to ma znaczenie w multi, przy single to bez roznicy praktycznie.

Test zostal przeprowadzony na maszynie z najnowszym ubuntu lts:
12th Gen Intel(R) Core(TM) i5-12600K, 6.8.0-57-generic, Ubuntu 24.04.2 LTS

Test najszybszego p-core czyli #0 (0-11):
$ time echo "scale=5000; a(1)*4" | taskset -c 0 bc -l
real 0m9.545s
user 0m9.542s
sys 0m0.004s

Wynik jest praktycznie taki sam jak przy tescie bez taskset, scheduler sam ustawia najszybszy dostepny, ale przy e-core jest juz ciekawiej ;)

Test wolnego e-core #12 (12-15):
$ time echo "scale=5000; a(1)*4" | taskset -c 12 bc -l
real 0m15.401s
user 0m15.395s
sys 0m0.007s

Poniewaz wyniki testu sa porownywalne dla wersji gnu bc, to osiagi e-cores sie mieszcza gdzies pomiedzy i7-3770 (real 0m15.986s) a Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz (real 0m15.289s). Nie jest zle ;) Zas p-cores, to juz konkretne bestie - wynik ponizej 10s to miejsce #2 za mistrzem AMD Ryzen 7 PRO 6850U with Radeon Graphics (real 8.00s).

Aczkolwiek mam pewne watpliwosci czy aby na pewno byl uzyty wlasciwy bc w tym tescie. Test zweryfikowany, koszerna wersja gnu bc v1.08.1.

Prawilne wersje to gnu, zoptymalizowne nie sa porownywalne i ich wyniki nalezy traktowac jako ciekawostke. Nizej info jak sprawdzic wersje:
$ bc -v
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.

Jesli jest inna niz 1.xx lub nie zawiera tagu 'Free Software Foundation', to znaczy ze niekoszerna :(