У меня довольно тяжелый процесс ввода-вывода, ограниченный графическим процессором, который должен читать случайные файлы из папки на локальном жестком диске. Когда процесс выполняется сам по себе, я получаю постоянную пропускную способность около 30 МБ / с, но при наличии двух конкурирующих процессов общая пропускная способность падает до 7 МБ / с.
Как я могу максимизировать пропускную способность при наличии двух программ? Задержка не проблема.
Каждый файл имеет порядок 1-20 МБ. Процессы выполняются на независимых графических процессорах и используют очень мало ЦП. Тот же эффект наблюдается, если я одновременно запускаю один графический процессор и один процесс чистого ввода-вывода.
Нет никаких различий между доступными планировщиками: дедлайн, cfq и noop. Я также попытался увеличить время чтения до 5 с, без изменений.
Детали машины:
- Fedora Linux с ядром 4.16.7-200.fc27.x86_64
- i7-4770 CPU @ 3.40 ГГц
- 32 ГБ ОЗУ, 20 из которых заняты запущенными процессами.
- Своп включен, но пустой.
- Накопитель WDC WD2003FYYS-0,2 ТБ, но я вижу то же самое, если переместить все на другие накопители.
- cat big_file> /dev /null обеспечивает пропускную способность около 100 МБ / с, поэтому пропускная способность для обеих систем есть.
- Всего данных около 500 ГБ.
Больше информации:
- Я переместил файлы на другой, более быстрый диск, который больше не используется, и использовал сжатие. Общая пропускная способность немного улучшена.
- Предоставление максимального приоритета одному из процессов улучшило производительность на 10%.
- Запуск
iostat -x 1
показывает, что коэффициент использования составляет около 87% при запуске одного процесса и 100% при запуске двух. - Процессы читают случайные файлы. Если бы у меня был только один процесс, он мог бы обеспечить более чем удвоенную пропускную способность, которую может потреблять каждый из отдельных.