Intel i7-1065G7 не достигает максимальной частоты Turbo Boost
У меня ноутбук с процессором 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
но не думаю, что это должно быть причиной.
Ответы
Вы написали...
Когда я кидаю большую однопоточную нагрузку
Если ваша программа однопоточная, ей не нужно переходить на максимальную частоту в других потоках, поэтому это не так.
Ваша ссылка предназначена для процессора 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 секунд и более могут дать более значимые данные.
Я испытал нечто подобное при аналогичной настройке (процессор 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; done
0-1
0-7
[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html