Почему текущая частота процессора доступна только для root?

751
jww

У меня есть программа, которая предоставляет тесты, но она независима от ОС и не умеет читать частоты процессора. Тестовая программа запускается через скрипт. Если я укажу частоту процессора, то программа сможет рассчитать пропускную способность операций.

Я думал, что предоставлю текущую частоту процессора (для наиболее точного чтения), но, похоже, значение доступно только для чтения для root и не имеет доступа для других:

$ ls -Al /sys/devices/system/cpu/cpu0/cpufreq/ total 0 -r--r--r-- 1 root root 4096 Jan 27 23:19 affected_cpus -r-------- 1 root root 4096 Jan 27 23:19 cpuinfo_cur_freq -r--r--r-- 1 root root 4096 Jan 27 23:19 cpuinfo_max_freq -r--r--r-- 1 root root 4096 Jan 27 23:19 cpuinfo_min_freq ... -rw-r--r-- 1 root root 4096 Jan 27 23:19 scaling_max_freq -rw-r--r-- 1 root root 4096 Jan 27 23:19 scaling_min_freq -rw-r--r-- 1 root root 4096 Jan 27 23:19 scaling_setspeed 

Как ls -lвидно, cpuinfo_cur_freqэто единственный объект с этим конкретным ACL. Другие записи в основном 0444( 0644для некоторых).

Почему текущая частота процессора доступна только для чтения для root, а для других нет доступа?

1
существует файл `/ sys / devices / system / cpu / cpu0 / online`? если нет, то ваша система не поддерживает определенные действия на этом конкретном ядре (некоторые архитектуры имеют зависимости от cpu0, поэтому вы не можете перевести его в автономный режим и т. д.). см. предупреждение в желтой рамке здесь: http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/#more-3555. Если разрешения на процессоре cpu1 более снисходительны, то вполне вероятно, что проблема связана с этим ядром. Frank Thomas 8 лет назад 0
@Frank - кажется, что файл не существует: *** `cat: / sys / devices / system / cpu / cpu0 / online: такого файла или каталога нет ***. jww 8 лет назад 0
тогда это означает, что ядро ​​заблокировано, и система не позволит никому изменить его. По большей части файлы в / sys / devices / являются всего лишь файлами, так как они читают данные из запущенного состояния коробки, но обычно не контролируют их. Frank Thomas 8 лет назад 0

1 ответ на вопрос

1
Hydranix

Вы должны быть в состоянии прочитать

scaling_cur_freq 

Чтобы ответить на вопрос:

Кажется, что чтение

cpuinfo_cur_freq 

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

Источник

Спасибо @Hydranix. Машина, на которой я тестирую, имеет EFI, а не BIOS. Другие машины, на которых я часто тестирую, - это IoT-устройства, такие как BananaPi и BeagleBone. Некоторые из них дают неверные результаты с *** `scaling_cur_freq` ***. Например, мой [LeMaker HiKey] (http://www.amazon.com/dp/B019O3QTSA) (ARM64) с двумя Cortex-A53 (восемь ядер), работающими на частоте 1,2 ГГц, выдает значение *** ` 432000` ***. А мой [BananaPi Pro] (http://www.amazon.com/dp/B00RD86QPA) с Cortext-A7, работающим на частоте 1 ГГц, выдает значение *** `600000` ***. jww 8 лет назад 0
@jww: не имеет значения, если это BIOS, EFI или OFW. Суть в том, что значение _обнаружено из_ прошивки, а не настроено для отправки в прошивку. grawity 8 лет назад 0
Отредактировано, чтобы уменьшить неправильное толкование. Hydranix 8 лет назад 0
Еще раз спасибо @Hydranix. Попытка использовать значение масштабирования приводит к ужасным результатам. Они полностью отключены от заявленной скорости процессора, под которой продаются эти процессоры. Даже *** `scaling_max_freq` *** не имеет смысла. Что еще хуже, нет справочной страницы для *** `cpuinfo` *** или ***` cpufreq` ***, поэтому я не уверен, как предполагается использовать это значение. Все мои поиски ведут к тому, что «просто делай X и используй коэффициент масштабирования» (и коэффициент масштабирования не объясняется). jww 8 лет назад 0
cpufreq - https://www.kernel.org/doc/Documentation/cpu-freq/ Hydranix 8 лет назад 0

Похожие вопросы