Portál AbcLinuxu, 1. května 2025 19:01
Často se mi stane, že chci v Linuxu provést nějakou operaci na větším množství textových dat - typicky logfile - a operace trvá nepříjemně dlouho. Rozhodl jsem se rychlost zpracování různými programy pro čtenáře zhruba změřit.
Pamatuju si, že na Matfyzu jsme se učili, že Unix byl koncipován jako automatická kancelář na zpracování textů. Má zkušenost mě přesvědčila, jak důležitá tato schopnost Unixu je. Oceňuju ji, a postupem času ji vnímam jako více a více nadčasovou. Řekl bych, že tato flexibilita se autorům skutečně povedla.
Jedna a tatáž operace se někdy dá provést několika různými způsoby za použití odlišných linuxových utilit. A protože tyto mohou být koncipovány jako různě sofistikované, datový průfuk se může dramaticky lišit. Jednodušší algoritmy totiž často znamenají pro počítač menší práci. Roli v tom ale hraje i to, jak kvalitně jsou tyhle věci naprogramované.
Na začátek bych začal mým oblíbencem - utilitou pv (pipe viewer). Vloží se do pipy a ukazuje, jak rychle se data přenáší a kolik se jich přeneslo. Moc se mi na tom líbí, že při zpracování většího množství dat okamžitě vidím, zda se něco vůbec děje.
Měření jsem prováděl na netbooku s Intel Atomem, 2x1.6 GHz, 1 GB DDR2 RAM, 512 KiB L2, harddiskem 5400 rpm a podomácku kompilovaným Linuxem LFS/BLFS s CFLAGS -march=atom -O2.
Kolik z toho vytáhneme, pokud budeme chtít kernelem generovat velké bloky nul a hned je zase zahazovat?
Příkaz | Výkon [MiB/s] |
dd if=/dev/zero of=/dev/null bs=100000 count=50000 | 2700 |
pv < /dev/zero > /dev/null | 1670 |
dd if=/dev/zero of=/dev/null bs=1000000 count=5000 | 1300 |
Vidíme, že u dd výkon dost závisí na velikosti bloku. Zkusím tedy, jaké velikosti přinášejí jakou rychlost
bs= | Výkon [MB/s] |
1 | 0.65 |
10 | 6.5 |
100 | 65 |
1k | 557 |
3k | 1300 |
10k | 2300 |
20k | 2600 |
30k | 2400 |
50k | 2500 |
80k | 2600 |
100k | 2700 |
150k | 2700 |
200k | 2700 |
300k | 2600 |
500k | 2000 |
700k | 1600 |
1M | 1250 |
10M | 1000 |
100M | 1000 |
500M | 888 |
700M | 272 |
1000M | 13 (i myš se přestala hýbat!) |
Někam do 1k je vlastně úplně jedno, že nějaká data přenášíme - provádí se čistá byrokracie. Při stopadesátikilovém bufíku dosáhneme zřejmě optimální rychlosti L2. Mezi 10 a 100 mega se nám projevuje hlavní polovodičová paměť. No a pak jde počítač do swapíku. Při 1G se PC stalo už dost nepoužitelným a disk chrastil ještě dlouhou dobu poté, co program doběhl. Hrbolek na 20k si myslím že je pravděpodobně způsoben L1 cache (24KiB u mého modelu tuším).
A jak bude situace reagovat, pokud do pipy vložíme více či méně zbytečných catů?
Příkaz | Výkon [MiB/s] |
pv /dev/zero |cat > /dev/null | 528 |
cat /dev/zero |pv > /dev/null | 413 |
cat /dev/zero |pv|cat > /dev/null | 300 |
cat /dev/zero |cat|pv > /dev/null | 216 |
pv /dev/zero |cat|cat > /dev/null | 200 |
pv /dev/zero |cat|cat|cat|cat|cat > /dev/null | 82 |
pv /dev/zero |cat|cat|cat|cat|cat|cat|cat| | 40 |
Zdá se mi, že tu platí 2 fyzikální zákony:
Tak jsme si ukázali, jak pomocí stokilového bufferu vytáhnout optimálních 21.6 Gbps z příkazu dd na to, abysme záhy teď tady zase mohli zjistit, že nám to v případě velkých souborů bude k ničemu. Užijeme si tuto rychlost jen tehdy, vejde-li se soubor do pracovní paměti.
Pro přístup na disky, USB sticky, CD, DVD a podobně nám kernel nabízí takzvaná bloková zařízení. Bloková se ale nejmenují proto, že by měly trpět nějakými psychickými bloky, i když mi to tak někdy při sledování jejich rychlosti zápisu přijde.
Uživatel je vidí jako lineární abstrakci /dev/něco, která se chová jako soubor pevné délky do kterého se dá zapisovat a číst v libovolných místech. Data kernel mezi tím cachuje v nepoužité polovodičové pamětí - říká se tomu tuším buffery. Čili aby se zápisová a čtecí pomalost před člověkem rozvinula ve své plné kráse, je třeba zkusit větší blok a nebo data, na která jsme předtím nepřistupovali.
Dáme si tedy nějaký ten USB stick. Na menu bych tu měl jakýsi zelený DataTraveler od Kingstonu a pak stříbrný MP3 přehrávač "TECHNIKA", do kterého se strká baterka (naštěstí ne plochá). Oba mají 2 GB. Pak si přidáme nějaká cédé, dévédé a hard disky: můj notebookový SATA 5400 rpm a desktopový SATA 7200 rpm. Jejich typ jsem zjistil příkazem
lsblk -o NAME,TRAN,MODEL NAME TRAN MODEL sda sata ST9160301AS ├─sda1 ├─sda2 ├─sda3 └─sda5 sdb usb DataTraveler 2.0 └─sdb1
Na Ubuntu 12.04 LTS (verzi Ubuntu jsem zjistl tak, že jsem do google zadal how to figure out ubuntu version a pak jsem klikal na věci, které vypadaly jako ty v tom návodu) příkaz lsblk neumí TRAN, takže jsem zalovil v biologické paměti, jakým drátem je to připojené. Na 14.04 jsem neupgradoval, protože Ubuntu upgrade prohlásil, že moje grafická karta je nezpůsobilá.
Testoval jsem příkazy - pozor neprovádějte je jen tak! Můžou vám přepsat harddisk:
df dd if=/dev/zero bs=100000 count=100000 of=bloatfile dd if=bloatfile bs=100000 of=bloatfile2 dd if=bloatfile of=/dev/null bs=100000 pv </dev/sdb >/dev/null pv </dev/cdrom >/dev/null time ( dd of=/dev/sdb if=/dev/zero bs=100000 count=100; sync )
Sync nám zapíše data z cache na USB stick. time měří. za jak dlouho se příkaz vykoná. Počítač podal takovýto atletický výkon:
Zařízení | Zápis [MB/s] | Současný zápis a čtení [MB/s] | Čtení [MB/s] | Poznámka |
Disk 7200 rpm | 50.1 | 21.2 | 55.2 | kontrolka harddisku vrhá stíny na 4 metry - až do kuchyně |
Disk 5400 rpm | 46.0 | 16.9 | 45.4 | |
USB stick Kingston | 3.3 | 16.0 | ||
DVD | 9.2 | |||
USB stick Technika | 0.9 | 1.0 | ||
CD | 0.7 |
Rychlost DVD se měnila (narůstala), předpokládám vlivem narůstající obvodové rychlosti při konstantní úhlové. Zapsal jsem hodnotu v půlce datového rozsahu. Různé USB sticky mohou mít diametrálně odlišné přenosové rychlosti, i když mají stejnou kapacitu. A může se u nich i lišit to, zda je zápis pomalejší než čtení.
U všech těchto hardwarových zařízení můžeme vidět, že jejich rychlost je drasticky pomalejší než pracovní paměť. Může se tak snadno stát, že při zpracování velkých logů nás tato zařízení budou brzdit víc, než samotné zpracující nástroje
V příštím díle se zaměřím na vykutálenější příkazy než jsou dd, pv a cat - zejména na známé textové nástroje grep a sed.
… bufíku … swapíku … abysme … dévédé …
WtF?
i myš se přestala hýbat!
kontrolka harddisku vrhá stíny na 4 metry - až do kuchyně
Ještě bych pochopil, že autor chce projev zpestřit, ale opravdu je nutné podobné poznámky psát do tabulek s hodnotami?
Data kernel mezi tím cachuje v nepoužité polovodičové pamětí - říká se tomu tuším buffery.
Ne, říká se tomu page cache.
Čili aby se zápisová a čtecí pomalost před člověkem rozvinula ve své plné kráse, je třeba zkusit větší blok a nebo data, na která jsme předtím nepřistupovali.
Nebo, lépe, zajistit, že se bude opravdu číst (flushnutím cache) a zapisovat (synchronním zápisem).
Může se tak snadno stát, že při zpracování velkých logů nás tato zařízení budou brzdit víc, než samotné zpracující nástroje
Jen za předpokladu, že se data, která budou příkazy zpracovávat, budou číst z disku nebo na něj zapisovat, což se, doufám, dít nebude.
Ale už v tomto dílu mám určité pochybnosti o metodice některých testů. Sice jsme se dozvěděli, že kontrolka svítí až do kuchyně, ale nevíme, jestli se např. poslední test prováděl v runlevel 1 (a bezprostředně po sync
), aby se zajistilo, že ve skutečnosti neměříme flushnutí úplně nesouvisejících dat. Nebo že test CD/DVD se prováděl dvakrát za sebou, aby se potlačil vliv toho, že se mechanika nejdřív musí roztočit.
a hard disky: můj notebookový SATA 5400 rpm a desktopový SATA 7200 rpm
Neznamená to, doufám, že se každý měřil na jiném systému?
Kritizovat umí každý.
To je hluboký omyl.
nekdo umi kritizovat, nekdo umi WtFuckovat
Je trochu škoda, že jste se v mém komentáři dostal jen k první připomínce.
a reagovat pohorsene na hovore vyrazy acronymem je trochu alibisticke ne?
Alibistické? Jestli myslíte pokrytecké, tak možná trochu, ale myslím, že je celkem normální, že očekávaná úroveň projevu je trochu jiná v článku na odborném webu a trochu jiná v diskusi. Nemluvě o tom, že kdyby byl článek napsán odpovídajícím stylem, nemyslím, že bych v komentáři použil "WtF".
ze se prihlasil na chov krav na hnojarnene neprihlasil jsem se na chov krav, neschopnost rozpoznat rybu od colka a kravy je i na pomery jednostranne zamerenych fachidiotu docela pruser :)
s 90% propustnostitak to asi mluvis o nejake hnojarne v albanii nebo kde - v suchdole je propustnost od imatrikulace ke statnicim na bc studiu asi 10% v regulernim case a dalsich cca 10% jsou uspesni opakovaci rocniku, rozkladaci apod :) - coz je mimochodem vyrazne mene, nez v podobnem oboru na UK
kterou da kazdy blbecskoda, ze si se blbce nepodepsal, mohl sis zkusit treba nejakou tu genetiku, obavam se, ze bys neuspel :)
jiny obor, ktery ma opravdu smysl za ten investovany casto je ktery? podle tveho projeveneho IQ mas na mysli zrejme ekonomii :D
A kvuli tomu jsi studoval vysokou skolu? Tak to jsi frajer.ze se prihlasil na chov krav na hnojarnene neprihlasil jsem se na chov krav, neschopnost rozpoznat rybu od colka a kravy je i na pomery jednostranne zamerenych fachidiotu docela pruser :)
No jasne. Protoze se na to pak vsichni vyserou a jdou studovat neco, co jim opravdu k necemu bude. Blekotal jsi neco, ze jsi psal dokumentaci. Nejsem si jisty co jsi dokumentoval (a jak tak ctu ty tve vylevy, tak ani ty ne), ale rozmnozovani rybicek v akvarku to asi nebylo. Ale jestli jsi chtel mit na stara kolena taky konecne nejaky titul a bylo ti jedno z ceho, tak chapu, ze jsi delal tohle, kdyz v Plzni uz fofrstudium zatrhli.s 90% propustnostitak to asi mluvis o nejake hnojarne v albanii nebo kde - v suchdole je propustnost od imatrikulace ke statnicim na bc studiu asi 10% v regulernim case a dalsich cca 10% jsou uspesni opakovaci rocniku, rozkladaci apod :) - coz je mimochodem vyrazne mene, nez v podobnem oboru na UK
Hlavne ze ty ses podepsal pod vsemi svymi vyroky. Plna huba kecu a nic. Ale nevadi, my uz si tu na to, ze jsi jenom velkohuby jouda, zvykli. Jestli jsi to dal ty, tak uz to da kde kdo. A dvakrat.kterou da kazdy blbecskoda, ze si se blbce nepodepsal, mohl sis zkusit treba nejakou tu genetiku, obavam se, ze bys neuspel :)
Tu jsem zrovna nemyslel, ale proti te tvoji saskarne je to furt luxus. Budes studovat jeste neco? Treba Francouzskou literaturu 18. stoleti nebo Gender Studies? To bude asi stejny level. Klesat uz nemas kam.jiny obor, ktery ma opravdu smysl za ten investovany casto je ktery? podle tveho projeveneho IQ mas na mysli zrejme ekonomii :D
Ano já se pod své výroky podepisujíNo jasne. A je to tvoje krestni jmeno nebo prijmeni? Ja jenom, ze tvuj podpis ma stejnou vahu jako muj.
a jestli mas ty pocit, že bys vystudoval biologii, já ten pocit nemám, protože to skutečně není obor pro idioty.Jsi zivoucim dukazem toho, ze je. Bohuzel.
Přírodní vědy jsou asi jediný obor, který se nedá okecat :)Nevim, jak jsou na tom jine obory, ja je nestudoval, ale uplne jisty bych si tvym tvrzenim nebyl.
A jestli mas nějaký problém s tím, že jsi studoval školu k ničemu, je mi té lítoNemusi, nemam. Ne kazdy je zoufalec aby studoval nejakou ptakovinu a jeste si musel namlouvat jak super tezkou skolu a uzitecny obor vystudoval a jeste to vytruboval do sveta.
ale já si vybral obor, který mě zajímá a který potřebují :)No, ted uz asi bude muset. Jenom by me zajimalo, ktery zamestnavatel prahne po tom, mit v tymu nekoho jako ty.
Nemusi, nemam. Ne kazdy je zoufalec aby studoval nejakou ptakovinu a jeste si musel namlouvat jak super tezkou skolu a uzitecny obor vystudoval a jeste to vytruboval do sveta.ptakovinu si zjevne vystudoval ty, pokud z ni mas takovy komplex navazet se do prirodnich ved, potazmo biologie, ktera te drzi pri zivote (ano, pravdepodobne chodis k lekari, beres leky, nebo je brat budes, a zcela jiste jis) muze jen naprosty frustrat :) ja bych si nedovolil shazovat ani francouzskou literaturu, prestoze se mi ten jazyk vubec nelibi - ale pokud to nekdo studuje, zrejme ho to zajima a lepsi duvod ke studiu neexistuje :)
ptakovinu si zjevne vystudoval ty, pokud z ni mas takovy komplexJenom toliko k tvemu IQ.
navazet se do prirodnich ved, potazmo biologie, ktera te drzi pri zivote (ano, pravdepodobne chodis k lekari, beres leky, nebo je brat budes, a zcela jiste jis) muze jen naprosty frustrat :)Tak to jsem v pohode. Protoze ja se do ni nenavazel. Ale to jsi samozrejme nepochopil. Zadne prekvapeni.
- kdyz chce nekdo titul jedno z ceho - obor co nema smysl - da to kazdy blbec - k nicemu to neni - je to saskarna - uzitecny obor(z kontextu ironicky)
Nebylo by v tom případě lepší místo takového obecného plácnutí rozporovat ty konkrétní věcné připomínky, se kterými nesouhlasíte?Jediný důvod, proč by to nemělo jít vztáhnout na následující?
To je hluboký omyl.
Třeba ten, že jsem tou větou rozporoval zcela konkrétní tvrzení, které považuji za nepravdivé?
Víš, co je opravdu smutné? Že k tomuto článku bylo do této chvíle napsáno 22 komentářů a z nich se jeden vyjadřuje ke konkrétním technickým záležitostem z jeho obsahu (a abychom nebyli úplně nespravedliví, jeden děkuje za zmínku o utilitě pv
). To není moc pěkné skóre.
Štítky AFAIK může editovat kdokoliv a mám pocit, že je stejně skoro nikdo nepoužívá. Pokud používá, neočekával jsem, že se tam ten štítek ohřeje dlouho. (Mimochodem, taky mi jeden nějaký vtipálek přiřadil.)
autor IMHO potřebuje spíš vysvětlit, co dělá špatně, aby pochopil
Není autorem náhodou jistý Clock? No to jsem tedy zvědav…
pv
je jeste pipebench
, kdyz jsem to kdysi zkousel, tak se mi pipebench libil vic, uz si nevzpomenu proc :)
pro nechapave: asize stiny/svetlo mu vrha silna dioda HDD, az na 4 metry, ale to zrejme nema na vykon rostlinare zadny vliv :)
"Měření jsem prováděl na netbooku s Intel Atomem, 2x1.6 GHz, 1 GB DDR2 RAM, 512 KiB L2, harddiskem 5400 rpm a podomácku kompilovaným Linuxem LFS/BLFS s CFLAGS -march=atom -O2."mi prijde jako dobrej vykon.
bs=1 6.1MB/s bs=10 61MB/s bs=100 594MB/s bs=1k 4.9GB/s bs=10k 18.7GB/s bs=100k 24.2GB/s bs=1M 20.9GB/s bs=10M 21.1GB/s bs=100M 10.4GB/s bs=1G 10.4GB/s bs=10G 10.5GB/s bs=100G 10.5GB/sbohuzel podle pohledu na htop se dd zastavi na 2GB bufferu, coz vysvetluje proc rychlost neklesa. pokud mu ale reknu bs= vic nez je celkem RAM tak primo odmitne pracovat.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.