1

У меня довольно тяжелый процесс ввода-вывода, ограниченный графическим процессором, который должен читать случайные файлы из папки на локальном жестком диске. Когда процесс выполняется сам по себе, я получаю постоянную пропускную способность около 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% при запуске двух.
  • Процессы читают случайные файлы. Если бы у меня был только один процесс, он мог бы обеспечить более чем удвоенную пропускную способность, которую может потреблять каждый из отдельных.

1 ответ1

2

Используйте cfq shceduler для этих дисков с данными и установите для slice_async и slice_sync довольно высокие значения (например, 500), а для slice_idle - около 20. Вам также может понадобиться увеличить fifo_expire_async и fifo_expire_sync примерно до 4000 каждый. (Подробнее см. Https://unix.stackexchange.com/a/41831/20336 ).

Идея состоит в том, чтобы позволить каждому процессу получить полный контроль над устройством в течение 0,5 с, чтобы поиск между различными областями диска не занимал все время.

Если вы можете себе это позволить, лучшим выбором будет получить хороший SSD-накопитель, который может хранить ваши данные. Для случайного чтения я бы рекомендовал серию Samsung 860 EVO, потому что 2018 год кажется наилучшим балансом между затратами и производительностью. Если цена не является проблемой, выбирайте самый большой из имеющихся на рынке твердотельных накопителей Intel Optane.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .