Intel i7-1065G7 не достигает максимальной частоты Turbo Boost

Aug 18 2020

У меня ноутбук с процессором Intel i7-1065G7 . turbostatотчеты

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

(это 4 физических / 8 виртуальных ядер) Когда я загружаю большую однопоточную нагрузку (вычисляя пи mpfr) на процессор, я замечаю, что два ядра (может быть, одно физическое ядро?) работают с частотой точно 3500 МГц, в то время как другие имеют более низкую частота. Но они никогда не достигают более высоких частот Turbo Boost.

Если я отключу некоторые из ядер процессора (например, с помощью echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online), ноутбук действительно достигнет соответствующих более высоких частот турбо-ускорения, что приведет к повышению производительности (задача, которая раньше занимала в среднем 18,5 секунд, теперь занимает 16,8).

Как я могу заставить мой новый ноутбук достичь максимальной тактовой частоты, если не все ядра нужны?

Я использую Ubuntu 20.04 с ядром 5.4.0 на ноутбуке HP Envy x360.

Чего жду: на моем старом ноутбуке с i7-4712MQ turbostat дает

30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores

(это тоже машина с 4/8 ядрами). На этой машине одноядерная нагрузка увеличивает частоту одного ядра почти до 3,3 ГГц, при двухъядерной нагрузке две тактовые частоты при 3,2 ГГц и т. Д.

Я не проверял частоту отдельных ЦП в Windows, но диспетчер задач иногда отображает частоты выше 3,7 ГГц.

Обновление: Итак, проблема исчезла ... Понятия не имею, почему. Я удалил, linux-cloud-toolsно не думаю, что это должно быть причиной.

Ответы

H2ONaCl Aug 18 2020 at 08:01

Вы написали...

Когда я кидаю большую однопоточную нагрузку

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

Ваша ссылка предназначена для процессора Intel® Core ™ i7-1065G7.

В документе Intel, который вы связали, говорится, что максимальная частота составляет 3900 МГц. Ваши данные, похоже, показывают, что есть ядро ​​с частотой 3900 МГц, поэтому я не знаю, почему вы думаете, что оно не достигло максимума. Вы разместили это ...

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

В общем, если показание не является максимальной частотой, это связано с тем, что либо оно выполняется только периодически, поэтому измерения будут показывать это только с перерывами, либо нет необходимости в максимальной частоте, потому что есть некоторые ограничения, такие как ввод-вывод. Не беспокойся об этом. Если вы напишете программу, у которой нет ограничений, другими словами, это поток с ограниченными вычислениями, я гарантирую, что он будет работать с максимальной частотой.

Прошедшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хотите использовать для выводов. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.

thesps Sep 28 2020 at 19:04

Я испытал нечто подобное при аналогичной настройке (процессор i7-9700K, Ubuntu 18.04). И я думаю, что использование моей машины может быть аналогичным: это настольный компьютер, который я использую для запуска некоторых интенсивных (но однопоточных) приложений, а также, возможно, с открытым веб-браузером и некоторыми приложениями для обмена сообщениями. Я обнаружил, что предложение в комментариях под исходным сообщением работает - установка сродства ЦП для процессов. Я tasksetделал это раньше [1].

Первый тест (без изменений настроек привязки): все 8 ядер находятся в режиме ожидания при использовании ~ 10%. Я запускаю однопоточную задачу с интенсивным использованием ЦП. Одно ядро ​​подскакивает до 100%, я вижу 3,6 ГГц (максимум без турбо) на всех используемых ядрах i7z.

Второй тест: Ограничить все запущенные процессы в ядра процессора 0 и 1, при этом : . Теперь эти 2 ядра занимают 30-40%, остальные - 0% (хотя некоторые другие ядра могут начать активировать, когда ОС запускает процессы). Затем запустите ту же однопоточную задачу с интенсивным использованием ЦП. Одно ядро ​​подскакивает до 100%, но теперь я вижу, что оно достигает максимальной частоты в турбо 4,9 ГГц. После этого я снова установил привязку, чтобы использовать все ядра, заменив диапазон на.for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done0-10-7

[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html