LINUX.ORG.RU

GCC как прочитать и задать частоту ЦПУ?

 ,


1

2

Так чтоб без отличий по архитектуре и желательно ядер (хотя бы в пределах ветки) на ubuntu/debian

Так понимаю надо что надо в каких то файлах здесь читать-писать?

/sys/devices/system/cpu

или еще лучше governor=ondemand менять с ondemand на турбабуст

★★★

Последнее исправление: wolverin (всего исправлений: 1)

Вобщем, ты совершенно не прав в постановке вопроса.

Во-первых, «написать на gcc» невозможно, gcc это не язык, это компилятор. Компилировать он может разные языки. Скорее всего ты имел ввиду Си, надо было так и писать.

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

А теперь ответ.

Я открыл яндекс, ввёл туда «linux cpufreq» и на первом же месте появилась ссылка https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html

По ссылке видим:

Есть директории /sys/devices/system/cpu/cpufreq/policyX, где X - номер ядра (у меня от 0 до 3).

В них есть куча файлов, среди них есть scaling_governor - сюда можно записать название governor-а, который ты хочешь включить.

Если ты выбрать governor с названием «userspace», то в файл «scaling_setspeed» можно записать частоту, которую хочешь включить вручную, остальные governor-ы выбирают частоту автоматически.

Из cpuinfo_cur_freq можно прочитать выбранную частоту, хоть установленную вручную, хоть автоматически.

firkax ★★★★★
()
Ответ на: комментарий от firkax

ну вот я и спросил в каком направлении двигаться, читать-писать из файлов или есть более кошерный способ, например, подключить такую приблуду https://github.com/torvalds/linux/blob/master/arch/x86/kernel/cpu/proc.c

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

Опять ты за своё. GCC - это не язык! На нём нельзя ничего писать. Это утилита для компиляции кода.

Исходники ядра полезны только для компиляции ядра, в обычных прогах они не подойдут.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от wolverin

Потому что ядро работает с ядерными привилегиями и в ядерном адресном пространстве. Обычным программам туда доступ закрыт. Можно только общаться с ядром через api, в данном случае оно сделано в виде файлов в /sys

firkax ★★★★★
()
Ответ на: комментарий от wolverin

Да, под рутом запускаются такие же обычные программы, ядро им даёт больше прав в рамках своего api, но само api при этом остаётся тем же.

спасибо, печально, придется файлы юзать…

Установи FreeBSD, там от файлов для управления системой избавились ещё 20 лет назад, частота меняется через системный вызов sysctl().

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

/sys/devices/system/cpu/cpufreq/policyX

и кстати наличие политики (такого пути с файлами) уапще не обязательно, у меня где то он есть, где то нет, поэтому решение с файлами узкое

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от wolverin

Например какой путь?

поэтому решение с файлами узкое

Это не «решение с файлами», это официальное апи ядра к этому драйверу. Всё остальное, даже если оно где-то есть, в итоге всё равно будет эти файлы использовать внутри.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Там шаблоны-шаблончики кругом. Хром нынче C++17 обмазался, а там с этим сам знаешь как. Поэтому такой дикий жор памяти при сборке. Про boost и говорить нечего. Правда вылетает он на интрисинках avx2, clang, который о них не знает, собирает его на ура.

LongLiveUbuntu ★★★★★
()