Так как я запускаю тесты оценки производительности моей многопоточной программы на (многозадачной) многозадачной среде многозадачности, процесс может периодически меняться. Я хочу вычислить задержку, т.е. Только продолжительность, когда процесс был активным. Это позволит мне экстраполировать, как производительность будет работать в среде, отличной от многозадачности, т.е. Где работает только одна программа (большую часть времени) или на разных рабочих нагрузках.
Обычно измеряются два вида времени:
- Время настенных часов (т.е. время с момента запуска процесса), но это включает время, когда процесс был заменен.
- Время процессора (т.е. суммарное время процессора, используемое всеми потоками), но это не полезно для вычисления латентности процесса.
Я считаю, что мне нужно время от времени отдельных потоков, которое может отличаться от максимального времени процессора, используемого любым потоком из-за структуры зависимостей задачи между потоками. Например, в процессе с двумя потоками поток 1 загружается в первую две трети времени выполнения (для времени процессора t), тогда как поток 2 загружается в более поздние две трети времени выполнения процесса (опять же, для времени процессора t). В этом случае:
- время настенного времени вернет время переключения 3t/2 + + время, используемое другими процессами между ними,
- Максимальное время процессора всех потоков будет возвращать значение, близкое к t, и
- общее время процессора близко к 2t.
- То, что я надеюсь получить в качестве результата измерения, - это makepan, т.е. 3t/2.
Кроме того, многопоточность приносит неопределенность сама по себе. Вероятно, эту проблему можно позаботиться о проведении теста несколько раз и суммировании результатов.
Кроме того, задержка также зависит от того, как ОС планирует потоки; все становится сложнее, если некоторые потоки процесса ждут процессора, а другие работают. Но не забывайте об этом.
Существует ли эффективный способ вычисления/приближения этого времени? Для предоставления примеров кода используйте любой язык программирования, но предпочтительно C или С++ для Linux.
PS: Я понимаю, что это определение makepan отличается от того, что используется в задачах планирования. Определение, используемое в задачах планирования, аналогично времени настенных часов.