[linux] Testovací dátový súbor
Ján Sáreník
jasan na x31.com
Pondělí Červen 15 15:37:16 CEST 2009
Ahojte!
Len sa chcem podeliť, veď som dávno nepísal :-)
Majme zadanie vygenerovať súbor obsahujúci milión-krát znak 'x'
bez nového riadku a na konci tohto výstupu jeden nový riadok.
----------------------------
let i=0
while [ $i -lt 1000000 ]
do
echo -n x
let i++
done
echo
----------------------------
Tento skript síce svoj účel splní, ale trvá mu to na 2GHz Intel
notebooku takmer minútu.
Trvanie zisťujem tak, že skript uložím do súboru a potom zavolám
$ time sh subor > /dev/null
Skúsme to teda inak:
-----------------------------
for i in `seq 1 1000000`
do
echo x
done | tr -d '\n'
echo
-----------------------------
Tak tento to zvládne oproti prvému za polovičný čas. No stále som
nespokojný. Skúšam to inak:
-----------------------------
for (( i=0; i<100000; i++ ))
do
echo -n xxxxxxxxxx
done
echo
-----------------------------
Pri tomto príklade nastáva zrýchlenie tým, že znížim počet opakovaní
cyklu a zvýšim prietok dát vrámci jedného opakovania. Stále to trvá
o trochu viac než tri sekundy. Vypísaním tisíc 'x' naraz a znížením
počtu cyklov na 1000 sa síce dostávam na pol sekundy, ale už to nie
je pekný kód (viz. http://jasan.pastebin.com/f76c1b972).
Músím teda použiť nejakú funkciu operačného systému, aby mi tie dáta
prúdili rýchlo a dostal som to, čo chcem...
-----------------------------
dd if=/dev/zero bs=500 count=2000 2>/dev/null | tr '\0' x
echo
-----------------------------
Sláva! To je ono! Dve stotiny sekundy a pritom dostanem na výstupe
presne to isté ako v prvom, pomalom príklade.
S prianím pekného dňa,
Jasan.
Další informace o konferenci linux