Terminal pogryzł człowieka: fio
Zastanawialiście się co potrafi wasz dysk lub dyski umieszczone w lokalnym komputerze? Albo gdzieś na serwerze? Lub jaką wydajność może zaoferować zdalny system plików? Tyle pytań a odpowiedzią na nie jest fio. Tak, właśnie to wyspecjalizowane narzędzie da nam wiarygodne pomiary a nie popularne i masowo stosowane dd.
Fio pozwala na przeprowadzenie testów losowego/sekwencyjnego odczytu/zapisu, odczytu lub zapisu (odpowiednie parametry w linii komend). Oczywiście to zaledwie czubek całego stosu parametrów którymi można regulować przeprowadzane badania.
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=virtualtest --filename=virtualtest --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=80
Powyższe zestawem opisaliśmy test o nazwie „virtualtest”, który utworzy na dysku plik o objętości 4GB i będzie dokonywał tam prób odczytu i zapisu 4KB danych. Ilość prób odczytu w stosunku do prób zapisu to 4:1 (80%). Może powyższe nie opisuje typowej sytuacji z jaką spotkamy się na komputerze domowym, ale da nam ogólny obraz sprawności naszego systemu plików i dysku. Wynikiem tej komendy może być:
fio-2.2.10 Starting 1 process virtualtest: Laying out IO file(s) (1 file(s) / 4096MB) Jobs: 1 (f=1): [m(1)] [100.0% done] [43540KB/10825KB/0KB /s] [10.9K/2706/0 iops] [eta 00m:00s] virtualtest: (groupid=0, jobs=1): err= 0: pid=12570: Wed Aug 9 10:58:21 2017 read : io=3277.5MB, bw=47339KB/s, iops=11834, runt= 70895msec write: io=838240KB, bw=11824KB/s, iops=2955, runt= 70895msec cpu : usr=2.99%, sys=80.10%, ctx=20508, majf=0, minf=9 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued : total=r=839016/w=209560/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): READ: io=3277.5MB, aggrb=47338KB/s, minb=47338KB/s, maxb=47338KB/s, mint=70895msec, maxt=70895msec WRITE: io=838240KB, aggrb=11823KB/s, minb=11823KB/s, maxb=11823KB/s, mint=70895msec, maxt=70895msec Disk stats (read/write): sda: ios=837832/209426, merge=233/171, ticks=1026620/145640, in_queue=1171736, util=98.28%
Co to wszystko oznacza? Najistotniejsze dla nas będzie IOPS dla read/write. W tym przykładzie testowany dysk był w stanie przeprowadzić w ciągu jednej sekundy 11834 operacji odczytu oraz 2955 operacji zapisu.
Aby przetestować sam odczyt lub zapis wystarczy podać odpowiedni parametr dla –readwrite: read (sekwencyjne), write (sekwencyjne), trim, randread, randwrite, randtrim, randrw, trimwrite. Jednak warto zapoznać się z obszernym podręcznikiem gdzie znajdziemy niemal setki przeróżnych parametrów regulujących test w określonym środowisku.