[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