Переменное время выполнения того же кода Bash - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь проверить, сколько разных изображений выходит в папку, содержащую изображения, которые могут быть одинаковыми, но с разными именами.Для этого я использую их суммы md5, чтобы увидеть, совпадают ли два изображения.

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

Я прочитал этот действительно хороший пост команды времени, но не нашел никакого вывода.

$ time md5 -q * | sort | uniq | wc -l
    1184

real    1m7.923s
user    0m1.408s
sys     0m0.796s

$ time md5 -q * | sort | uniq | wc -l
    1184

real    0m11.220s
user    0m1.345s
sys     0m0.686s

$ time md5 -q * | sort | uniq | wc -l
    1184

real    0m9.011s
user    0m1.321s
sys     0m0.595s

$ time md5 -q * | sort | uniq | wc -l
    1184

real    0m1.644s
user    0m1.257s
sys     0m0.386s

$ time md5 -q * | sort | uniq | wc -l
    1184

real    0m2.213s
user    0m1.267s
sys     0m0.408s

$ time md5 -q * | sort | uniq | wc -l
    1184

real    0m1.541s
user    0m1.253s
sys     0m0.380s

$ time md5 -q * | sort -u | wc -l
    1184

real    0m1.551s
user    0m1.253s
sys     0m0.387s

$ time md5 -q * | sort -u | wc -l
    1184

real    0m1.553s
user    0m1.255s
sys     0m0.388s

# Here I waited for 5 minutes.

$ time md5 -q * | sort -u | wc -l
    1184

real    0m12.028s
user    0m1.352s
sys     0m0.720s

Является ли изменчивость в реальном времени из-за приоритета выполнения?Должен ли я просто учитывать время пользователя?Что ж, ждать одну минуту (в реальном времени) задания, которое можно выполнить всего за одну секунду, действительно раздражает ...

К вашему сведению: я выполняю предыдущий код на компьютере MacOS High Sierra.

1 Ответ

0 голосов
/ 26 апреля 2018

Что происходит при первом вводе команды, так это то, что все файлы должны быть прочитаны с диска в вашу память.Следовательно, вы видите, что затраченное время пользовательского режима приблизительно равно всем другим прогонам, потому что здесь ваши суммы MD5 рассчитываются, а время системного режима немного больше, чем в других прогонах, потому что здесь ваш доступ к диску обрабатывается.Тем не менее, благодаря DMA ваша система тратит большую часть времени, необходимого для чтения материала с диска и выполнения других полезных задач.Таким образом, реальное время намного выше, чем пользовательское и системное время при первом запуске.

Как уже указывалось в различных комментариях, последующие запуски могут выполняться гораздо быстрее, поскольку большая часть необходимых данных ужев оперативной памяти, поэтому вы проводите меньше времени в системном режиме, отправляя вызовы на ваш диск, а также вынуждены ждать намного короче, потому что ваш диск больше не вызывается.Тем не менее, вычисление хэш-суммы занимает то же время, что и обычно, поскольку на него не влияют другие факторы, и поэтому вы видите довольно похожее значение времени пользовательского режима.Таким образом, в целом значение реального времени приближается к сумме значений времени пользователя и системы.

Теперь, к колебаниям в ваших последующих вызовах: распараллеливание - ложь, по крайней мере, в большинстве случаев.Ваш компьютер делает гораздо больше, казалось бы, «параллельно», чем он мог бы по-настоящему параллельно, используя несколько доступных физических ядер.Вместо этого он очень быстро переключается между всеми задачами, которые ему приходится выполнять, и всегда выполняет лишь небольшую часть работы, поэтому у пользователя создается впечатление, что все работает параллельно.Тем не менее, между и во время последующих вызовов вашего скрипта ваш компьютер мог делать разные вещи, которые также используют ресурсы вашей системы.Это может привести к тому, что части ваших кэшированных данных будут выгружены, поэтому их придется снова загружать с диска для следующего вызова, но только частично.Это мультиплексирование всех выполняемых заданий - это то, что вызывает те колебания в секунду, которые трудно объяснить.Это просто все помехи со всем остальным, работающим «параллельно».

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

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