Вам действительно нужна FAT? По моему опыту, реализация драйвера FAT для Linux, похоже, обращается к устройству с последовательностью, которая приводит к очень низкой производительности некоторых устройств. Я видел 10-кратное улучшение производительности некоторых флэш-устройств при форматировании в ext4.
Учитывая, что ссылка, которую вы предоставили в комментариях (http://www.beginninglinux.com/home/machine-related/sandisk-extreme-64-usb-3-speed-test-benchmark-review), проверяла скорость чтения и записи без разделов, возможно, ваше флэш-устройство имеет низкую производительность при доступе к драйверу Linux FAT. Если это правда,он также должен иметь плохую производительность произвольного ввода-вывода в целом.
Вы можете проверить производительность устройства с помощью fio
. Перейдите в какой-либо каталог внутри устройства, которое вы хотите протестировать, и выполните следующую команду, чтобы проверить производительность со смешанной случайной скоростью чтения/записи 4k:
fio --name TEST --eta-newline=5s --filename=test.img --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
При этом создается тестовый файл размером 500 МБ с именем test.img
, а затем начинается чтение и запись случайными блоками по 4 КБ с глубиной очереди 1. Увеличьте size
, если ваше устройство имеет огромный внутренний кэш. Этот тест имеет максимальное время выполнения 60 секунд. Считайте это наихудшим сценарием с вашим устройством. Довольно быстрое флэш-устройство (Intel SSD 910 )дает следующие результаты:
...
read : io=1041.4MB, bw=17773KB/s, iops=4443, runt= 60001msec
...
write: io=1038.5MB, bw=17723KB/s, iops=4430, runt= 60001msec
...
Чтобы протестировать лучший случай, вы можете увеличить размер блока и сделать 2 параллельных процесса с iodepth=32:
fio --name TEST --eta-newline=5s --filename=test.img --rw=randrw --size=500m --io_size=10g --blocksize=512k --ioengine=libaio --iodepth=32 --direct=1 --numjobs=2 --runtime=60 --group_reporting
Достаточно быстрое флэш-устройство (Intel SSD 910 )дает следующие результаты:
...
read : io=10892MB, bw=457088KB/s, iops=892, runt= 24401msec
...
write: io=9588.0MB, bw=402365KB/s, iops=785, runt= 24401msec
...
Конечно, если вы действительно хотите получить высокие баллы, вам следует выполнять последовательное чтение с высокой глубиной чтения. Это должно быть близко к числам, которые вы видите в спецификациях устройства (, то есть никогда в реальной жизни ):
.
fio --name TEST --eta-newline=5s --filename=test.img --rw=read --size=500m --io_size=10g --blocksize=512k --ioengine=libaio --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
Достаточно быстрое флэш-устройство (Intel SSD 910 )дает следующие результаты:
...
read : io=10240MB, bw=1468.8MB/s, iops=2937, runt= 6972msec
...
Обратите внимание, что это не соответствует спецификации (около 2 ГБ/с ), потому что я настроил планировщик ввода-вывода с минимально возможной задержкой(deadline
Планировщик ввода-вывода с 1 >../queue/iosched/fifo_batch
и50 >../queue/iosched/read_expire
).
Обратите внимание на огромную разницу между наихудшим сценарием (около 17 МБ/с )и лучшим сценарием (около 1470 МБ/с ).