Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
24.07.2021, 22:45:54

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 25776
  • Letzte: joba48
Statistiken
  • Beiträge insgesamt: 746690
  • Themen insgesamt: 60054
  • Heute online: 375
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  CPU-Takt anzeigen - bitte prüfen  (Gelesen 533 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

CPU-Takt anzeigen - bitte prüfen
« am: 31.10.2020, 18:09:14 »
Hallo,

ich möchte für Mint 18/20, x64, xfce/Cinnamon ein Bashskript erstellen, mit dem ich mir die Taktraten der einzelnen CPU-Kerne anzeigen lassen kann.
Ich kenne zwar stümperhaft Batchskripte für Windows, aber mit Bash hatte ich praktisch noch gar nichts zu tun.
Kann sich das hier mal jemand ansehen und darauf prüfen, ob schwere Fehler enthalten sind, die zu Problemen führen könnten?


#!/bin/bash
#
# 31.10.2020
# Skript zeigt die CPU-Taktraten an bis ein Zeichen eingegeben wird
#
# Escape-Sequenzen aus:
# https://www.linux-community.de/ausgaben/linuxuser/2007/09/bash-prompt-konfigurieren/2/
#

declare -i Anzahl    # $Anzahl wird als Integer deklariert
Anzahl=0

for i in {0..31} ; do
    FILE=/sys/devices/system/cpu/cpu$i
    # echo $i
    if [ -d $FILE ]; then ((Anzahl+=1)); fi
done

echo "Es wurden $Anzahl CPU-Kerne erkannt"

declare -i i        # i ist integer
n=0

Tastatureingabe=""
while [[ "$Tastatureingabe" == "" ]]
do
#    echo $Tastatureingabe
    #for n in {0..11} ; do
    n=$(($n+1))
    echo
    echo "Messwert:   $n"
    i=0
    while [ $i -lt $Anzahl ]
    do
        echo "CPU$i:  "
        echo "                  "   #Zeile lschen
        echo -en '\e[1A'
        cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq
        i=$(($i+1))
    done
    rowup=0
    while [[ $rowup -lt $Anzahl ]]
    do
        rowup=$(($rowup+1))
        echo -en '\e[2A'        # Cursor 2 Zeilen nach oben pro Kern
    done
    echo -en '\e[2A'        # Cursor 2 Zeilen nach oben
    read -n 1 -s -t 1 Tastatureingabe
done
   
echo -en '\e[33B'        # Cursor ganz nach unten
echo



EDIT: Habe die Ausgabe angepasst, weil das zuvor nur starr mit einem 2-Kerner funktionierte
« Letzte Änderung: 31.10.2020, 18:57:30 von Gurkengräber »

Re: CPU-Takt anzeigen - bitte prüfen
« Antwort #1 am: 31.10.2020, 19:25:09 »
Gibt es doch schon fertig fürs Panel.

https://docs.xfce.org/panel-plugins/xfce4-cpugraph-plugin

Re: CPU-Takt anzeigen - bitte prüfen
« Antwort #2 am: 31.10.2020, 21:45:47 »
Ich hätte dazu einen kompakten Einzeiler (sortiert von höchster Takrate bis zur niedrigsten):

watch -n1 "cat /proc/cpuinfo | sort -r | grep \"^[c]pu MHz\""

Re: CPU-Takt anzeigen - bitte prüfen
« Antwort #3 am: 01.11.2020, 15:31:01 »
Gibt es doch schon fertig fürs Panel.
https://docs.xfce.org/panel-plugins/xfce4-cpugraph-plugin

Das Ding sieht zwar auch nett aus, aber soweit ich die Beschreibung verstehe, zeigt es die CPU-Auslastung, bzw. die Auslastung der Kerne an und nicht die Taktraten, mit denen diese betrieben werden.

Der Anlass für mein Skript war ein Problem beim Transcoden von HD-Material, bei dem ein Plugin nicht Multithreading fähig ist und so für eine insgesamt geringe Auslastung der CPU sorgt, sodass diese nur im niedrigsten P-State betrieben wird, was die Transcodierung weiter stark verlangsamt.
Um das zu umschiffen hatte ich bisher Prime95 auf einem Kern laufen lassen, sodass die CPU hochgetaktet wurde. Gefallen hat mir dieser unnötige Energiedurchsatz natürlich nicht. Als ich dann gesehen habe, dass man sehr leicht den Gouverneur so setzen kann, dass die CPU permanent mit maximalem Takt läuft, habe ich mir dafür ein Skript erstellt. Danach dachte ich, wäre es sehr einfach, auch den Takt auslesen zu können. Das ist auch nicht schwer, nur habe ich sehr viel Zeit gebraucht, um mit der Syntax von Bash grob klar zu kommen, da ich hier viel über (Bruch-)Teilwissen und Trial und Error mache.
Unter xfce 18.3 habe ich ein Plugin (afair CPU-Monitor), welches mir den Takt anzeigt. Wenn ich damit aber den Gouverneur verstellen möchte, was es mir anbietet, passiert nichts. Mit meinem Skript geht es. Ich vermute, dass es beim Plugin an fehlenden Berechtigungen liegt, werde aber nicht nach solchen gefragt.

Würde/sollte das xfce4-cpugraph-plugin auch unter Cinnamon laufen?
Auf dem Testrechner mit Cinnamon 18.3 habe ich schon lange das Problem, dass ich gar kein Plugin installieren kann. Wenn ich eines aktiviere/installiere, erscheint es nicht im Panel. Wenn ich nach anderen im Netz suchen möchte, bricht die Suche ab. Mit Cinnamon 18.3 möchte ich aber auch keine Zeit mehr verlieren, da ich ohnehin wechseln muss, da z.B.Opera kein Updates mehr für Mint18 liefert.



Ich hätte dazu einen kompakten Einzeiler (sortiert von höchster Takrate bis zur niedrigsten):

watch -n1 "cat /proc/cpuinfo | sort -r | grep \"^[c]pu MHz\""

Einzeiler klingt gut und das funktioniert sogar :) D.h., nach der Taktrate sortiert wird das hier nicht angezeigt, aber das fände ich auch gar nicht gut.
Mich stört eher, dass die Werte nicht rechtsbündig angezeigt werden und dadurch seitlich wandern. Dadurch ist das Betrachten anstrengend - auch bei meinen Versionen. Für "echo" habe ich keine Lösung gefunden und "printf" wollte ich dann nicht auch noch ausprobieren, zumal ich nicht weiß, wie sehr es die CPU belastet und ob das weitere Inkompatibilitäten zu anderen Shells erzeugt.


Gestern Abend dachte ich noch, dass es nicht schlecht sei, wenn die Werte in MHz und in einer Zeile angezeigt werden würden.

Das ist dann daraus geworden:

#!/bin/bash
#
# 31.10.2020
# Skript zeigt die CPU-Taktraten in einer Zeile in MHz an.
#
# Escape-Sequenzen aus:
# https://www.linux-community.de/ausgaben/linuxuser/2007/09/bash-prompt-konfigurieren/2/


declare -i Anzahl    # $Anzahl wird als Integer deklariert
Anzahl=0

for i in {0..31} ; do
    FILE=/sys/devices/system/cpu/cpu$i
    # echo $i
    if [ -d $FILE ]; then ((Anzahl+=1)); fi
done

echo "Es wurden $Anzahl CPU-Kerne erkannt"

declare -i i        # i ist integer
n=0

# if [ $i -lt $Anzahl ]; then echo "OK"; fi


Tastatureingabe=""
while [[ "$Tastatureingabe" == "" ]]
do
    n=$(($n+1))
    echo
    echo "Messwert:   $n"
    i=0
    declare -a freq
    freq=()
    echo
    while [ $i -lt $Anzahl ]
    do
        freq+=($(< /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq))
        freq[$i]=$((${freq[$i]}/1000))
        i=$(($i+1))
    done

    ############## Ausgabe
    echo "                                                                    "   #Zeile löschen
    echo -en '\e[1A'    # Zeile nach oben
    echo ${freq[@]}     # ganzes Array ausgeben
    echo -en '\e[4A'    # 3 Zeilen nach oben
    read -n 1 -s -t 1 Tastatureingabe
done
   
echo -en '\e[33B'        # Cursor 6 Zeilen nach unten
echo



Falls es jemand gebrauchen kann, ist hier das Ding, um den Gouverneur auf "perfomance" zu stellen:

#!/bin/bash
#
# Skript setzt die CPU in den "Performance-Modus"
# sodass diese permanent mit maximalem Takt arbeitet
# (nützlich bei z.B. Videobearbeitung, wenn ein Modul nur einen Kern auslasten kann)
#

for i in {0..31} ; do
    echo "Schleife läuft: $i"
    FILE=/sys/devices/system/cpu/cpu$i
    if [ -d $FILE ]; then
        echo "Das Verzeichnis $FILE existiert";
        echo "Setze CPU$i auf "performance" "
        echo performance | sudo tee /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
    fi
done

Bevor es jemand erwähnt: Ich versuche schon seit vielen Jahren Umlaute zu verhindern.




Re: CPU-Takt anzeigen - bitte prüfen
« Antwort #4 am: 01.11.2020, 15:59:41 »
watch -n1 "cat /proc/cpuinfo | sort -r | grep \"^[c]pu MHz\""

Every 5,0s: cat /proc/cpuinfo | sort...  lithium-t450s: Sun Nov  1 15:56:34 2020

cpu MHz         : 924.448
cpu MHz         : 912.298
cpu MHz         : 847.675
cpu MHz         : 808.648
Sieht doch gut aus! (5 s zum Kopieren eingestellt)
Im Verhältnis zum Aufwand.
Die CPU zuckt dafür nicht mal.
« Letzte Änderung: 01.11.2020, 16:07:01 von aexe »