Results for category "Open Source"

18 Articles

CCC: 26c3 / Bluvert

Den zweiten Tag des CCCs in Berlin habe ich gemeinsam mit Flo besucht. Leider war das komplette BCC restlos überfüllt und man konnte nur schwerlich in den einzelnen Vortragsräumen einen Sitzplatz ergattern. Ich hatte den Eindruck, dass die gesamte Organisation hinter der Veranstaltung mehr als chaotisch ablief. Besonders nervig: das WLAN war – wenn es denn mal erreichbar war – mehr als inperformant.

Ich nutzte deshalb den Montag Abend und brachte Bluvert auf einen aktuellen Stand. Die Änderungen für Version 1.2 werde ich im Laufe der nächsten Tage auf sourceforge.net hochladen:

  • In der config.ini lässt sich nun $cwd als Variable für das aktuelle Arbeitsverzeichnisses verwenden. Damit entfallen einige kleinere Probleme.
  • Es muss nur noch einmalig execute-server.py gestartet werden. Das Script arbeitet nun als funktionierender Daemon.
  • Das Scanning der Geräte innerhalb der Bluetooth-Nachbarschaft geschieht nun ebenfalls über execute-server.py. Es besteht nicht mehr die Notwendigkeit, das Script set-active-bluetooth-devices.sh als Cron-Job auszuführen.
  • Versenden der noch nicht versendeten Nachrichten geschieht nun ebenfalls über einzelne Threads, was sich erheblich auf die Performance auswirkt.
  • Zeitintervall des Scannens nach neuen Geräten und Versenden der Nachrichten lässt sich in der config.ini frei definieren.
  • Script zum Scannen der aktiven Bluetooth-Geräte lässt sich in der config.ini frei definieren.

Let the ants feed the bird: ant-twitter, a Twitter task for Ant

I have learned the last 5 day for business studies and was so bored that I really got happy when I saw the article about a Twitter-Maven-Plugin on entwickler.com yesterday morning.
We still use Ant as building system in our development team so I searched for an Ant task which enables Twitter support. As I did not found any plugin I started to write my own simple task called ant-twitter.

Features

  • Support for URL shortening service bit.ly via bitlyj
  • Support for messages more than 140 characters – the message will be splitted into two or more messages. A small source snippet is taken  from jtwitter – thanks a lot guys!
  • Open source – Apache license
  • It is simple 🙂

Installation

I assume you have already installed Ant-1.70 (1.6x should work although) and configured your Ant working environment. I refer to $ANT_LIB$ which is a directory where your Ant installation can found further JARs (should be appended to your classpath).

  • Download needed packages and extract them to $ANT_LIB$:
  • Create a file twitter4j.properties in your classpath ($ANT_LIB$) and paste the following code into it:
    twitter4j.http.useSSL=true
    twitter4j.debug=false
    

Usage

After you have installed the needed dependencies and upset your configuration you have to edit your build.xml. Put the following taskdef in top of your build file:

<project name="TwitterTestTask" default="main" basedir=".">
  <taskdef name="twitter" classname="de.ecw.ant.twitter.AntTwitterTask"/>

You are now able to use the twitter task in form of

    <twitter message="Hello World from Ant!" username="twitter-username" password="twitter-password" bitlyUsername="bitly-username" bitlyApiKey="bitly-key" enableBitly="false" />

ant-twitter has the following options:

  • message (required, String): Your Twitter tweet
  • username (required, String): Your Twitter screenname
  • password (required, String): Your Twitter password
  • bitlyUsername (optional, required if enableBitly=true, String): Your bit.ly username
  • bitlyApiKey (optional, required if enableBitly=true, String): Your bit.ly API key
  • enableBitly (optional, true|false): Enable bit.ly support

Zeit zum Nörgeln: Warum Open Source besser ist als Closed Source

Mit diesem Artikel möchte ich mal meine Sichtweise zum Thema Open Source / Closed Source niederlegen.

Generell gehöre ich zu der Sorte von Entwicklern, die ihre Software unter der BSD-Lizenz oder GPL veröffentlichen. Allerdings sage ich auch nicht, dass z.B. Treiber, die als Binary veröffentlicht werden, nicht in Linux integriert werden sollten.

Ich bin froh, wenn sich überhaupt Unternehmen die Mühe machen und Ressourcen binden, um die Portierung der Treiber nach Linux (BSD, MacOS, Solaris etc. – wenn ich im folgenden Text von Linux spreche, schließt dies diese Betriebssysteme einfach mal mit ein) voran zu treiben. Schließlich kann man so unter diesen Betriebssystemen neue und (oft) bessere Hardware schnell nutzen.

Die Entwicklung von Treibern nach dem altbekannten Ansatz des Reverse Engineerings, wie es z.B. bei Samba bis zur Veröffentlichung der Protokoll-Details von Microsoft der Fall war, nimmt einfach viel zu viel Zeit in Anspruch. Und Zeit ist Geld.

James Bottomley,  Vorsitzender des TAB und SCSI Maintainer, hat letztes Jahr ein Essay herausgegeben, in dem er indirekt die Bereitstellung der Treiber-Quellcodes an die Community fordert. Intel und ATI sind bereits vor einiger Zeit mit ihren Treibern auf den Zug aufgesprungen.
Die Vorteile für Intel, ATI und andere Unternehmen, die ihre Quellen und Interface-Dokumentation veröffentlichen, liegen eigentlich auf der Hand:

  • Es wird eine wesentlich breitere Nutzerbasis angesprochen. Gehen wir von einer neuen 10 GBit-Netzwerkkarte, die auf den Markt geworfen wird. Folgende Szenarien sind nun möglich:
    1. Die Treiber liegen nur in binärer Form für Windows-Plattformen vor.
      Als Zielgruppe für die Nutzung dieser Karte wird man vor allem Rechenzentren oder Internet-Provider ansprechen wollen, die zum großen Teil auf Linux setzen. Es liegt ein eindeutiger #fail vor, da der Hersteller sich einen Großteil der Nutzerbasis versperrt.
    2. Der Hersteller veröffentlicht die Schnittstellenbeschreibung.
      Bleiben wir bei unserer Netzwerkkarte: Der Hersteller entschließt sich, die Treiber in binärer Form für Windows-Plattformen zu veröffentlichen. Zusätzlich legt er die Spezifikationen für die Hardware offen.
      Ambitionierte Entwickler haben nun die Möglichkeit, den Treiber für Linux nachzubauen. Wichtig ist aber, dass es beim Hersteller immer einen Ansprechpartner für die Treiber-Entwicklung gibt, da oft die Dokumentation trotz merhmaliger Reviews Fehler enthalten kann.
    3. Windows und Linux werden mit binären Treibern beliefert.
      Beide “großen” Betriebssysteme werden mit Treibern in Form von Binärpaketen ausgeliefert. An sich nicht schlecht, schließlich hat nun eine große Zielgruppe die Möglichkeit, die darunter liegende Hardware einzusetzen.
      Aber hier gibt es zwei gravierende Probleme: Auf der einen Seite werden – so habe ich zumindest das Gefühl – die Linux-Treiber als Abfallprodukt gesehen, die “mal so nebenbei” programmiert wurden. Viele Treiber-Entwickler kennen eher die Windows- als Linux-Umgebung. So kommt es, dass der Linux-Treiber Kernel-Panics auslöst oder ähnliches. Falls es mal Probleme mit dem Treiber geben sollte, wird dies (hoffentlich) zur Kenntnis genommen – aber eine baldige Lösung ist oft nicht in Sicht.
      Das zweite große Problem besteht in den Regeln bzw. Lizenzen, die der Distribution zu Grund liegt. Unter Ubuntu ist es kein Problem, binäre properitäre Treiber aus einem anderem Repository nachzuinstallieren. Das Debian-Projekt würde hingegen niemals Treiber in binärer Form einbinden.
    4. Der Treiber liegt in binärer Form und als Quellcode vor.
      Ideal ist meiner Meinung nach die folgende Form: Der Treiber liegt für Windows und auch Linux in binärer Form vor, zusätzlich gibt es den Quellcode des Treibers zum Download. Entwickler seitens des Herstellers haben sich um die Dokumentation gekümmert und stehen als Ansprechpartner zur Verfügung.
      In diesem Zuge muss ich ganz klar ATI mein Lob aussprechen, da sie den kompletten Schritt im Jahr 2008 vollzogen haben.

    Wie schon geschrieben: Ideal wäre Konzept Numero 4. Leider hat sich NVidia gegen ein solches Vorgehen ausgesprochen. Die Absage wurde mit der Begründung erteilt, dass der Treiber geistiges Eigentum enthält. Mich würde interessieren, von welchem “geistigen Eigentum” NVidia spricht. Irgendwelche genialen Treiber-Optimierungen? Ein Quake-Easteregg, dass bei einer speziellen Auflösung aktiviert wird?
    Meine Idee für eine kommende Hardware-Generation wäre die folgende: Alle Teile, die “geheim” sein sollen, werden direkt in der Hardware, z.B. mit Hilfe von FPGAs entwickelt. Die Hardware wird nun über weiter abstrahiertere Interfaces dem Kernel (Windows, Linux oder sonstwas) zur Verfügung gestellt. Bei einem Update der (Hardware-)Treiber profitieren alle Betriebssysteme.

  • Der Treiber wird durch die breitere Nutzerbasis von mehr Personen überprüft und auch getestet.
  • Machen wir uns nichts vor: Linux-Benutzer sind zum größten Teil Frickler – ich zähle natürlich auch dazu. Viele Frickler sind bei einem Problem bereit, Zeit in die Lösung zu investieren und wenn nötig auch dafür neue Programmiersprachen oder Techniken zu erlernen.
    Henrik Ibsen sagte mal “Weltverbesserer gibt es genug, aber einen Nagel richtig einschlagen können die wenigsten” – ich behaupte mal eher folgendes: “Frickler gibt es genug und die meisten probieren den Nagel einzuschlagen bis er wirklich sitzt.”
  • Durch die große Anzahl von Entwicklern, die Zugriff auf den Quellcode haben, lassen sich Features oder Performance-Optimierungen einfacher implementieren oder sich eben eine Grundlage für eine neue Grafikkarten-Generation schaffen.

Der Grund für diesen Post lieferte mir konkret NVidia. Vor einigen Wochen bestellte ich mir ein Zotac ION-Board, dass als Grundlage für meinen neuen Server und als DVD-Player dienen sollte.
Nun ist es aber so, dass mein Fernseher in Kombination mit dem HDMI-Ausgang des Boards einen extremen Overscan produziert, dass man von der gesamten Oberfläche 3/4 auf dem Fernseher sieht.

Sucht man in den Foren von NVidia nach “Overscan”, findet man massig Einträge, die sich damit befassen. Mich stört es ganz besonders, dass der Windows-Treiber die Möglichkeit bietet, das Overscanning zu neutralisieren. Dieses Feature ist aber unter Linux – in der äußerst armseeligen – Konfigurationsoberfläche  nicht vorhande und lässt sich auch nicht per Xorg.conf vernünftig einstellen.

Ganz ehrlich: Hätte ich den Quellcode für den NVidia-Treiber, wäre ich bereit, mich des Themen “Treiber-Entwicklung unter Linux” und “Overscanning” zu stellen – so sehr stört mich dieser Bug.

Rautiges 2009-07-14

Momentan vertreibe ich mir die Zeit mit der Konfiguration des Zotac ION Boards, deshalb hier eine kurze Übersicht über die letzte Woche

  • Empfehlenswerte Websites sind www.faql.de (behandelt Themen zur deutschen Sprache, unter anderem wird erklärt, dass es das Wort “Stati” als Plural von “Status” nicht existiert) und www.encyclopediadramatica.com (über Alltags-Internetsprache).
  • Florian kämpft momentan mit der Konfiguration von MPD und Icecast2. Wir (und andere) haben das Problem, dass mit WinAMP und VLC der OGG-Stream nach Ende eines Tracks oder Wechsel während des Abspielens eines Tracks der komplette Stream abbricht. Sehr ominöses Problem, Foren-Threads deuten darauf hin, dass mit dem Wechsel der OGG-Header zu tun hat.
  • Ich habe die Woche einen Patch für vboxtool eingereicht, so dass die richtigen Maschinen gestartet werden, falls der Benutzer, der vboxtool aufruft, nicht identisch ist, mit dem ggw. Benutzer. Mehr Infos dazu gibt es im Firmen-Entwickler-Blog.
  • Im Trac von VirtualBox habe ich außerdem einen Bug-Eintrag hinterlassen, da bei mir hin und wieder die  SSH-Netzwerkverbindung abbricht.
  • Auf ganzer Linie kämpfe ich mit dem Zotac ION-Board:
    • Die Auflösung auf meinem Fernseher wird falsch dargestellt. Es gibt unsichtbare Bereiche oberhalb und unterhalb des sichtbaren Bereichs. Das Panning funktioniert nicht, ebenso diverse X-Konfigurationseinstellungen. Meine Vermutung ist, dass das DVI-Signal vom HDMI-Eingang des Fernsehers falsch interpretiert wird.
    • Bei Windows Server 2003, das in einer VirtualBox-VM ist,  lassen sich keine Rollen mehr hinzufügen. Gestern wollte ich WINS und DHCP nachinstallieren – dies schlug aber aus unerfindlichen Gründen fehl. Ich habe mir die Install-Logs unter c:windowsdebug angeschaut, konnte aber nicht wirklich die Fehlerursache zu identifizieren. Es läuft wohl darauf hinaus, dass ich Windows Server 2003 neu installieren muss.
    • Winbind und Samba laufen noch nicht rund. Die Authentifizierung von Winbind am Active Directory über Kerberos funktioniert hingegen schon.
    • Audio-Ausgabe über HDMI, Video-Beschleunigung etc. konnte ich noch nicht testen, da o.g. Punkte erst einmal zu fixen sind.

Zugriff auf sourceforge.net per SFTP

Heute versuchte ich, mein Bonesim (Boolean Network Simulator) – Projekt auf sourceforge.net hochzuladen. In Ubuntu 9.04 ist leider der WebDAV-Support defekt, so dass der Upload per HTTPS bzw. DAVS nicht funktioniert. Glücklicherweise bietet sourceforge.net auch den Zugriff per SFTP an, so dass mit der URL sftp://frs.sourceforge.net/incoming/u/us/username/uploads die Dateien verschlüsselt übertragen werden können.

oracleDiff – a schema differential tool for Oracle

On friday last week I got a requirement from a co-worker. He asked me for a simple Java based application which compares two different revisions of Oracle database schemas. After some discussion about the sense of this tool, we made a quick requirement and workflow analysis.

  1. User extracts target database schema information with oracleDiff. Only column names and types are required. There is no need for exporting Stored Procedures, Functions, References and so on. Schema information should be stored as XML.
  2. User exports full table data with oracleDiff. The extracted data should be stored as binary or flat file – XML export for large data is too memory intensive.
  3. User does a manual upgrade of the changes with help of Oracle Enterprise Manager Console or other 3rd party tools.
  4. User imports exported data on upgraded database, oracleDiff asks for remapping of columns and informs about column type changes.

Yesterday I started the project and stumbled over two Oracle specific facts:

  1. DESC $TABLENAME does not work in PreparedStatements. You will receive ORA-00900 from Oracle JDBC driver. For retrieving table information you have to use SELECT * FROM user_tab_columns WHERE table_name = ?.
  2. As a long time MySQL programmer I used SHOW TABLES for retrieving all tables of a schema. This will also not work. You have to to use SELECT table_name FROM user_tables.

The current development status extracts the database schema information and compares two schemas. I hope that I will finish the tool within the next two weeks.

h2benchw2csv released / Benutzerfreundlichkeit Teil 2

Wie gestern angekündigt, wurde noch heute Nacht das Projekt freigeschaltet. So eben habe ich die Build-Scripte angepasst und die Version 1.0 auf Sourceforge hochgeladen. h2benchw2csv ist nun unter http://h2benchw2csv.sourceforge.net verfügbar.

Während der Projekteinrichtung musste ich feststellen, dass die Entwickler hinter der GUI von sf.net mittlerweile einiges getan haben. Die Zuweisung der Projektkategorien läuft nun per AJAX. Allerdings konnte ich feststellen, dass man einem Projekt unter Umständen leere Kategorien zuweisen kann.

Weiterhin funktioniert nun die Aktivierung / Deaktivierung von Projekt-Features (Mailing List, Tracker u.s.w.) ebenfalls per AJAX.

Neues sf.net-Projekt: h2benchw2csv / Ergebnis der iSCSI Performance-Tests

Die letzten beiden Tage habe ich unser SAN und das dahinter liegende iSCSI-Geraffel ausführlich mit h2benchw von Heise / c’t getestet. Da ich absolut keine Lust hatte, alle Ergebnisse in den Text-Dateien (waren knapp 20 Files) per Hand in Excel einzutippen, frickelte ich mir kurzerhand ein PHP-Script zusammen, dass mir aus den .txt-Dateien von h2benchw eine große CSV-Datei baut. Diese kann dann wiederum in Excel oder irgendeinem anderen Tabellen eingelesen werden.

Weiterhin unterstützt h2benchw2csv – so der Name des kleinen Scripts – die automatische Umwandlung der .ps-Dateien nach .pdf. Dies geschieht mit Hilfe des PDFCreators, der in der %PATH%-Variable verfügbar sein muss. Gegenwärtig ist h2benchw2csv noch im sf.net Approval State, sollte aber morgen oder übermorgen freigeschaltet werden.

Features:

  • Umwandeln von h2benchw .txt-Ergebnissen in eine CSV-Datei
  • Komplette Inhalte von Verzeichnissen können in der CSV-Datei gespeichert werden
  • Deutsch/Englisch
  • Umwandlung der h2benchw .ps-Dateien mit Hilfe des PDFCreators nach PDF
  • 100% Open Source und Kommandozeile
  • Benötigt wird nur PHP – es wird keine zusätzliche Bibliothek benötigt

Zu den Ergebnissen meiner iSCSI-Performance-Messung ist folgendes zu schreiben:

  1. Round-Robin oder Weighted Path in einem Verbund von 4 Netzwerkkarten auf Client und Server bringen rein gar nichts, wenn sie gemeinsam auf ein Target zugreifen. Die maximale Leserate betrug 75 MByte/s, die maximale Schreibrate 60 MByte/s. Wir gingen eigentlich davon aus, dass mit jeder (Gigabit)-Netzwerkkarte die Performance mitskaliert – also eine NIC: 70 MByte/s, zwei NICs 140 MByte/s u.s.w. Dem ist aber eindeutig nicht so.
  2. Interessant war hingegen, dass bei 4 Targets und Fail Over der Gesamtdurchsatz auf ca. 200 MByte/s beim Lesen und 170 MByte/s beim Schreiben anstieg.
  3. Für mich schaut das nach einem Problem im iSCSI Initiator oder -Treiber aus.
  4. Bonding und Multipath gemeinsam benutzt bringen nichts.
  5. Die Firmware 1.46 des Areca 1231 kann nun vernünftig mit NTP-Servern umgehen – bringt aber keine bessere Performance
  6. FileIO ist beim Schreiben geringfügig schneller als BlockIO (2 MByte/s)
  7. Jumboframes (MTU 9000 auf Windows Server 2003 und 9014 auf DSS) brachten bei uns keinen Performance-Unterschied
  8. Fail Over ist schneller als Weighted Path, Weighted Path ist schneller als Round Robin
  9. Keine der vier Intel-Netzwerkkarten wurde unter Windows Server 2003 zu mehr als 50% ausgelastet. Hier gibt es eventuell auch Treiber-Probleme.
  10. Trotz allem ist unser iSCSI-SAN fix 😉

Mathe-Aufgaben umsetzen mit LaTeX & Boolesche Netze

Von den 32 Aufgaben in Mathematisch-Logische Grundlagen habe ich die letzten beiden Tage 8 Stück geschafft. Nun geht es daran, meine  Schmierzettel in ein vernünftiges Format auf den Rechner zu bringen.

Damit ich ein vernünftiges Layout bei den Lösungen bekomme, werde ich zum ersten Mal LaTeX produktiv einsetzen. Unter Linux gibt es z.B. Texmaker, Kile und LyX als grafische Editoren, die ich in den nächsten Wochen auf Herz und Nieren prüfen werde.

Nachdem ich in meinem letzten Post schon über das Youtube-Video bezüglich der vollständigen Induktion berichte, will ich hier noch auf das Mathe-Portal von Wikischool verweisen, das jede Menge Infos enthält. Für mich ideal, da meine Mathekenntnisse doch etwas eingerostet sind 😉

Gestern habe ich übrigens im Zuge des Kapitels “Boolesche Netze” einen Simulator in PHP geschrieben. Die Features sind:

  • Unterstützung von jedem beliebigen zweistelligen Junktor
  • Beliebig viele Aktoren sind in dem Netz möglich
  • Anzeige der Vorperiode
  • Anzeige der Periode
  • Anzeige der Attraktoren
  • Durchlauf aller möglichen Start-Kombinationen eines Netzes

Das Script läuft zwar nur auf der Konsole, ich werde eventuell daraus eine kleine Web-Anwendung basteln. Möglich ist auch, dass ich das Script in JavaScript umwandeln werde und daraus dann ein schnuckeliges Web Zwo Null-Dingens mache. Ein Projektantrag bei sourceforge.net folgt die nächsten Tage 😉

Trunking / Bonding / Multipath

Schon einmal im Internet nach Trunking, Bonding und/oder Multipath gesucht und sich gefragt, was brauche ich eigentlich? Aus aktuellem Anlass haben wir heute einige Experimente mit diesen Verfahren gemacht.

Warum?

Die Evolution der Virtualisierung unserer Maschinen in der Firma hat mittlerweile einen langen Weg hinter sich. Zu Anfang setzten wir auf Virtual Server 2005 von Microsoft, danach folgte dann ein VMWare Server. Auf den Clients wird zu Testzwecken weiterhin VirtualBox benutzt. Warum wir von den Microsoft und VMWare-Lösungen weg wollten, war die mieserable Performance. Die Windows-Systemen liefen unter VS2005 relativ schnell. Linux hingegen ließ sich faktisch gar nicht benutzen (Kernel 2.6.20 aufwärts, Ubuntu, Debian, SuSE). Somit hatten wir im ersten Schritt VMWare neben VS2005 laufen. Allerdings verbrauchten beide Virtualisierungslösungen im Parallel-Betrieb doch einiges an Ressourcen, so dass wir von VS2005 nach VMWare migrierten. Bereits nach einigen Tagen stellten wir enorme Probleme unter Windows-Gästen beim Festplattenzugriff fest.

Wegen fehlender Debug-Möglichkeiten lag unser Schluss darin, dass vermutlich das darunterliegende RAID5 (3Ware-Controller) mit dem VMWare Write-Operations nicht klar kam. Außerdem liefen die Windows-GUIs nicht perforrmant genug.

Nach zwei Jahren des Herumärgerns starteten wir vor zwei Wochen, den XENServer zu evaluieren. Dabei ist es so, dass alle unsere virtuellen Fesplatten in unserem SAN (open-E DSS) liegen sollten. SAN, physikalische XEN-Maschine und zwei weitere Server sind an einem Netgear-Gigabit-Switch angeschlossen.

Trunking / Bonding

Trunking bedeutet, dass mehrere physikalische Leitungen zu einer “dicken” logischen Leitung zusammengelegt werden. Dies hat den Vorteil, dass der Gesamtz-Datendurchsatz (theoretisch!) um die Anzahl und den Durchsatz der zusätzlichen Leitungen erhöht werden würde. Damit ein Trunk erstellt werden kann, kommt das Link Aggregation Control Protocol zum Einsatz. Dieses Protokoll bildet den IEEE-Standard 802.3ad ab. Auf den Netgear-Switches nennt sich diese Funktion Link Aggregation Group (LAG).

Der Begriff Trunking wird häufig auf Seiten des Switches verwendet. Bei den Netzwerkkarten an sich wird weitaus häufiger der Begriff des “Bondings”, d.h. das Zusammenfassen von mehrerer Netzwerkkarten zu einer, benutzt. Grundsätzlich sind die Begriffe Bonding und Trunking aber gleichbedeutend zu benutzen.

Beim Bonding gibt es verschiedene Modi. Unter Windows mit einer Intel PRO/1000 PT Quad Port LP kann man aber beispielsweise keinen direkten Modus auswählen, es wird immer der Modus 802.3ad benutzt.

Linux bzw. Linux Channel Bonding Project hingegen kennt weitere Modi:

  • mode=0 (balance-rr): Dabei werden alle gebondeten Netzwerkkarten nacheinander benutzt. Paket a wird über phys. eth0 gesendet, Paket b über eth1 u.s.w. (Load Balancing und Fehlertolerant)
  • mode=1 (active-backup): Es ist immer eine Netzwerkkarte aus dem Bond aktiv. Sobald diese deaktiviert wird (Netzwerkkarte kaputt, Link zwischen NIC und Switch weg etc.) wird die nächste Karte aus dem Bond aktiviert (Fehlertolerant)
  • mode=2 (balance-xor): Für jede Anfrage wird eine Netzwerkkarte ausgewählt und diese wird im Laufe der Verbindung weiter benutzt (Fehlertolerant und Load Balancing)
  • mode=3 (broadcast): Der Name ist Programm: Auf allen NICs wird übertragen (Fehlertolerant)
  • mode=4 (802.3ad): Hiermit wird 802.3ad für das Bond benutzt. Der Switch muss das Protokoll unterstützen.
  • mode=5 (balance-tlb): Steht für Transmit Load Balancing, wenn ein Slave aufällt, wird die MAC-Adresse von einem anderen Bond-Mitglied übernommen (Fehlertolerant)
  • mode=6 (balance-alb): Steht für Adaptive Load Balancing, hier werden die ARP-Requests des lokalen Systems vom Bonding-Treiber überschrieben (Fehlertolerant)

Mehr Infos auf englisch gibt es bei Linux Horizon, von wo ich auch die Informationen her habe.

Bonding im XENServer

Im XENServer 5.x kommt das oben genannte Linux Channel Bonding Project zum Einsatz. Unsere bisherige Hardware lief mit einer LACP nach 802.3ad. Nachdem wir in der Oberfläche des XenCenters ein neues Bond erstellt hatten, wurde es auch wunderbar hochgefahren. Allerdings arbeitet das Bond standardmäßig in einem eigenen Modus. Damit war es nicht möglich, unser SAN anzupingen. SAN und XEN lagen im gleichen Subnetz. Grund dafür war eben, dass die Modi sich unterschieden. Damit nun XENServer den Modus 802.3ad benutzt, muss unter /etc/sysconfig/networks der Eintrag BONDING_OPTS=”mode=4″ hinzugefügt werden. Danach müssen die Interfaces neu gestartet werden. Im Anschluss konnte sich der XENServer über den NetGear GS748T mit dem SAN verbinden.

Wenn bis zu dieser Stelle durchgehalten hast, würde dich sicherlich auch folgende PDF interessieren: Virtualiasierung und Netzwerkstruktur 😉

Multipath!

Beim Zugriff auf unser SAN per iSCSI besteht die Möglichkeit, Multipath zu aktivieren.

Beim Bonding besitzt jedes Bond genau eine IP-Adresse. Die einzelnen Bond-Slaves (Netzwerkkarten) besitzen keine fest zugewiesene IP-Adresse mehr. Bei einem Bond aus 4 Netzwerkkarten würde das Bond über eine IP-Adresse angesprochen werden. Im Gegensatz dazu besitzt beim Multipath jeder Netzwerkkarte eine IP-Adresse. Dabei ist es aber wichtig, dass jede Adresse in einem unterschiedlichen Subnetz liegt. Anhand des Subnetzes wird entschieden, an welche Karte das Paket letztendlich gesendet wird. Multipath erhöht durch diese Technik zum einen den Datendurchsatz, zum anderen bietet es höhere Fehlertoleranz.

Beim Multipath gibt es ebenfalls verschiedene Modi, die Auswirkungen auf die Performance und Sicherheit haben:

  • Fail Over – entspricht dem mode=2 beim Bonding
  • Round Robin – die Pakete werden gleich auf die einzelnen Pfade verteilt (mode=0 beim Bonding)
  • Round Robin With Subset – eine Mischung zwischen Fail Over und Round Robin. Sobald eine der aktiven Pfade wegbricht, werden die inaktiven Pfade aus dem Standby aufgeweckt und benutzt.
  • Least Queue Depth – hiermit wird ein Lastenausgleich gefahren, der dem Round Robin entspricht. Wenn die einzelnen Pfade vom Durchsatz her nicht gleichmäßig augelastet sind, wird versucht, die Daten über die weniger benutzten Pfade zu transportieren.
  • Weighted Paths – Lastenausgleich, der vom Benutzer eingstellt werden kann. Damit lassen sich quasi manuelle Routing-Metriken festlegen
  • Least Blocks – Die Anfragen werden an den Pfad weitergeleitet, der die kleinste Nummer an blockierenden I/O-Zugriffen besitzt.

Fragen? Fragen!

  • Soll ich Trunking oder Multipath einsetzen?
    Das hängt von der Umgebung ab. Mit Trunking hat man mehr ein paar mehr Möglichkeiten, was die einzelnen Modi angeht. Allerdings funktionieren nicht alle Modi auf allen Betriebssystemen. Für 802.3ad müssen außerdem die Switches das Protokoll unterstützen. Multipath bedeutet höheren Konfigurationsaufwand, da jede Netzwerkkarte eine eigene IP in einem eigenen Subnetz benötigt.
  • Kann ich Multipath über einen LACP-Trunk fahren?
    Ja, ich habe zwei Bondings auf jedem Server eingerichtet und diese dann mit Multipath (Round Robin) getestet. Die Verbindung funktioniert einwandfrei, von der Performance her gibt es aber keinen Unterschied zum normalen Bonding. Außerdem ist es doppelter Konfigurationsaufwand, sowohl Bonding als auch Multipath einzurichten.
  • Ist Bonding oder Multipath performanter?
    Im Test war das Bonding/Trunking beim Lesen geringfügig langsamer als Multipath. Beim Schreiben hingegen war Multipath fast doppelt so schnell.
  • Welches ist der schnellste Multipath-Modus?
    Im Test ergab sich, dass die Policy “Weighted Paths” mit ca. 4 MByte/s die Nase vorne hatte
  • Funktioniert Multipath auch unter Windows?
    Ja, der iSCSI Initiator von Microsoft hat dieses Feature implementiert.
  • Kann ich die Load Balance Policy “Least Queue Depth” oder “Least Blocks” ind der Kombination Microsoft iSCSI Initiatior und open-E DSS nutzen?
    Nein, in der Kombination Windows (Server 2003, XP, Vista) und open-E DSS ist diese Policy für Multipath nicht möglich.