Fio
fio (flexible I/O tester) jest benchmarkiem wydajności I/O w Linuksie i innych systemach Unix. Autorem fio jest Jens Axboe, Maintainer Block Layers jądra Linuksa.[1]
Studia przypadków
Następnie pokazujemy przykładowe studia przypadków. W przypadku równoczesnego korzystania z kilku threads należy skorzystać z opcji --numjobs
i --group_reporting
.[2] Ogólne informacje o IOPS i testach przepustowości znajdują się w artykule Pomiar wydajności I/O. Przykłady wskazanych testów znajdują się w artykule Porównanie wydajności pamięci Fusion-io i dysków SSD.
Przypadek Maks. czas trwania testu: 60 sekund |
Odczyt (do testu zapisu należy przy parametrze --rw zmienić 'read' w 'write' ) | Numer testu | ||
---|---|---|---|---|
IOPS | Sequential | całość | fio --filename=/dev/DEVICE --direct=1 --rw=read --bs=512 --size=DEVICESIZE --runtime=60 --name=file1
|
1 |
10% początek | fio --filename=/dev/DEVICE --direct=1 --rw=read --bs=512 --size=DEVICESIZE/10 --runtime=60 --name=file1
|
2 | ||
Random | całość | fio --filename=/dev/DEVICE --direct=1 --rw=randread --bs=512 --size=DEVICESIZE --runtime=60 --name=file1
|
3 | |
10% początek | fio --filename=/dev/DEVICE --direct=1 --rw=randread --bs=512 --size=DEVICESIZE/10 --runtime=60 --name=file1
|
4 | ||
przepustowość | Sequential | 5 GByte początek | fio --filename=/dev/DEVICE --direct=1 --rw=read --bs=1m --size=5G --runtime=60 --name=file1
|
5 |
5 GByte koniec | fio --filename=/dev/DEVICE --direct=1 --rw=read --bs=1m --size=5G --runtime=60 --offset=OFFSET --name=file1
|
6 | ||
kompletne device[3] | fio --filename=/dev/DEVICE --direct=1 --rw=read --bs=5G --size=DEVICESIZE --runtime=60 --name=file1
|
7 | ||
Random | 5 GByte początek | fio --filename=/dev/DEVICE --direct=1 --rw=randread --bs=1m --size=5G --runtime=60 --name=file1
|
8 | |
5 GByte koniec | fio --filename=/dev/DEVICE --direct=1 --rw=randread --bs=1m --size=5G --runtime=60 --offset=OFFSET --name=file1
|
9 | ||
kompletne device | fio --filename=/dev/DEVICE --direct=1 --rw=randread --bs=5G --size=DEVICESIZE --runtime=60 --name=file1
|
10 |
Opcje
filename
Przez opcje filename definiowany jest plik testowy. Podany może zostać również Device-File, w celu bezpośredniego przetestowania Block-Device (bez wpływu na wynik przez system operacyjny).
direct
direct=1 aktywuje direct I/O (vide Direct i synchronized I/O w Linuksie#O_DIRECT).
sync
sync=1 aktywuje synchronous I/O. Dla większości I/O Engines oznacza to O_SYNC (vide Direct i synchronized I/O w Linuksie#O_SYNC, O_DSYNC, O_RSYNC).
readwrite
readwrite lub rw definiuje I/O Pattern.
Możliwe wartości:
- read: Sequential reads
- write: Sequential writes
- randread: Random reads
- randwrite: Random writes
- rw: Mieszane sequential reads i writes
- randrw: Mieszane random reads i writes
blocksize
blocksize lub bs definiuje wielkość bloku (standardowa wartość 4K).
size
size definiuje wielkość całkowitą I/O danej Testjob. fio pracuje do zakończenia transferu podanej wielkości lub upłynięcia runtime.
numjobs
Ilość procesów, które są tworzone przez zdefiniowany Workload (standardowa wartość 1). Wartości >1 tworzą multi-threaded I/O.
runtime
runtime definiuje maks. czas trwania w sekundach.
group_reporting
Aktywna opcja powoduje generowanie raportu grupowego przy teście z numjobs>1 (zamiast pojedynczych Job Reports).
Dalsze opcje
zero_buffers
zero_buffers=1 zapełnia bufor zerami zamiast random data (losowymi danymi).
Opcja ta może mieć wpływ na wynik pomiaru z dyskami SSD, w przypadku gdy kontroler SSD próbuje kompresować te dane.[4][5]
Odnośniki
- ↑ vide /usr/src/linux/MAINTAINERS pliki aktualnego jądra Linuksa, np. http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/MAINTAINERS
- ↑ http://kb.fusionio.com/KB/a29/verifying-linux-system-performance.aspx
- ↑ Przez ograniczenie czasu trwania testu wynik nie jest zawsze poprawny. W celu przeprowadzenia całego testu należy usunąć parametr runtime (Uwaga: długi czas trwania testu!)
- ↑ http://www.spinics.net/lists/fio/msg00467.html
- ↑ http://www.spinics.net/lists/fio/msg00362.html