Проверка выполнения нескольких экземпляров скрипта - PullRequest
0 голосов
/ 12 февраля 2020

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

numactl --physcpubing=0-0 --membind=0 [BENCHMARK CMD] & 
numactl --physcpubing=1-1 --membind=0 [BENCHMARK CMD] & 
#etc
numactl --physcpubing=20-20 --membind=0 [BENCHMARK CMD]

Что я хочу сделать, это запустить этот эксперимент 20 экземпляров несколько раз подряд, чтобы получить среднее значение. Эти сценарии бенчмаркинга имеют некоторую разницу во времени выполнения из-за кэширования (что я хотел бы измерить), поэтому не каждый сценарий завершает работу в одно и то же время. Мне нужно, чтобы все 20 экземпляров закончили работу sh, а затем сценарий оболочки начинает новый эксперимент.

Проблема в том, что до того, как все эти 20 экземпляров закончат работу, сценарий, похоже, вызывает новый эксперимент для запуска поверх старого, поэтому у меня есть несколько старых сценариев, запущенных в Параллельно с некоторыми экземплярами нового скрипта. Это не оптимально, потому что сценарий бенчмаркинга имеет разные стадии, которые используют разные объемы памяти. Я боюсь, что это вносит больше дисперсии и шума в измерения, которых можно избежать. Короче говоря, я хотел бы быть в состоянии убедиться, что все 20 экземпляров первой команды завершили работу, прежде чем я начну новый эксперимент. Как я могу это сделать?

Обновление: Итак, я проделал некоторую работу и написал другой скрипт, который вызывает этот скрипт. Моя идея состоит в том, что если весь этот сравнительный анализ выполняется каким-либо script.py, я могу просто запустить новый скрипт в виде:

for i in range(10):
    cmd = "python script.py && wait"
    subprocess.call(cmd, shell=True)

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

&& wait

гарантировать, что все подпроцессы, порожденные script.py, завершат работу sh до его вызова?

...