Время на процессоре в виртуальной машине сильно возрастает - PullRequest
0 голосов
/ 22 марта 2019

У меня есть программа на C ++, работающая с 20 потоками (бустерными потоками) в одной из систем RHEL6.5, виртуализированных на сервере dell.Результат является детерминированным, но время процессора и время стены сильно различаются в разных прогонах.Иногда процесс занимает 200 с, а иногда может потребоваться до 300 с.Это беспокоит меня, так как производительность является критерием для нашего тестирования.

Я изменил первоначально используемый boost :: timer :: cpu_timer для калькуляции времени wall / cpu и использую sys apis 'clock_gettime' и 'getrusage'.Это не помогает.

Это из-за «времени кражи» гипервизором (Vmware)?Включено ли время кражи во время пользователя / sys, собранное командой 'getrusage'?

Кто-нибудь знает об этом?Большое спасибо.

1 Ответ

0 голосов
/ 22 марта 2019

Было бы полезно, если бы вы предоставили дополнительную информацию. Например, ваши темы зависят? значит, есть ли синхронизация между ними?

Поскольку вы используете виртуальную машину, как ваш ЦП используется совместно с другими пользователями сервера. Может случиться так, что даже одно и то же ядро ​​ЦП совместно используется, поэтому не каждый раз, когда у вас одинаковое распределение ресурсов ЦП (это время кражи, о котором вы упоминали выше).

Также вы упоминаете, что процессорное время отличается: это время, потраченное в пользовательском коде. Если у вас есть синхронизация между потоками (например, мьютекс и т. Д.), То в зависимости от того, как операционная система пробуждает потоки и т. Д., Время может меняться.

...