Страница 1 из 1

Утилита проверки скорости дисков в Linux (как в CrystalDiskMark)

Добавлено: 17 сен 2022, 00:28
Chocobo
Вспомнив сегодня старый пост на тему возможности проверки скорости всяких разных дисков - на коленке при помощи bash родилась утилитка которая собирает данные с fio и воспроизводит результаты по аналогии с виндовой софтиной CrystalDiskMark
photo_2022-09-16_22-03-43.jpg
Собственно задача состояла в том чтобы вывести результаты тестов однопоточного чтения и записи в следующих режимах:
  • Последовательные c размером блока в 1мб и глубиной очереди 8
  • Последовательные c размером блока в 1мб и глубиной очереди 1
  • Случайные c размером блока в 4кб и глубиной очереди 32
  • Случайные c размером блока в 4кб и глубиной очереди 1
Т.к. диски у нас куда-нибудь примонтированы - надо позволить указать путь к файлу чтоб он тестировался на нужном носителе, и также позволить параметрами задать объем прогоняемого файла и количество тестовых проходов.
В качестве дефолтных значений писать будем в файл ./fiotest.tmp в той же директории откуда был вызван скрипт, с размером 1000мб и 5 проходов (типа как в оригинале)

В итоге получилось вот что:

Код: Выделить всё

#!/bin/bash
TESTFILE_PATH='./fiotest.tmp'
TESTFILE_SIZE='1000m'
TEST_LOOPS='5'
sync; sleep 3;
SEQ1MQ8T1R=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=SeqReadQ8 --bs=1m --iodepth=8 --rw=read | grep 'READ:' | awk '{print substr($3, 2, length($3)-3)}')
sync; sleep 3;
SEQ1MQ8T1W=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=SeqWriteQ8 --bs=1m --iodepth=8 --rw=write | grep 'WRITE:' | awk '{print substr($3, 2, length($3)-3)}')
echo "  +----------------------------------------+"
printf "  | %12s | %10s | %10s |\n" "Mode" "Read" "Write"
echo "  +----------------------------------------+"
printf "  | %12s | %10s | %10s |\n" "SEQ1MQ8T1" "$SEQ1MQ8T1R" "$SEQ1MQ8T1W"
echo "  +----------------------------------------+"
sync; sleep 3;
SEQ1MQ1T1R=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=SeqReadQ1 --bs=1m --iodepth=1 --rw=read | grep 'READ:' | awk '{print substr($3, 2, length($3)-3)}')
sync; sleep 3;
SEQ1MQ1T1W=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=SeqWriteQ1 --bs=1m --iodepth=1 --rw=write | grep 'WRITE:' | awk '{print substr($3, 2, length($3)-3)}')
printf "  | %12s | %10s | %10s |\n" "SEQ1MQ1T1" "$SEQ1MQ1T1R" "$SEQ1MQ1T1W"
echo "  +----------------------------------------+"
sync; sleep 3;
RND4KQ32T1R=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=RandReadQ32 --bs=4k --iodepth=32 --rw=randread | grep 'READ:'| awk '{print substr($3, 2, length($3)-3)}')
sync; sleep 3;
RND4KQ32T1W=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=RandWriteQ32 --bs=4k --iodepth=32 --rw=randwrite | grep 'WRITE:'| awk '{print substr($3, 2, length($3)-3)}')
printf "  | %12s | %10s | %10s |\n" "RND4KQ32T1" "$RND4KQ32T1R" "$RND4KQ32T1W"
echo "  +----------------------------------------+"
sync; sleep 3;
RND4KQ1T1R=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=RandReadQ1 --bs=4k --iodepth=1 --rw=randread | grep 'READ:'| awk '{print substr($3, 2, length($3)-3)}')
sync; sleep 3;
RND4KQ1T1W=$(fio --loops=$TEST_LOOPS --size=$TESTFILE_SIZE --filename=$TESTFILE_PATH --ioengine=libaio --direct=1 --name=RandWriteQ1 --bs=4k --iodepth=1 --rw=randwrite | grep 'WRITE:'| awk '{print substr($3, 2, length($3)-3)}')
printf "  | %12s | %10s | %10s |\n" "RND4KQ1T1" "$RND4KQ1T1R" "$RND4KQ1T1W"
echo "  +----------------------------------------+"    
В результате выполнения, по мере прогона тестов будет отрисовывать замеры в следующем виде
Снимок экрана в 2022-09-17 02-04-23.png
для запуска потребуется только наличие в системе пакета fio, если нет - то apt install fio. (Впрочем аналогично и в других дистрибутивах мимо deb)
Тестовый файл (fiotest.tmp) скрипт за собой не удаляет, т.к. не очень охота вписывать rm -f в тело. Грохните по финалу его самостоятельно :smile:

Утилита проверки скорости дисков в Linux (как в CrystalDiskMark)

Добавлено: 17 сен 2022, 11:25
rogoznik
Для fio есть графический интерфейс gfio.
Тут по ней есть немного инфы

Утилита проверки скорости дисков в Linux (как в CrystalDiskMark)

Добавлено: 18 сен 2022, 11:58
volp
Пользуюсь для этих целей KdiskMark
2022-09-18_11-55.png

Утилита проверки скорости дисков в Linux (как в CrystalDiskMark)

Добавлено: 18 сен 2022, 16:03
rogoznik
volp писал(а):
18 сен 2022, 11:58
KdiskMark
обертка на QT над libaio
А вообще да - выглядит почти как CrystalDiskMark, делает тоже :thumbs: