Raspberry Pi

feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Ich lese leider gerade erst das es für den RaspberryPi besser wäre Wheezy zu benutzen da sich dadurch die Performance nochmals steigern würde...

Ausserdem gibt es ein speziell angepasstes sog. Raspian Image was nochmals mehr Performance bietet und nochdazu weitaus weniger Speicherplatz verbraucht als die anderen - trotzdem ist es für eine 2GB SD vorgesehen aber resize ist ja bei Wheezy kein Problem ;)
  • A minimal Raspbian Wheezy installation (similar to a netinstall) instead of the outdated Squeeze packages
  • Hard Float binaries: floating point operations are done in hardware instead of software emulation, that means higher performances
  • Disabled incremental updates, means apt-get update is much faster
  • Workaround for a kernel bug which hangs the Raspberry Pi under heavy network/disk loads
  • A custom 3.1.9+ hardfp kernel with latest raspberry pi patches
  • Latest version of the firmwares
  • Lower GPU ram usage (32MB) by default
  • 224MB of ram are available to the system now
  • A very tiny 109MB image: even with a 2GB SD there is a lot of free space
  • ssh starts by default
  • The clock is automatically updated using ntp
  • IPv6 support
  • Just 7MB of ram usage after the boot
Mehr dazu steht hier: http://www.linuxsystems.it/2012/06/rasp ... mal-image/
Und hier: http://www.raspberrypi.org/archives/1605
Und auch hier: http://elinux.org/RPi_Distributions

Sobald ich Zeit habe (leider is Urlaub vorbei) werd ich mir das genauer angucken..

/EDIT: offensichtlich fehlt bei dem Image die Desktop Umgebung weswegen nach dem flashen ca 1.1GB frei (430MB used) sind aber leider fehlt auch das "raspi-config" Script also muss man es wie ich hier für Squeeze beschrieben hatte über die Console resizen - leider wieder mit manuellem Einrichten und kompilieren :(
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Hier ein paar Benchmark Werte: armel (Debian) Vs. armhf (Raspbian)
rpi-benchmarks.jpg
rpi-benchmarks.jpg (69.47 KiB) 2056 mal betrachtet
Durchschnittlich ist Raspbian 20% schneller

Details auf: http://www.memetic.org/raspbian-benchma ... -vs-armhf/
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Eine weitere Nettigkeit wäre BerryBoot mit dessen hilfe man verschiedene Linux's von einer SD booten kann. So kann man zum beispiel Debian Squeeze, Debian Wheezy und Raspbian auf einer 8GB SD benutzen ;)

Eine Besonderheit ist allerdings das alle Daten auf der SD verloren gehen und die Himbeere muss dafür online sein!
Um BerryBoot zu nutzen muss man die SD zunächst mit FAT32 formatieren (die boot partition reicht), das berryboot.zip darauf entpacken und den Raspberry damit starten.. Beim ersten Start wird die SD dann von BerryBoot komplett neu formatiert und ein Auswahlmenü anzeigt über das man auswählen kann welches Linux man aus dem Internet herrunterladen und installieren möchte..

Wenn das erst mal erledigt ist kann man problemlos andere Images zur SD hinzufügen.. Wie das geht wird auf der Seite beschrieben
(muss ich auch erst selber noch ausprobieren)

Mehr dazu hier: http://www.berryterminal.com/doku.php/berryboot
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Auf anfrage hier noch mal eine kurze Zusammenfassung die SD Karte für den Raspberry vorzubereiten:

unter Windows:
  • Das Image unter: http://www.raspberrypi.org/downloads downloaden
  • Den Win32 DiskImager unter: https://launchpad.net/win32-image-writer downloaden
  • Das Image entpacken
  • SD-Karte in einen Kartenleser einlegen
  • Win32 DiskImager starten
  • Die SD-Karte und das Image im DiskImager auswählen
  • Auf "Write" klicken (VORSICHT: Alle Daten auf der Karte werden gelöscht)
  • Sobald der Schreibvorgang abgeschlossen wurde auf "OK" klicken
  • DiskImager schließen
  • SD-Karte in das Raspberry Pi einlegen

unter MacOS:
  • Das Image unter: http://www.raspberrypi.org/downloads downloaden
  • Das Image entpacken
  • Terminal öffnen und "ls /dev" eingeben
  • SD-Karte in einen Kartenleser einlegen
  • Im Terminal wieder "ls /dev" eingeben. Im Vergleich zum vorherigen "ls /dev" sollte jetzt eine Device namens "sd*" (z.B. "sdb", "sdc" usw.) hinzugekommen sein. Sollten mehrere Devices hinzugekommen sein, die Karte wieder entfernen und ab Schritt 3 wiederholen.
  • Im Terminal eingeben: "sudo dd if=/home/benutzername/Downloads/Pfad/Zum/Image.img of=/dev/sd*". Der Pfad nach "if=" und das "sd*" nach "of=/dev/" müssen natürlich angepasst werden! (VORSICHT: Alle Daten auf der Karte werden gelöscht)
  • Warten bis der Befehl abgeschlossen ist
  • SD-Karte in den Raspberry Pi einlegen
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Raspberry LXDE Desktop auch ohne Monitor nutzen (vnc)

Wer nur einen Monitor hat oder nicht ständig umschalten möchte wenn er mal auf der Himbeere etwas ändern/ausprobieren möchte kann sich auch einfach den tightvncserver auf der Himbeere installieren und mit dem VNC-Viewer verbinden.. (Desktop Umgebung LXDE natürlich vorrausgesetzt)


Also zunächst die benötigten Pakete auf dem RPI installieren:
apt-get install tightvncserver

Dann brauchen wir noch die Konfigurations Datei:
gunzip /usr/share/doc/tightvncserver/examples/vnc.conf.gz
cp /usr/share/doc/tightvncserver/examples/vnc.conf /etc/


Und bearbeiten diese...:
nano /etc/vnc.conf
Dort suchen wir nun nach dem folgenden Eintrag und kommentiern in ein (vorrangestelltes # entfernen)

Code: Alles auswählen

# $vncStartup points to a script that will be started at the very beginning.
$vncStartup = "/etc/X11/Xsession";

Dann setzen wir ein allgemeines Password was man zum Connecten über VNC eingeben muss:
vncpasswd

Jetzt brauchen wir noch ein Startup Script sodass tightvncserver auch beim booten gestartet wird:
nano /etc/init.d/vncserver

Code: Alles auswählen

#! /bin/sh
### BEGIN INIT INFO
# Provides:          tightvncserver
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop tightvncserver
### END INIT INFO

# Check for missing binaries
FOO_BIN=/usr/bin/tightvncserver
test -x $FOO_BIN || exit 5

# User, unter dem der VNC-Server ausgefuehrt wird
VNC_USER="root"
export VNC_USER

# Set HOME of User
HOME="/root"
export HOME

# Set ID for Connections
FOO_ID=0

case "$1" in
    start)
        echo -n "Starting Vnc-Server with Terminal-ID $FOO_ID "

        # Delete old PIDs
        rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.pid

        if [ -e $HOME/.vnc/$HOSTNAME:$FOO_ID.log ]; then
           cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1
           rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log
        fi

        sudo -u $VNC_USER -H $FOO_BIN :$FOO_ID 2>&1
        ;;
     stop)
        echo -n "Shutting down Vnc-Server "
        $FOO_BIN -kill :$FOO_ID 2>&1

        cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1
        rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log

        ;;
     restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
VNC_USER und HOME könnt ihr auch auf "pi" und "/home/pi" ändern wenn ihr wollt..

Die Datei ausführbar machen und in die Bootroutine aufnehmen:
chmod 0755 /etc/init.d/vncserver
update-rc.d vncserver defaults


..Und den Dienst halt noch starten damit man sich verbinden kann:
/etc/init.d/vncserver start

Den VNC-Viewer könnt ihr auf folgender Seite herrunter laden: (Windows oder Mac)
http://www.realvnc.com/download/viewer/
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Bei dem aktuellen Raspbian Image vom 18.09.2012 gibt es 4 nennenswerte Neuerungen:
  • Der RAM Split lässt sich nun auch auf 240 / 16 MB einstellen also 240MB fürs System und 16MB für die GPU
  • Die USB Performance hat sich um 10% gesteigert
  • Der Hersteller hat eine Overclock Funktion umgesetzt mit der sich der Raspberry auf bis zu 1Ghz übertakten lässt wobei er sich automatisch herrunter taktet wenn die CPU Auslastung ebenfals abnimmt (oder der SoC 85° heiss wird)
  • Durch die Overclock Funktion ist es nun auch möglich die Temperatur des SoC's auszulesen
Um die aktuelle SoC Temperatur auszulesen gibt es 2 Möglichkeiten:
1)

Code: Alles auswählen

cat /sys/class/thermal/thermal_zone0/temp
2)

Code: Alles auswählen

/opt/vc/bin/vcgencmd measure_temp
Um die aktuelle Frequenz (Taktung) auszulesen (Ausgabe in kHz):

Code: Alles auswählen

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

Übertaktungs Modies:
  • None: 700MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt
  • Modest: 800MHz ARM, 300MHz core, 400MHz SDRAM, 0 overvolt
  • Medium: 900MHz ARM, 333MHz core, 450MHz SDRAM, 2 overvolt
  • High: 950MHz ARM, 450MHz core, 450MHz SDRAM, 6 overvolt
  • Turbo: 1000MHz ARM, 500MHz core, 500MHz SDRAM, 6 overvolt
"6 overvolt" bedeutet: 1.35V
Mit dem Turbomodus wurde der Cpufreq-Treiber im Debian-basierten Wheezy Raspian so angepasst, dass er dynamisch die Taktfrequenz und die Spannung einstellt. Damit kann der Prozessor des Raspberry Pi mit bis zu 1 GHz laufen.

Die mögliche Taktrate sei von Platine zu Platine verschieden, schreibt das Raspberry-Pi-Team.
Außerdem hängt sie von der Stromleistung ab. Sie muss mindestens 700 mA bei 5 Volt liefern. Maximal nimmt die Platine 1.200 mA auf.

Sollte sich die Taktrate als zu hoch erweisen, kann bei erneutem Hochfahren die Shift-Taste gedrückt werden, um die Übertaktung außer Kraft zu setzen.

Sollte die Temperatur der CPU während des Betriebs 85 Grad Celsius übersteigen, regelt Cpufreq die Taktrate automatisch herunter.
Mit zwei neuen Widgets im LXDE-Desktop des Raspian-Images lassen sich Temperatur und Taktrate überwachen.

Laut Benchmarks auf der Webseite des Projekts, die mit Nbench erstellt wurden, läuft das Raspberry Pi bei GHz fast um die Hälfte schneller wie mit der Taktrate von 700 MHz. Die Messungen wurden bei den Integer- und Floating-Point-Berechnungen gemacht. Außerdem sollen die Speicherzugriffe ebenfalls doppelt so schnell sein.

Die Entwickler haben der Debian-Variante für das Raspberry Pi die Anwendung "Wifi-Config" für Lxde hinzugefügt. Zuvor mussten Werkzeuge für erkannte WLAN-Chips nachinstalliert werden. Ein Fix für den USB-Treiber soll dessen Interrupt-Rate gesenkt und damit die Leistung des USB-Chips um 10 Prozent erhöht haben. Die Qualität von analogem Ton soll ebenfalls verbessert worden sein.
Wer keine dynamische Anpassung der MHz sowie Voltage möchte kann das über die config.txt auch fest einstellen:

Code: Alles auswählen

force_turbo=0
enables dynamic clocks and voltage for the ARM core, GPU core and SDRAM. When busy, ARM frequency go up to "arm_freq" and down to "arm_freq_min" on idle. "core_freq", "sdram_freq" and "over_voltage" behave the same. "over_voltage" is limited to 6 (1.35V). Non default values for the h264/v3d/isp parts are ignored.

Code: Alles auswählen

force_turbo=1
disables dynamic clocking, so all frequencies and voltages stay high. Overclocking of h264/v3d/isp GPU parts is allowed as well as setting "over_voltage" to 8 (1.4V).

Siehe dazu: http://elinux.org/RPi_config.txt#Overcl ... figuration


Ein sogenannter Stresstest, welcher sämtliche Hardwarekomponenten zur Höchstleistung bringt, kann sehr nützlich bei der Problemfindung von Abstürzen oder ähnlichen Problemen sein. Unter Linux gibt es ein sehr gutes Tool, mit dem man den PC auf Herz und Nieren testen kann.

Das Programm “Stress” testet CPU, RAM, I/O’s und die HDD auf Fehler, indem es die einzelnen Komponenten mit sogenannten Workern voll auslastet. Ein Worker ist eine bestimmte Einheit, die z.B. die CPU bis zu einem gewissen Grad auslastet. Je nach Anzahl der zugewiesenen Worker kann man somit den PC zur 100% Auslastung bringen. So werden Hardwarefehler bei CPU, RAM etc. ersichtlich, wenn die Komponenten der Auslastung nicht standhalten und der Test vom Programm abgebrochen wird.

Installiert wird das Programm mit dem Befehl:

apt-get install stress

“Stress” hat keine grafische Oberfläche, ist jedoch sehr einfach zu bedienen. Nach dem Runterladen und Installieren des Pakets kann “Stress” mit dem Befehl:

stress gestartet werden. Um einen Stresstest auszuführen, sollte man den Befehl “stress” mit Parametern erweitern. Ein Beispiel:

stress -c 10 -m 5 -i 5 -d 10 -t 100

Mit diesem Befehl wird das Programm stress ausgeführt und folgender Test wird gestartet:

10 Worker sind auf die CPU angesetzt: -c 10
5 Worker sind auf den RAM angesetzt: -m 5
5 Worker sind auf die I/O’s angesetzt: -i 5
10 Worker sind auf die HDD angesetzt: -d 10
100 Sekunden lang wird der Test augeführt: -t 100

Wer eine CompactFlash oder SD Karte verwendet sollte allerdings den Parameter “-d 10” weg lassen.
Der Parameter “-m 5” scheint auf dem RaspberryPi leider ebenfals nicht zu funktionieren also sähe die Befehlszeile dann nur noch so aus:

stress -c 10 -i 5 -t 100

Je nach Hardware muss man mehr, oder weniger Worker auf die einzelnen Komponenten ansetzen, um eine Vollauslastung zu erreichen.

Um die Auslastung des PC’s zu überprüfen, kann mithilfe des Befehls top oder htop die aktuelle Auslastung beobachtet werden. Das bessere HTOP kann mit folgendem Befehl installiert werden: apt-get install htop
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Hier ein kleines PHP Script was man zum auslesen und Anzeigen der Daten verwenden kann.
Einfach eine neue Datei innerhalb des apache2 Webdirs ( nano /var/www/cpu.php ) mit folgendem Inhalt erstellen:

Code: Alles auswählen

<?php
// v0.2
session_start();
session_cache_limiter(1440);
?>

<!DOCTYPE html>
<html>
<head>
<title><?php echo $_SERVER['SERVER_NAME']; ?> - Informations</title>
<meta HTTP-EQUIV=Refresh CONTENT='10'>
<style type=text/css>
 body { font-size: 8pt; color: black; font-family: Verdana,arial,helvetica,serif; margin: 0 0 0 0; }
 .style1 {
	color: #999999;
	font-weight: bold;
 }
</style>
</head>
<body>

<?php
exec("cat /sys/class/thermal/thermal_zone0/temp",$cputemp);
exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq",$cpufreq);
$cputemp = $cputemp[0] / 1000;
$cpufreq = $cpufreq[0] / 1000;

$RESET = isset($_POST["RESET"]) ? $_POST["RESET"] : "";               
if (!empty($RESET)) {
	if (isset($_SESSION['max_cputemp'])) { unset($_SESSION['max_cputemp']); }
	if (isset($_SESSION['min_cputemp'])) { unset($_SESSION['min_cputemp']); }
	if (isset($_SESSION['max_cpufreq'])) { unset($_SESSION['max_cpufreq']); }
	if (isset($_SESSION['min_cpufreq'])) { unset($_SESSION['min_cpufreq']); }
}

// max
if (!isset($_SESSION['max_cputemp'])) {
	$_SESSION['max_cputemp'] = $cputemp;
} elseif ($_SESSION['max_cputemp'] < $cputemp) {
	$_SESSION['max_cputemp'] = $cputemp;
}
if (!isset($_SESSION['max_cpufreq'])) {
	$_SESSION['max_cpufreq'] = $cpufreq;
} elseif ($_SESSION['max_cpufreq'] < $cpufreq) {
	$_SESSION['max_cpufreq'] = $cpufreq;
}
// min
if (!isset($_SESSION['min_cputemp'])) {
	$_SESSION['min_cputemp'] = $cputemp;
} elseif ($cputemp < $_SESSION['min_cputemp']) {
	$_SESSION['min_cputemp'] = $cputemp;
}
if (!isset($_SESSION['min_cpufreq'])) {
	$_SESSION['min_cpufreq'] = $cpufreq;
} elseif ($cpufreq < $_SESSION['min_cpufreq']) {
	$_SESSION['min_cpufreq'] = $cpufreq;
}

$RESETFORM = "<form name='reset' action='' method='POST'>\n";
$RESETFORM.= "<button type='submit' value='true' name='RESET'>Reset</button>\n";
$RESETFORM.= "</form>\n";
?>

<blockquote>
<pre>

<?php echo $RESETFORM; ?>

<h2>CPU Temperature</h2>
<table border="1" cellpadding="5">
<th>Current</th> <th>Max</th> <th>Min</th>
<tr>
<td><?php echo $cputemp; ?> &deg;C</td>
<td><?php echo $_SESSION['max_cputemp']; ?> &deg;C</td>
<td><?php echo $_SESSION['min_cputemp']; ?> &deg;C</td>
</tr>
</table>

<h2>CPU Frequence</h2>
<table border="1" cellpadding="5">
<th>Current</th> <th>Max</th> <th>Min</th>
<tr>
<td><?php echo $cpufreq; ?> MHz</td>
<td><?php echo $_SESSION['max_cpufreq']; ?> MHz</td>
<td><?php echo $_SESSION['min_cpufreq']; ?> MHz</td>
</tr>
</table>

<br/>

<span class="style1">Kernel Information:</span>
<?php echo php_uname(); ?>

</pre>
</blockquote>

</body>
</html>

Eine weitere aber umfangreichere Variante dieses Scripts wäre auch folgendes allerdings solltet ihr dafür unbedingt das OnlineScript tmp2ram.sh installiert haben weil alle 10 Sekunden in /tmp/ geschrieben wird (CPU Load stats)!
Es zeigt ua folgendes an: CPU Temperature, CPU Frequence, Uptime, Memory Usage, CPU Load und eine CPU LoadBar..

Code: Alles auswählen

<?php
// v0.3
session_start();
session_cache_limiter(1440);
?>

<!DOCTYPE html>
<html>
<head>
<title><?php echo $_SERVER['SERVER_NAME']; ?> - Informations</title>
<meta HTTP-EQUIV=Refresh CONTENT='10'>
<style type=text/css>
 body { font-size: 8pt; color: black; font-family: Verdana,arial,helvetica,serif; margin: 0 0 0 0; }
 .style1 {
	color: #999999;
	font-weight: bold;
 }
 div.progressbar {
	border: 1px solid gray;
	border-style: dotted;
	width: 40%;
	padding: 1px;
	background-color: #E0E0E0;
	margin: 0px;
 }

 div.progressbar div {
	height: 7px;
	background-color: #ff0000;
	width: 0%;
 }
</style>
</head>
<body>

<?php
exec("cat /sys/class/thermal/thermal_zone0/temp",$cputemp);
exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq",$cpufreq);
$cputemp = $cputemp[0] / 1000;
$cpufreq = $cpufreq[0] / 1000;

$RESET = isset($_POST["RESET"]) ? $_POST["RESET"] : "";               
if (!empty($RESET)) {
	if (isset($_SESSION['max_cputemp'])) { unset($_SESSION['max_cputemp']); }
	if (isset($_SESSION['min_cputemp'])) { unset($_SESSION['min_cputemp']); }
	if (isset($_SESSION['max_cpufreq'])) { unset($_SESSION['max_cpufreq']); }
	if (isset($_SESSION['min_cpufreq'])) { unset($_SESSION['min_cpufreq']); }
}

// max
if (!isset($_SESSION['max_cputemp'])) {
	$_SESSION['max_cputemp'] = $cputemp;
} elseif ($_SESSION['max_cputemp'] < $cputemp) {
	$_SESSION['max_cputemp'] = $cputemp;
}
if (!isset($_SESSION['max_cpufreq'])) {
	$_SESSION['max_cpufreq'] = $cpufreq;
} elseif ($_SESSION['max_cpufreq'] < $cpufreq) {
	$_SESSION['max_cpufreq'] = $cpufreq;
}
// min
if (!isset($_SESSION['min_cputemp'])) {
	$_SESSION['min_cputemp'] = $cputemp;
} elseif ($cputemp < $_SESSION['min_cputemp']) {
	$_SESSION['min_cputemp'] = $cputemp;
}
if (!isset($_SESSION['min_cpufreq'])) {
	$_SESSION['min_cpufreq'] = $cpufreq;
} elseif ($cpufreq < $_SESSION['min_cpufreq']) {
	$_SESSION['min_cpufreq'] = $cpufreq;
}

$RESETFORM = "<form name='reset' action='' method='POST'>\n";
$RESETFORM.= "<button type='submit' value='true' name='RESET'>Reset</button>\n";
$RESETFORM.= "</form>\n";
?>

<blockquote>
<pre>

<?php echo $RESETFORM; ?>

<h2>CPU Temperature</h2>
<table border="1" cellpadding="5">
<th>Current</th> <th>Max</th> <th>Min</th>
<tr>
<td><?php echo $cputemp; ?> &deg;C</td>
<td><?php echo $_SESSION['max_cputemp']; ?> &deg;C</td>
<td><?php echo $_SESSION['min_cputemp']; ?> &deg;C</td>
</tr>
</table>

<h2>CPU Frequence</h2>
<table border="1" cellpadding="5">
<th>Current</th> <th>Max</th> <th>Min</th>
<tr>
<td><?php echo $cpufreq; ?> MHz</td>
<td><?php echo $_SESSION['max_cpufreq']; ?> MHz</td>
<td><?php echo $_SESSION['min_cpufreq']; ?> MHz</td>
</tr>
</table>

<span class="style1">Kernel Information:</span>
<?php echo php_uname(); ?><br/>

<span class="style1">Uptime:</span> 
<?php system("uptime"); ?>

<span class="style1">Memory Usage (MB):</span> 
<?php system("free -m"); ?>

</pre>
<p>
<?php
echo "<span class='style1'>CPU Load:</span><br/>\n";
// Change this next line to specify an alternate temporary directory.  Your
// webserver MUST have write access to this directory if you plan to call
// the CPULoad::get_load() method.
define("TEMP_PATH","/tmp/");

class CPULoad {
	function check_load() {
		$fd = fopen("/proc/stat","r");
		if ($fd) {
			$statinfo = explode("\n",fgets($fd, 1024));
			fclose($fd);
			foreach($statinfo as $line) {
				$info = explode(" ",$line);
				//echo "<pre>"; var_dump($info); echo "</pre>";
				if($info[0]=="cpu") {
					array_shift($info);  // pop off "cpu"
					if(!$info[0]) array_shift($info); // pop off blank space (if any)
					$this->user = $info[0];
					$this->nice = $info[1];
					$this->system = $info[2];
					$this->idle = $info[3];
//					$this->print_current();
					return;
				}
			}
		}
	}
	function store_load() {
		$this->last_user = $this->user;
		$this->last_nice = $this->nice;
		$this->last_system = $this->system;
		$this->last_idle = $this->idle;
	}
	function save_load() {
		$this->store_load();
		$fp = @fopen(TEMP_PATH."cpuinfo.tmp","w");
		if ($fp) {
			fwrite($fp,time()."\n");
			fwrite($fp,$this->last_user." ".$this->last_nice." ".$this->last_system." ".$this->last_idle."\n");
			fwrite($fp,$this->load["user"]." ".$this->load["nice"]." ".$this->load["system"]." ".$this->load["idle"]." ".$this->load["cpu"]."\n");
			fclose($fp);
		}
	}
	function load_load() {
		$fp = @fopen(TEMP_PATH."cpuinfo.tmp","r");
		if ($fp) {
			$lines = explode("\n",fread($fp,1024));
			$this->lasttime = $lines[0];
			list($this->last_user,$this->last_nice,$this->last_system,$this->last_idle) = explode(" ",$lines[1]);
			list($this->load["user"],$this->load["nice"],$this->load["system"],$this->load["idle"],$this->load["cpu"]) = explode(" ",$lines[2]);
			fclose($fp);
		} else {
			$this->lasttime = time() - 60;
			$this->last_user = $this->last_nice = $this->last_system = $this->last_idle = 0;
			$this->user = $this->nice = $this->system = $this->idle = 0;
		}
	}
	function calculate_load() {
		//$this->print_current();
		$d_user = $this->user - $this->last_user;
		$d_nice = $this->nice - $this->last_nice;
		$d_system = $this->system - $this->last_system;
		$d_idle = $this->idle - $this->last_idle;
		//printf("Delta - User: %f  Nice: %f  System: %f  Idle: %f<br/>",$d_user,$d_nice,$d_system,$d_idle);
		$total=$d_user+$d_nice+$d_system+$d_idle;
		if ($total<1) $total=1;
		$scale = 100.0/$total;
		$cpu_load = ($d_user+$d_nice+$d_system)*$scale;
		$this->load["user"] = $d_user*$scale;
		$this->load["nice"] = $d_nice*$scale;
		$this->load["system"] = $d_system*$scale;
		$this->load["idle"] = $d_idle*$scale;
		$this->load["cpu"] = ($d_user+$d_nice+$d_system)*$scale;
	}
	function print_current() {
		printf("Current load tickers - User: %f  Nice: %f  System: %f  Idle: %f<br/>",
			$this->user,
			$this->nice,
			$this->system,
			$this->idle
		);
	}
	function print_load() {
		printf("User: %.1f%%  Nice: %.1f%%  System: %.1f%%  Idle: %.1f%%  Load: %.1f%%<br/>",
			$this->load["user"],
			$this->load["nice"],
			$this->load["system"],
			$this->load["idle"],
			$this->load["cpu"]
		);
	}
	function get_load($fastest_sample=4) {
		$this->load_load();
		$this->cached = (time()-$this->lasttime);
		if ($this->cached>=$fastest_sample) {
			$this->check_load(); 
			$this->calculate_load();
			$this->save_load();
		}
	}
}

// NOTE: Calling $cpuload->get_load() requires that your webserver has
// write access to the /tmp directory!  If it does not have access, you
// need to edit TEMP_PATH and change the temporary directory.
$cpuload = new CPULoad();
$cpuload->get_load();
$cpuload->print_load();
$CPULOAD = round($cpuload->load["cpu"],3);

echo "<br/>The average CPU load is: ".$CPULOAD."%\n";
echo "<div class='progressbar'>\n";
echo "<div style='width: ".$CPULOAD."%; background-color: rgb(0, 204, 0);' id='serviceload'>\n";
echo " </div>\n";
echo "</div>\n";

echo "<br/><br/><br/>";
echo "<p>Page generated in ". number_format(microtime(true) - $_SERVER['REQUEST_TIME']) ." seconds</p>";
?>
</p>
</blockquote>

</body>
</html>
Dateianhänge
cpuload.png
cpuload.png (25.13 KiB) 1952 mal betrachtet
Du musst nicht kämpfen um zu siegen
feissmaik
Entwickler Team
Beiträge: 2576
Registriert: So 17. Apr 2011, 11:39
Been thanked: 1 time
Kontaktdaten:

Re: Raspberry Pi

Beitrag von feissmaik »

Ich hab bei mir festgestellt das " raspi-config " irgendwie nicht richtig zu funktionieren scheint...
So wurde der RAM Split von 240/16 als auch das overclocken in /boot/config.txt nicht übernommen :(
In dem Fall also manuell in /boot/ wechseln und über den folgenden Befehl den RAM Split selber erledigen:

Code: Alles auswählen

cp arm240_start.elf start.elf
Fürs Übertakten dann ebenfals die config.txt bearbeiten und alle Zeilen herraus löschen und folgendes einfügen:

Code: Alles auswählen

force_turbo=0
arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6
Warum alle Zeilen löschen? -> Bei mir war die Datei nach reboot zerhakt also die eingetragegen Zeilen waren weg und die letzten Zeilen waren abgehakt... Vielleicht hat die Datei eine maximal erlaubte Grösse oder so, also nur die EInstellungen eintragen die man auch wirklich brauch scheint das beste zu sein...

Nach rebooten und einem Stresstest sieht man dann auch dass das funktioniert:
Spoiler
Show
stress -c 10 -i 5 -t 100
stress -c 10 -i 5 -t 100
rpi_strestest.png (20.44 KiB) 1944 mal betrachtet
Du musst nicht kämpfen um zu siegen
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast