Dekoratives Bildchen

Archiv für 28. Oktober 2013

Linux Stromverbrauch optimieren

Und wieder mal ein Post der im Zuge des Homeserver 2.0 Projekts entstanden ist.
Die Stromverbrauchsmessung nach dem Zusammmenbau des Servers waren bei weitem nicht dort wo ich eigentlich hinwollte, also habe ich mich mal schlau gemacht und folgendes ist dabei rausgekommen:

Festplatten nach einer gewissen Zeit in den Ruhezustand setzen:

for i in /dev/sd?;
do
  hdparm -S 240 $i;
done

Hiermit wird die Inaktivitätszeit nach der sich die Platten runterfahren für alle Platten auf 20 Minuten gesetzt.

Sata Aggressive Link Power Management ALPM

Dieses Feature muss im Bios auch aktiviert sein, also habe ich zuerst im Bios die entsprechende Funktion aktiviert.

Danach kann man mit folgenden Befehlen das auch unter Linux einstellen:

for i in /sys/class/scsi_host/host*/link_power_management_policy
do
  echo min_power > $i
done

for i in /sys/bus/pci/devices/*/power/control
do
 echo auto >; $i
done

Power Saving für den i915 Grafiktreiber konfigurieren

Beim i915 Kernelmodul muss man die tiefen C-States erst über einen Parameter freischalten. Beim meinem System habe ich eine 60-powersafe.conf im /etc/modprobe.d Verzeichnis erstellt, man kann das aber auch direkt in die /etc/modprobe.conf eintragen:

options i915 i915_enable_rc6=7

Da das Modul schon beim Booten geladen wird, noch mit ‘mkinitrd’ den initrd neu erstellt und das wars.

Power Saving für den onboard Sound einstellen

Ich hätte den auch deaktivieren können vielleicht spart das noch mehr, das muss ich noch testen. Wie beim Grafiktreiber landete der Eintrag in der 60-powersave.conf:

options snd_hda_intel power_save=1

 

Mit diesen Optionen kam ich von 72 Watt im idle auf 44 Watt im idle runter.

Falls ihr noch andere Tipps habt, dann nehm ich die gerne in die Liste auf.

Performance Tuning for Linux Software Raid

After finishing my Homeserver project I wanted to get the maximum of performance. At the end of my research in the web i have created following script:

# Get Arrays and physical Disks for active Raid5 Volumes

ARRAYS=""
DISKS=""

for field in `cat /proc/mdstat | grep "active raid5"`
do
  if [[ "x${field:0:2}x" == "xmdx" ]]
  then
    ARRAYS="$ARRAYS $field"
  elif [[ "x${field:0:2}x" == "xsdx" ]]
  then
    DISKS="$DISKS ${field:0:3}"
  fi
done

# Changes on physical Devices
for disk in $DISKS
do
  #Set read-ahead to 16MB
  blockdev --setra 16384 /dev/$disk
  #Device Queue Tuning
  echo 1024 > /sys/block/$disk/queue/read_ahead_kb
  echo 256 > /sys/block/$disk/queue/nr_requests
  #Disable NCQ
  echo 1 > /sys/block/$disk/device/queue_depth
done

# Changes on Raid Arrays
for array in $ARRAYS
do
  #Set read-ahead to 64MB
  blockdev --setra 64536 /dev/$array
  #Increase stripe-cache size
  echo 16384 > /sys/block/$array/md/stripe_cache_size
done

This are the optimal and tested settings for my system. The numbers can differ from system to system. You have to test.

Performance Tuning für Linux Software Raid

Für meinen Homeserver habe ich mich ein bisschen mit den möglichen und sinnvollen Tuning Optionen für Software Raid unter Linux beschäftigt. Dabei ist bei mir folgendes Skript rausgekommen, dass ich nach dem Boot ausführe:

# Get Arrays and physical Disks for active Raid5 Volumes

ARRAYS=""
DISKS=""

for field in `cat /proc/mdstat | grep "active raid5"`
do
  if [[ "x${field:0:2}x" == "xmdx" ]]
  then
    ARRAYS="$ARRAYS $field"
  elif [[ "x${field:0:2}x" == "xsdx" ]]
  then
    DISKS="$DISKS ${field:0:3}"
  fi
done

# Changes on physical Devices
for disk in $DISKS
do
  #Set read-ahead to 16MB
  blockdev --setra 16384 /dev/$disk
  #Device Queue Tuning
  echo 1024 > /sys/block/$disk/queue/read_ahead_kb
  echo 256 > /sys/block/$disk/queue/nr_requests
  #Disable NCQ
  echo 1 > /sys/block/$disk/device/queue_depth
done

# Changes on Raid Arrays
for array in $ARRAYS
do
  #Set read-ahead to 64MB
  blockdev --setra 64536 /dev/$array
  #Increase stripe-cache size
  echo 16384 > /sys/block/$array/md/stripe_cache_size
done

Die einzelnen Zahlenwerte habe ich für mein Setup getestet und können variieren.

Howto tunnel TCP connections over SSH

Network Layout:

tcp-tunnel-overview

There is one server which is only connectable via SSH. This server hosts two additional services: git and http. We have no access to the firewall and can’t forward the ports. The server is a linux system, as clients windows and linux are a option.

We can use the comon git port on our client, but we can’t use port 80 on the client because there is already a webserver running.

Server configuration:

Changes in /etc/ssh/sshd_config:

....
Port 22
....
AllowTCPForwarding yes
...

Linux Client:

Only a few parameters are needed to tunnel our git and web service:

me@client$ ssh -L 10080:localhost:80 -L 9418:localhost:9418 user@server
user@server$ 

As soon as the SSH session starts, you can connect to localhost:10000 for access to the web server. The git service listens on the same port as on the server, so you only have to change the server configuration to localhost in your git client.

Windows Client:

I use putty a very common ssh client:

Open putty and enter username and destination server:

putty-server.

In Connection->SSH->Tunnels configure the tunnels:

putty-tunnel

Just click open and start the session.

Now you should connect to the tunneled services as shown in the linux config.

TCP Ports über SSH Tunneln

Ausgangssituation:

tcp-tunnel-overview

Es gibt einen Server der nur über SSH erreichbar ist, der aber zusätzliche Dienste anbietet die man gerne nutzen würde. Zusätzliche Portweiterleitungen sind nicht gewünscht. Server ist hier ein Linux System. Bei den Clients wird Linux mit OpenSSH und Windows mit Putty betrachtet.

Wir möchten auf den git Server und zusätzlich den Webserver zugreifen.

Für den Git Server kann lokal der gleiche Port genutzt werden, der Webserver Port muss aber geändert werden, da der Port 80 auf dem Client schon genutzt wird.

Einstellungen am Server:

Konfiguration der sshd_config liegt meistens unter /etc/ssh:

....
Port 22
....
AllowTCPForwarding yes
...

Port 22 kann auch auskommentiert sein, weil es der Standardport ist. Zusätzliche Ports für den SSH Server können hier mit weiteren “Port <Nummer>” zeilen hinzukonfiguriert werden.

 

Linux Client:

Mit ein paar Parametern beim SSH Aufruf ist es hier schon getan:

ich@client$ ssh -L 10080:localhost:80 -L 9418:localhost:9418 benutzer@server
benutzer@server$ 

Sobald die SSH Sitzung steht kann man über localhost:10080 auf den Webserver des Servers zugreifen. Zugriff zum Git Server besteht indem man im Git Client localhost als Server einträgt.

Windows Client:

Hier zeige ich das anhand von Putty als Client. Ohne Screenshots komme ich hier aber nicht aus.

Putty öffnen und Benutzername und Server auswählen:

putty-server.

Unter Connection->SSH->Tunnels die entsprechenden Tunnel einrichten:

putty-tunnel

Danach auf Open und die SSH Sitzung starten.

Jetzt sollte man wie unter Linux zu den beiden getunnelten Diensten verbinden können.