Есть ли какая-то скорость, чтобы выиграть при параллельной загрузке нескольких файлов с диска? - PullRequest
0 голосов
/ 01 мая 2018

Я работаю над проектом (написанным на python 2.7), в котором я обрабатываю несколько 1000 изображений, каждое размером около 2,7 МБ. В настоящее время рабочий процесс выглядит следующим образом:

  • 1 процесс загружает образы с диска последовательно в multiprocessing.Manager().Queue()
  • N процессы используют изображения из очереди для предварительной обработки и сохраняют результаты во второй очереди
  • 1 процесс берет изображения из второй очереди и сохраняет их на диск (файлы меньшего размера, на самом деле не проблема)

Пока это работает довольно хорошо, и я могу порождать достаточно процессов предварительной обработки, так что загрузка с диска становится узким местом.

Для развлечения и изучения я экспериментировал с использованием 2 процессов, каждый из которых загружал половину файлов с диска и помещал их в одну и ту же очередь. Я хотел посмотреть, даст ли это мне еще более быстрое время загрузки с диска.
Тем не менее, из-за моей установки (жесткие диски с ZFS и различными уровнями кэширования) результаты этой «оптимизации» неубедительны и могут сильно различаться даже между двумя одинаковыми прогонами. Числа вроде предполагают, что параллельная загрузка происходит намного быстрее, но из-за всего происходящего кеширования я потерял доверие к временам (значения от 55 до 7 и все между ними происходили. ..).
Кроме того, я пока тестирую систему Linux, но на производственном компьютере установлена ​​Windows с SSD. Поэтому, какие бы результаты я ни получал при тестировании, они могут зависеть от ОС и не применяться к конечному варианту использования.

Мой вопрос: есть ли согласованная выгода в параллельной загрузке нескольких файлов? Или достаточно того, чтобы один процесс загружал все файлы последовательно, поскольку он будет считываться с той скоростью, на которую позволяет жесткий диск? Я не обязательно ищу ответы, специфичные для python, но для файлового ввода-вывода в целом.
Есть ли важные различия между Linux и Windows?


Отказ от ответственности:
Я знаю, что это можно решить путем чрезмерного бенчмаркинга на целевой машине Тем не менее, для комплексного теста на этом этапе потребовалось бы много переписывания кода и больше времени доступа (и, возможно, перезагрузки для очистки кэшей файловой системы) на целевом компьютере, чем у меня сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...