Dlaczego obecna częstotliwość CPU jest tylko do odczytu dla roota?

3

Mam program, który zapewnia testy porównawcze, ale jego system operacyjny jest niezależny i nie wie, jak odczytać częstotliwości procesora. Program testowy jest sterowany przez skrypt. Jeśli podam częstotliwość procesora, program może obliczyć przepustowość operacji.

Myślałem, że podam bieżącą częstotliwość procesora (dla najdokładniejszego odczytu), ale wygląda na to, że wartość ta jest tylko do odczytu dla roota i nie ma dostępu dla innych:

$ 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

Jak ls -lpokazuje, cpuinfo_cur_freqjest to jedyny obiekt z tą konkretną listą ACL. Pozostałe wpisy to głównie 0444( 0644dla niektórych).

Dlaczego obecna częstotliwość CPU jest tylko do odczytu dla roota i nie ma dostępu dla innych?

jww
źródło
czy plik /sys/devices/system/cpu/cpu0/onlineistnieje? jeśli nie, to twój system nie obsługuje niektórych działań na tym konkretnym rdzeniu (niektóre architektury zależą od procesora, więc nie możesz go przełączyć w tryb offline itp.). zobacz ostrzeżenie o żółtym polu tutaj: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/… . Jeśli uprawnienia są łagodniejsze dla procesora cpu1, jest bardzo prawdopodobne, że problem jest specyficzny dla tego rdzenia.
Frank Thomas
@Frank - wydaje się, że plik nie istnieje: cat: /sys/devices/system/cpu/cpu0/online: No such file or directory.
jww
oznacza to, że rdzeń jest zamknięty, a system nie pozwoli nikomu go zmienić. W przeważającej części pliki w / sys / devices / są zaledwie plikami, w tym sensie, że odczytują dane ze stanu uruchomionego skrzynki, ale ogólnie nie kontrolują ich.
Frank Thomas
Nadal masz problem? Widzę to w stabilnej wersji Debiana (stretch), ale sudo chmod a+rzmiany uprawnień są w porządku. Widzimy także, że wartości scaling_cur_freq losowo podskakują dookoła - + 10% lub więcej, podczas gdy cpuinfo_cur_freq & / proc / cpuinfo i cpufreq_info są stałe i najwyraźniej poprawne.
Xen2050

Odpowiedzi:

3

Powinieneś być w stanie czytać

scaling_cur_freq

Aby odpowiedzieć na pytanie:

Wydaje się, że czytanie

cpuinfo_cur_freq

komunikuje się bezpośrednio ze sprzętem lub - w zależności od implementacji - oprogramowaniem układowym, które oczywiście nie powinno być zabronione.

Źródło

Hydranix
źródło
Dzięki @Hydranix. Komputer, na którym testuję, ma EFI, a nie BIOS. Inne maszyny, na których często testuję, to gadżety IoT, takie jak BananaPi i BeagleBone. Niektóre z nich dają nieprawidłowe wyniki scaling_cur_freq. Na przykład mój LeMaker HiKey (ARM64), z dwoma Cortex-A53 (osiem rdzeni) pracującymi z częstotliwością 1,2 GHz, wytwarza wartość 432000. A mój BananaPi Pro z Cortext-A7 działającym z częstotliwością 1 GHz wytwarza wartość 600000.
jww
@jww: Nie ma znaczenia, czy jest to BIOS, EFI czy OFW. Chodzi o to, że wartość jest uzyskiwana z oprogramowania układowego, a nie skonfigurowana do wysyłania do oprogramowania układowego.
grawity
Edytowane w celu ograniczenia błędnych interpretacji.
Hydranix
Jeszcze raz dziękuję @Hydranix. Próba użycia wartości skalowania daje straszne wyniki. Są całkowicie odłączone od reklamowanej prędkości procesora, pod którą sprzedawane są te procesory. Nawet scaling_max_freqnie ma sensu. Co gorsza, nie ma strony podręcznika dla cpuinfolub cpufreq, więc nie jestem pewien, w jaki sposób należy użyć tej wartości. Całe moje wyszukiwanie prowadzi do „po prostu zrób X i użyj współczynnika skalowania” (a współczynnik skalowania nie jest wyjaśniony).
jww