Freitag Feb 03, 2012

Oracle - Statements ohne Bindungsvariablen

Größere Performanceprobleme bei Oracle können sich ergeben, wenn man nicht konsequent Queries mit Bindungsvariablen einsetzt. Um mal schnell rauszufinden, welche davon so laufen, kann man folgende Statements nutzen:

create table t1 as select sql_text from v$sqlarea;

alter table t1 add sql_text_wo_constants varchar2(1000);


create or replace function

remove_constants( p_query in varchar2 ) return varchar2
as
    l_query long;
    l_char  varchar2(1);
    l_in_quotes boolean default FALSE;
begin
    for i in 1 .. length( p_query )
    loop
        l_char := substr(p_query,i,1);
        if ( l_char = '''' and l_in_quotes )
        then
            l_in_quotes := FALSE;
        elsif ( l_char = '''' and NOT l_in_quotes )
        then
            l_in_quotes := TRUE;
            l_query := l_query || '''#';
        end if;
        if ( NOT l_in_quotes ) then
            l_query := l_query || l_char;
        end if;
    end loop;
    l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
    for i in 0 .. 8 loop
        l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
        l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
    end loop;
    return upper(l_query);
end;
/
update t1 set sql_text_wo_constants = remove_constants(sql_text);

select sql_text_wo_constants, count(*)

  from t1
 group by sql_text_wo_constants
having count(*) > 100
 order by 2
/



Dienstag Jan 25, 2011

tar I/O limitieren mit dem Pipe Viewer

Wenn man tar etwas einbremsen möchte, damit es nicht die Platte blockiert, dann kann man das u.a. mit dem Pipe Viewer (Gentoo: emerge -av pv) machen:

tar pcf - <verzeichnis_zum_packen> | pv -s $(du -sb home | awk '{print $1}') --rate-limit 500k | gzip > datei.tar.gz

Ich nehm für sowas auch immer ganz gerne rsync her. Da ruft man das Ganze einfach mit der Option --bwlimit auf z.B. folgender Befehl reduziert die Übertragungsgeschwindigkeit auf ~10MB/sec.:

rsync -av --bwlimit=10000 ...



Freitag Jan 14, 2011

Welche IP kommt am haeufigsten im Accesslog vor

Wenn man rausfinden möchte, welche IPs am häufigsten auf eine Website zugreifen, hilft folgender Bash Einzeiler um das Apache Access-Log durchzugrasen:

cat apache.access_log |awk '{print $1}' | sort | uniq -c | sort -n | tail -20


Freitag Jan 15, 2010

32bit Anwendung auf 64bit Linux mit GCC kompilieren

Wenn man mal in die Verlegenheit kommt, auf einem 64bit Linux OS ein 32bit Programm kompilieren zu müssen, dann ist das unter Gentoo mit multilib USE-Flag (also installierter 32bit und 64bit Unterstützung) kein Problem. Bevor man einen configure aufruft, exportiert man einfach zwei Variablen:

export CFLAGS="-m32"
export LDFLAGS="-m32"

Unter Ubuntu/Debian sollten folgende Pakete installiert sein, damit das tut:

libstdc++.i386
libgcc.i386
glibc.i386
glibc-devel.i386

Unter SuSE haben die Pakete immer 32bit im Paketnamen also z.B.:

glibc-32bit
glibc-devel-32bit

I.d.R. wird man bei einem größeren Projekt wie den Apache Webserver u.U. aber noch weitere andere 32bit Pakete nachinstallieren müssen.


Donnerstag Jan 07, 2010

HP Officejet 6500 und Linux

Drucker hinüber, Neuer dringend benötigt... Also schnell zum Mediamarkt. Klar war, das es ein HP sein sollte. Die funzen i.d.R. ohne Probleme unter Linux. Ohne genau zu wissen, welchen ich eigentlich kaufen soll, hab ich mir dir 5-6 Typen angeschaut, die da so rumstehen. Gelandet bin ich dann beim 119 Euro teuren Officejet 6500 mit Ethernet-Anschluss, Fax, Scanner und Kopierer. Vorallem der Ethernet-Anschluss hat es mir angetan. Damit ließ sich dann der iMac auch noch anschließen und man hat nicht das Problem, das man das USB-Kabel ständig umstecken muss zwischen zwei Rechnern.

Also daheim IP-Adresse, Netzmaske und Default-Gateway eingestellt (DHCP hätte es auch getan, hab ich aber nicht eingerichtet). Anpingen ging dann schon mal. Dann die Treiber des HP Linux Imaging and Printing System installiert. Die hplip-Treiber laufen mit fast 2000 HP-Druckern und fast jedem Linux-System. Unter Gentoo/Funtoo muss man einfach ein

emerge -av hplip

starten. Ausserdem habe ich in der Datei /etc/portage/package.use noch folgende USE-Flags gesetzt:

net-print/hplip ppds fax qt4

Dann kann man mit CUPS den Druckertreiber einrichten. Dazu ruft man im Webbrowser einfach die Admin-Oberfläche von CUPS unter http://localhost:631 auf. Dort kann man dann nach dem Drucker einfach suchen lassen. Die Testseite kam ohne Probleme raus.

Für die Inbetriebnahme des Scanners habe ich nicht lange experimentiert und den Drucker/Scanner gleich per USB angeschlossen. Soweit Sane/XSane installiert ist, kann man dann gleich mit sane-find-scanner checken, ob der Scanner gefunden wird (hierzu muss man unter Gentoo in der Gruppe lp sein). Wird der Scanner gefunden (sicherheitshalber auch als User root probieren, wenn es als normaler User nicht funktioniert), kann man xsane starten und loslegen mit dem Scannen.

Summasummarum: Der Officejet 6500 läuft wunderbar unter Linux. Und für etwas über 100 Euro bekommt man 4 Geräte in Einem. Feine Sache :-)


Donnerstag Okt 29, 2009

Verzeichnisse ohne Dateien kopieren mit rsync

Mit Version 3 von rsync lassen sich relativ einfach ganze Verzeichnisbäume inkl. Rechte und User-/Gruppen-IDs ohne Inhalt sprich ohne Dateien kopieren:

rsync -a -f"+ */" -f"- *" source/ destination/

Soweit ich weiß, gibt es die Option -f in Version 2 von rsync noch nicht. Drum wird das in div. Enterprise Linux Versionen nicht funktionieren.


Mittwoch Okt 07, 2009

3D Support Radeon HD 2000 - HD 4000 bzw. R6xx - R7xx

Endlich ist es soweit! Nachdem ich die ATI Radeon Grafikkarte (Radeon HD 3650 - RV635) in meinem Laptop (siehe auch: Elitebook 8530p, Gentoo, Sabayon, Kubuntu - Teil 1 / Elitebook 8530p, Gentoo, Funtoo - Teil 2) am Anfang am liebsten an die Wand geklatscht hätte, weil die propritären ATI einfach nur übel sind und mit neueren sowie (teilweise) selbstkompilierten Kernel überhaupt nicht tun (im Gegensatz zu Nvidia), hab ich das Teil dann doch noch zum Laufen bekommen mit den OpenSource Treibern (radeonhd). Die laufen wirklich gut und die 2D Performance ist inzwischen super. Nur mit 3D war halt nix. Das ist mir prinzipiell egal, aber sowas wie die Desktopeffekte von KDE 4 oder Compiz Fusion is halt dann nicht so richtig (schnell) - und ich mag die Dinger echt gerne, da sie wirklich auch produktiv sind.

Wer Funtoo/Gentoo als Linux-Distribution nutzt und sich rantraut, kann die nötigen Treiber für 3D Unterstützung aber jetzt nutzen. Ich wollte zunächst wie hier beschrieben vorgehen, aber das Ganze kompilierte leider nicht ganz fertig.

Aber Gentoo "to the rescue"! Zunächst habe ich mir mal einen Kernel 2.6.32 (git-sources-2.6.32_rc3-r1) installiert und kompiliert. Verwendet habe ich eine Kernel-Config von Sabayon 5.0, das auf Gentoo aufsetzt, für Desktop-Systeme ist und Kernel 2.6.31 verwendet. Die .config (x86_64 / x86) habe ich fast unverändert übernommen - nur die KMS (Kernel Mode Settings) im Staging-Bereich habe ich aktiviert und alles andere im Staging-Bereich ausgeschaltet, da die Android-Treiber bei mir das Kompilieren des Kernel verhindern (bricht mit Error ... ab).

Das ist prinzipiell eine feine Sache. Man hat hiermit praktisch auf der Console schon die volle Auflösung - in meinem Fall 1600x1050 - und wenn man zwischen X-Server und Konsole mit CTRL+ALT+F1 oder CTRL+ALT+F7 hin und her wechselt, flackert nix, da nicht mehr zwischen den Auflösungen umgeschaltet werden muss. Das Ganze funkt auch wunderbar - prinzipiell. Nur leider sieht der X-Server nach dem Start recht bunt aus und der Cursor ist ziemlich viereckig ;-) Aber gut, das ist ja auch alles noch ziemlich experimentell. Man kann KMS über einen Kernel-Bootparameter wieder ausschalten. Dazu fügt man in der /boot/grub/grub.conf den Parameter radeon.modeset=0 hinten an. Wenn es dann doch mal tut, kann man ja den Parameter wieder weglassen.

Nun aber zur 3D Unterstützung: Zunächst habe ich das X11-Overlay hinzugefügt:

layman -a x11
layman -S


Da man Mesa und die Xorg-Treiber in den neuesten Versionen braucht, habe ich die Pakete unmasked (mit Hilfe des Tools autounmask):

autounmask x11-base/xorg-drivers-9999
autounmask media-libs/mesa-9999


Dann installiert man Folgendes:

emerge -av xorg-server xorg-drivers mesa libdrm


Und schließlich sollte man noch einen

revdep-rebuild

hinterherschicken. Dann muss man eigentlich nur noch Durchstarten und in den System Settings die Desktop Effekte einschalten (soweit nicht schon passiert [waren bei mir bisher auf XRender eingestellt]) und auf OpenGL umstellen. Das war's eigentlich :-) Bei mir laufen fast alle Effekte sehr schnell.

Und fall es jemanden interessiert: glxgears läuft bei mir jetzt mit 2123 FPS ;-)


Dienstag Okt 06, 2009

KVM Benchmark: Apachebench, IOzone, Graphics Magick

Update 20100115: Bezügl. I/O-Performance und dem qcow2-Format, sollte man das hier noch lesen: Features/KVM qcow2 Performance . Seit Qemu/KVM 0.11.0 hat sich da einiges getan. Vorraussetzung für die bessere Performance ist aber, das man das qcow2-Image mit Qemu >= Version 0.11.0 erzeugt hat. Es kann also durchaus Sinn machen, ein altes Image in ein Neues zu konvertieren.

Ich habe in den letzten Tagen auf einem HP DL 380 G6 Server ein paar Benchmarks mit der Linux Kernel Virtual Maschine (KVM) gemacht. Ich persönlich nutze die KVM schon seit fast zwei Jahren und produktiv laufen aktuell über 40 VMs. Die Stabilität und die Performance hat sich in den letzten Releases sehr gut entwickelt und die Entwicklung geht sehr schnell voran.

Der Host und der Gast liefen mit Gentoo und Kernel 2.6.31.1. Der Host hat folgende Komponeten eingebaut:

2 x Intel Xeon CPU L5520 - 2 Quad-Processors (static performance, VT-d, Hyperthreading eingeschaltet in BIOS)
8 x 300 GB SAS 10k Festplatten (RAID 10)
24 GB RAM

(Einige) Host (kernel) Einstellungen:

I/O scheduler: deadline
Filesystem: xfs
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_RING=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m

(Einige) Gast (Kernel) Einstellungen:
I/O scheduler: deadline/cfq (siehe unten)
Filesystem: ext3 (datamode=ordered/writeback [siehe unten])
VIRTIO Network (VIRTIO_NET) und Block (VIRTIO_BLK) Treiber verwendet.
Der Gast ist ein qcow2-Image, welches ich vorher mit "dd" erweitert habe, damit es für den IO Test groß genug ist und nicht erst während des Tests erweitert wird (was die Werte total verfälscht hätte).
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_PARAVIRT_SPINLOCKS=y

KVM Startup Optionen (die Wichtigsten):
-m "variabel-siehe unten"
-smp "variabel-siehe unten"
-cpu host
-daemonize
-drive file=/data/kvm/kvmimages/gfs1.qcow2,if=virtio,boot=on
-net nic,vlan=104,model=virtio,macaddr=00:ff:48:23:45:4b
-net tap,vlan=104,ifname=tap.b.gfs1,script=no
-net nic,vlan=96,model=virtio,macaddr=00:ff:48:23:45:4d
-net tap,vlan=96,ifname=tap.f.gfs1,script=no

Da wir KVM hauptsächlich für Webserver benötigen, habe ich Benchmarks mit Apachebench, Graphics Magick und IOzone erstellt:

Apachebench mit 4 GB RAM, CFQ Scheduler, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-3428/
Apachebench mit 2 GB RAM, CFQ Scheduler, 1/2/4/8 vProcs verglichen mit dem Host:
http://www.tauceti.net/kvm-benchmarks/merge-6053/

Mich hat hier u.a. interessiert, ob mehr RAM mehr Durchsatz bringt und ob mehrere virtuelle Prozessoren skalieren. Wenn man die 2xQuadCore + Hyperthreading mit den 8 virtuellen Prozessoren (vProcs) vergleicht, dann kann die KVM hier mithalten. Die Speichergröße spielt keine Rolle.

Graphics Magick resize mit 4 GB RAM, CFQ scheduler, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-5214/
Graphics Magick resize mit 2 GB RAM, CFQ scheduler, 1/2/4/8 vProcs verglichen mit dem Host (the hp380g6 graph):
http://www.tauceti.net/kvm-benchmarks/merge-7186/

Mit 8 vProcs ist die KVM ungefähr 10% langsamer. Mehr Speicher scheint auch hier nicht zu helfen.

Der folgende IOzone Test lief mit der KVM-Option cache=none. In diesem Fall ist alleine der Host für's Wegschreiben der Daten verantwortlich. Das erscheint mir aktuell immer noch die sicherste Option zu sein, um die Datenintegrität des KVM-Images und der Filesysteme in der KVM sicher zu stellen. Allerdings bremst das die Performance:

IOzone Schreibtest (write) mit 2 GB RAM, CFQ scheduler, ext3 Filesystem und datamode=ordered, 1/2/4/8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-3564/
IOzone Schreibtest (write) mit 2 GB RAM, deadline scheduler, ext3 Filesystem und datamode=ordered, 1/2/4/8 vProcs:
http://www.tauceti.net/kvm-benchmarks/merge-4533/

Wie man sieht, bringt das Austauschen des Schedulers ungefähr 10-15 MByte/s mehr an Durchsatz. Die CPU-Auslastung habe ich aber nicht überprüft während des Tests.

Die folgenden IOzone Tests liefen ohne cache-Option und somit mit dem Defaultwert writethrough:

IOzone Schreibtest (write) mit 2 GB RAM, deadline scheduler, ext3-Filesystem und writeback (siehe Testseite), 8 vProcs verglichen mit dem Host (der hp380g6 Graph):
http://www.tauceti.net/kvm-benchmarks/merge-7526/

Die Zahlen sind relativ beeindruckend. Die KVM kann eigentlich fast immer - mit den entsprechenden Einstellungen - mit dem "echten" Host mithalten in diesen Tests. Den Netzdurchsatz müsste man jetzt noch messen, dann wäre der gesamte Benchmark schon fast vollständig.


Dienstag Jul 28, 2009

Firefox und Thunderbird unter KDE 4

Wer sich schon öfter mal darüber geärgert hat, das Firefox und Thunderbird nicht so wahnsinnig toll aussehen, wenn sie unter KDE laufen, dem kann geholfen werden. Grundsätzlich liegt das daran, das die beiden Apps GTK-Anwendungen sind und damit GUI-Elemente haben, die eben etwas anders aussehen, wie man das von einer KDE-Anwendung gewohnt ist.

Unter Gentoo installiert man das Paket gtk-engines-qt (heisst bei anderen Distributionen ähnlich). Dann KDE durchstarten. Anschließend kann man in KDE die System Settings aufrufen und dort dann den Button Apearance auswählen (sorry, kenne nur die englischen Bezeichnungen dafür...). In der linken Spalte sieht man dann jetzt GTK Styles and Fonts. Wenn man dort Use my KDE style in GTK applications auswählt, hat man das, was man braucht :-)


Montag Jul 06, 2009

PostgreSQL-Replikation mit Londiste und SkyTools - Teil 1

Warum SkyTools / Londiste? Ich war auf der Suche nach einer Replikationslösung, die mir einfach die Daten von einer Master-DB auf eine Slave-DB kopiert. Die Slave-DB ist read-only. Man muss grundsätzlich vorwegnehmen, das es unter Postgres leider keinen Replikationsmechanismus gibt, wie ihn die MySQL hat. Dort werden die Transaktionslogs auf dem Slave nachgefahren. D.h. das wirklich alle Statements auch auf dem Slave ausgeführt werden inkl. aller DDL-Statements (also sowas wie CREATE TABLE). Das ist bei (fast) keiner Replikationslösung, die es unter Postgres gibt, der Fall. Ich vermute mal, das das PGCluster macht, welcher auch Multimaster-Replikation unterstützt. Zu dieser Lösung habe ich aber kein Vertrauen, da im Supportforum keiner der Entwickler antwortet. Ausserdem ist der PGCluster oder auch PGCluster-II (wird wohl eh nie erscheinen) immer eine speziell angepasste Version von Postgres und hängt der Entwicklung immer hinterher (und aktuell schon ziemlich...). Ich mag keine so reingeschusterten Sachen. Dann gibt es noch den CyberCluster, der in eine ähnliche Kategorie fällt und auf PGCluster aufbaut, aber auch so seine Probleme hat, wie ich mal auf der Postgres-Mailingliste erfahren habe.

Dann gibt es noch Tools, die soz. Statements replizieren auf zwei oder mehrere Datenbanken und wie ein vorgeschalteter Proxy arbeiten, mit dem sich die Clients verbinden. pgpool-II gehört da dazu. Aber was mach ich, wenn eine Node ausfällt? Die Daten bei dieser Art Replikation müssen zwangsläufig auseinander laufen, wenn eine DB ausfällt. Eine Antwort darauf gibt Gerd Koenig in pgpool-II for beginners (PDF). Das ist an sich schon mal nicht schlecht, aber diese Methode benötigt eigentlich fast schon ein komplettes Recovery der DB, damit die Datenbanken wieder konistent werden.

Dann gibt's noch Bucardo. Da ist zwar der Entwickler sehr aktiv, aber mir gefällt das dahinterliegende Konzept gar nicht, mit rsync irgendwelche Daten durch die Gegend zu kopieren. Prinzipiell handelt es sich hierbei um eine Multi-Master-Replikation.

Weiterhin hätten wir noch den Mammoth Replicator. Der war mal kommerziell und ist jetzt OpenSource. Hier kann man auch Support von Enterprise DB kaufen. Bin ich aber auch nicht so wirklich überzeugt von dem Konzept.

Bleiben grob noch zwei Tools: Slony-I und Londiste.

Slony-I ist schon irgendwie das Schweizer Taschenmesser und Urgestein unter den Replikationslösungen - nur ungleich komplizierter zu bedienen. Und das war für mich dann auch der Grund, es mit Londiste/SkyTools zu versuchen, welches die Skype-Entwickler als OpenSource veröffentlich haben und das teilweise in Python geschrieben ist - was gleich noch viel mehr für die Lösung spricht ;-)

Hier mal eine Übersicht über die wichtigsten Links bezügl. Londiste/SkyTools:

SkyTools Download:
Londiste ist ein Teil der SkyTools. Version 2.1.9 ist gerade aktuell. Diese Version kann man sich auf pgFoundry downloaden. Da ich aber einen Teil der Funktionalität von Version 3 brauche, lade ich mir das Source-Paket (http://pgfoundry.org/pipermail/skytools-users/2009-April/001029.html) runter, welches Marko Kreen in einem Posting der SkyTools-Mailingliste erwähnt hat. Version 3 ist aktuell noch Alpha - wobei ich mir ziemlich sicher bin, das das Skye intern schon länger im Einsatz ist und sicherlich weit weniger Alpha ist, als so manches andere Prgramm ;-) Bei mir läuft das jetzt auf jeden Fall schon mal seit 3 Monaten ganz gut durch.

SkyTools @ PostgreSQL Wiki
http://wiki.postgresql.org/wiki/SkyTools

Londiste Tutorial (Version 2)
http://pgsql.tapoueh.org/site/html/londiste/londiste.html

SkyTools Users Archives Mailingliste
http://pgfoundry.org/pipermail/skytools-users/

Manpage für londiste (Version 2)
http://manpages.ubuntu.com/manpages/jaunty/man1/londiste.1.html

Whats you favourite PostgreSQL Replication Tool:
1. Slony-I
2. pgpool2
3. londiste
http://www.postgresql.org/community/survey.61

PostgreSQL Replication using Slony-I
http://jayant7k.blogspot.com/2008/11/postgresql-replication-using-slony-i.html

Database management tools from Skype: WAL shipping, queueing, replication. The tools are named walmgr, PgQ and Londiste, respectively
http://pgfoundry.org/projects/skytools/

Und in Teil 2 erklär ich dann, wie ich es eingerichtet habe...


Donnerstag Mai 28, 2009

Amiga MOD-Files per FUSE-FS abspielen mit uadefs

Schon witzig, was es alles heutzutage als Filesystem gibt ;-) So kann man mit uadefs ein Verzeichnis mit Tracker-Dateien mounten und dann auf dieses Verzeichnis mit jedem beliebigen Player, der WAV-Dateien abspielen kann, diese Dateien abspielen. Das funktioniert ähnlich wie bei sshfs (ermöglicht ein Filesystem eines entfernten Rechners per SSH zu mounten):

1. mkdir -p ~/mnt/uadefs
2. uadefs /amiga/songs ~/mnt/uadefs
3. vlc ~/mnt/uadefs/mod.foo

Voraussetzung ist natürlich, das man das FuSE-Paket installiert hat. uadefs ist bei Gentoo ein Teil des uade-Pakets (Unix Amiga Delitracker Emulator).


Mittwoch Mai 06, 2009

MySQL Performance- und Diagnose-Tool Jet Profiler

Normalerweise bin ich ja kein Fan von ClosedSource Programmen insbesondere im OpenSource Umfeld. Aber dieses Tool hier ist wirklich praktisch und ich habe bisher auch noch nicht wirklich was Besseres gefunden, wenn es um die Performanceanalyse einer MySQL-DB geht, insbesondere wenn man auf der Suche nach langsamen Queries, Locks, Cache-Hit-Ratio's, usw. geht. Man bekommt diese Infos zwar auch teilweise anderweitig, aber kaum so gut und übersichtlich aufbereitet, was letztendlich viel Arbeit spart.

Vom Jet Profiler kann man sich eine soweit ganz funktionale, freie Version downloaden, aber leider wird man relativ schnell feststellen, das man ohne die 99 Dollar teure (oder billige - je nachdem) Version nicht so arg weit kommt. Aber zum Testen und einem ersten Überblick reicht es. Das Programm ist in Java geschrieben und ist allen Unkenrufen zum Trotz (was man immer noch von Java-Programmen hört) schnell und gut bedienbar. Es läuft unter Linux, Mac OS X und Windows.


Mittwoch Apr 15, 2009

Die eigene Cloud mit EUCALYPTUS

EUCALYPTUS - Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems. Wer seine eigene Cloud bauen will, kann das mit EUCALYPTUS tun. Die Software ist OpenSource, unterstützt Xen und in Release 1.5 jetzt auch KVM als Hypervisor. Das Interface ist kompatibel zu Amazons EC2. Das Schöne an dem Ganzen ist, das es im Prinzip nur ohnehin schon vorhandene Tools verwendet, die es so unter Linux gibt.


Mittwoch Apr 01, 2009

grep: Mehr als ein Wort rausfiltern - eine Art mulit-grep

Wer sich schon immer gefragt hat, wie man mit grep nach mehreren z.B. Wörtern filtern kann, dem sei geholfen:

grep -F -e wort1 -e wort2 dateiname

wort1 und wort2 ersetzt man durch die Wörter, die man sucht und dateiname nach dem Dateinamen in dem man suchen möchte oder lässt den Dateinamen weg, wenn man von stdin lesen möchte.


Montag Mrz 30, 2009

KVM, Qemu: Welche I/O-Scheduler verwenden

Update 20110831: Weitere Informationen zu dem Thema gab es auf dem KVM Forum 2011 in dem PDF Optimizing Your KVM Instances von Mark Wagner. Auch hier zeigt sich, das der Deadline Scheduler aktuell der Optimalste für eine KVM ist.

Update 20100318: Mehr Tuning-Informationen für die KVM gibt es hier: http://www.linux-kvm.org/page/Tuning_KVM .

Update 20090403: Ich denke, das sich das unten stehende, so nicht halten läßt. Die Sache mit dem noop-Scheduler verhält sich teilweise sehr gut, teilweise aber auch ziemlich übel, in dem z.B. der pgflush-Daemon ziemlich viel Systemzeit beansprucht und der I/O-Durchsatz ziemlich in die Knie geht. Das ändert sich schlagartig, sobald man auf den Deadline-Scheduler umschaltet. Auf den getesteten Systemen scheint die Benutzung des Deadline-Schedulers in Host und Guest die beste Kombination zu sein. Man kann das ja selber mal ausprobieren, in dem man den I/O-Scheduler im laufenden Betrieb wechselt z.B.

echo "deadline" > /sys/block/vda/queue/scheduler

Man sollte dann aber schon eine Anwendung oder einen Test fahren, der gut was auf die Platte schreibt und das auch möglichst konstant macht. Oder besser: Man verwendet bonnie++ . Ein eher syntetischer Test für I/O-Durchsatz aber ein guter Ausgangspunkt.

Text vom 20090330: Diese gar nicht so uninteressante Frage kam jetzt schon des Öfteren auf der KVM Mailingliste hoch. Letztendlich ist man sich einig, das das Gastsystem mit elevator=noop gestartet werden sollte. Per Default setzen ja heute die meisten Distributionen den Completely Fair Scheduler-I/O (CFQ) ein. Für den Host selbst ist das vielleicht ok, wenn im Gast elevator=noop als Kernelparameter z.B. im Grub übergibt. Es macht auch nicht wirklich Sinn, wenn sich die I/O-Scheduler im Gast und im Host Gedanken machen müssen, wie denn die Daten am Besten auf die Platte kommen sollen. Wenn ich die Mails der KVM-Entwickler/-User aber richtig interpretiere, dann bevorzugen sie doch eher den deadline Scheduler für den Host. Mit dem habe ich auch sehr gute Erfahrungen gemacht im Serverbereich. Ich finde - aber das ist jetzt meine subjektive Meinung - das der CFQ sich besser für den Desktopbereich eignet als für Serveranwendungen.