Judgement Day

Bin Laden ist so tot wie ein toter Hund und Fischfutter.  US_Navy_SEALs_insignia

Glückwunsch an die Truppe für diesen Abschuss.

Hinterlasse einen Kommentar

Sortieren, Duplikate eliminieren und Zählindizes generieren

Mehrfach-Vorkommnisse einer Sache sind oft etwas Nützliches, weil darin eine Information, etwa eine Regelmäßigkeit, steckt. Manchmal sind Replicas auch notwendig, um Einheitlichkeit, etwa von Banknoten, oder um Verlässlichkeit, etwa einer experimentellen Anordnung, zu garantieren. Oft sind Mehrfach-Vorkommnisse aus Sicherheitsgründen gewünscht, etwa Kopien. Und manchmal sind Duplikate auch überflüssig, es kommt dabei auf den Zusammenhang an. Meist sind Duplikate in Datenbanken nicht gewünscht, weil unentdeckte Duplikate zum Beispiel Ergebnisse verfälschen können. So wäre es etwa recht unschön, wenn Buchungssätze zur selben Angelegenheit mehrfach vorkämen.
Für Datenbanken sollte man Vorkommnisse einer Sache und Speicherstelle einer Sache unterscheiden. In einem relationalen Datenbanksystem wird ein und dieselbe Sache gewöhnlich nur ein einziges Mal gespeichert. Mehrfache Vorkommnisse der Sache werden dann in Reports dynamisch generiert. Um dieselbe Informationsmenge in anderen Arten von Datenbanken bereitzustellen, sind Mehrfach-Speicherungen derselben Sache notwendig.
Es geht hier um eine Datenbank, zu einfach für Access, nicht einfach genug und zu üppig für Word, also das Richtige für Excel. Man stelle sich Projekte vor, an welchen jeweils einige Personen teilhaben. Die Größe der Personengruppen differieren von Projekt zu Projekt, die Anzahl der Teilnehmer ist jetzt nicht wichtig. Es kommt recht häufig vor, dass eine Person an mehreren Projekten mitwirkte. Neben der Projektgruppe könnte es noch einen Projektleiter und vielleicht auch eine Art Projektdesigner geben. Natürlich können noch viele weitere Informationen in die Datenbank einfließen, etwa der Name des Projekts, sein Aufführungs- oder Realisierungsdatum, das Projekt kann auch näher charakterisiert werden durch Kategorien und Unterkategorien, das Projekt könnte ferner kostenmäßig durchleuchtet werden, etc.
Wie in der untenstehenden Abbildung zu sehen, kommt zum Beispiel der Teilnehmer aa an mehreren Stellen vor. Und da eine Excel-Zelle eine Speicherstelle ist, wird aa entsprechend mehrfach gespeichert, so viele Male wie ein Projekt vorkommt, an dem er teilnahm. Um die Zugehörigkeitsbeziehungen zwischen Teilnehmern und Projekten darzustellen, sind in Excel so viele Listen notwendig, wie es Projekte gibt. Jede Zeile stellt eine eigene Liste dar. Das würde im Datenbanksystem Access anders aussehen. Dort würden nur zwei Listen benötigt, die der Projekte und die der Teilnehmer. Während Beziehungen zwischen Objekten (hier die Zugehörigkeitsbeziehung der “Teilnahme”) in Excel ikonisch in einer Matrix dargestellt werden müssen, werden diese in Access durch die höherstufige Zeichenbeziehung der Indizierung symbolisiert. Was im Excel-Blatt unten dargestellt ist, wird in Access durch die Liste der Projekte, die Liste der Teilnehmer und eine Relation 1:n zwischen Projekt und Teilnehmer erreicht. Doch zurück zur Excel-Datenbank.
Das wichtigste sind im Augenblick diejenigen beteiligten Personen, die zu den Projektgruppen gehören. Die Excel-Datenbank, in der all diese Informationen abgelegt sind, ist typischerweise ein zweidimensionales, in Zeilen und Spalten organisiertes Gebilde. Jedes Projekt nimmt eine Zeile des Tabellenblattes ein. Die Projekte liegen bereits alphanumerisch sortiert in diesem Blatt vor. In Spalte A also der Name des Projektes, in einigen Folgespalten beliebige Informationen zum Projekt, und im Beispiel unten ab Spalte J folgen sodann die Projektteilnehmer namentlich, also für jeden Teilnehmernamen eine weitere Spalte in der Projektzeile. Da die Projektgruppen verschieden groß sind, laufen manche Projekte bis Spalte W oder gar AA, andere nur bis Spalte N oder P. Die Datenbank hat also bildlich gesagt rechts einen Flatterrand.
Anbei eine Abbildung, die die Struktur der Datenbank verdeutlicht.

Struktur-Projekt-DB (2)

Im Projekt 10010114 beispielsweise waren die Teilnehmer ka, tz, ee und nb involviert, am Projekt Alpha3 ebenfalls ka, sowie w, ll, ik und zt.

Die Menge aller Teilnehmer an allen Projekten bildet also wie oben zu sehen einen unsortierten Block, in dem Teilnehmernamen auch mehrfach vorkommen. Die Aufgabe besteht nun darin, in einem weiteren Tabellenblatt eine alphabetisch sortierte Liste von Teilnehmern ohne Duplikate zu generieren. Statt Namen mehrfach zu listen sollen die Duplikate gezählt werden und hinter die erste Inskription eines Namens ein entsprechender Zählvermerk, z.B. Peter Falk (4), gestellt werden. Die Duplikate sollen gelöscht werden. Das Ergebnis der gesamten Operation soll etwa wie folgt aussehen.

Sortierungsergebnis (1)

Die Informationen, die gewonnen werden sollen, sind also die Menge der an allen Projekten beteiligten Personen in alphabetischer Reihenfolge (Anzahl der Personen ist die Anzahl der Teilnehmer abzüglich der Duplikate) und die Anzahl der Teilnahmen einer jeden Person an Projekten. Um dies zu erreichen verwendet man das in Excel zur Verfügung stehende VBA. In einem ersten Schritt wird die alphabetisch sortierte Liste der Personen (also die Duplikat-freie Liste) erstellt. Anschließend kümmern wir uns um die Personennamen anzufügenden Zähleinträge bezüglich der Teilnahmen der Personen.

Alphabetische Sortierung und Eliminierung von Duplikaten

Das Programm hierzu gestaltet sich zunächst folgendermaßen:

Option Explicit
Option Base 1

‚Concept, Code by april.shower

Public Sub OrderingParticipants()
    Application.ScreenUpdating = False
    Worksheets(„Participants“).Cells.Clear
    Const c1 = „N.N.“
    Worksheets(„Project“).Activate
    ‚
    ‚prepairing worksheet(1)
    ‚=======================
    ‚deleting empty rows in sheet 1
    der
    ‚
    ‚determining number of at present used rows
    Dim z1 As Long
    z1 = 1
    Do Until IsEmpty(Cells(z1, 1))
        z1 = z1 + 1
    Loop
    ‚providing for a unintersected range of participants
    Dim e1 As Long
    For e1 = 1 To z1 – 1
        If IsEmpty(Cells(e1, 11)) Then
            If Cells(e1, 1).Characters.Count = 1 Then
                Cells(e1, 11).Value = Cells(e1, 1).Value
            Else
                Cells(e1, 11).Value = c1
            End If
        End If
    Next

    ‚
    ‚inserting empty row after row one (delimiting actor range from head row)
    Worksheets(„Projects“).Rows(2).Insert
    ‚
    ‚reading data into array
    ‚=======================
    ‚defining participant range in sheet >Projects<
    Dim b1 As Range
    Set b1 = Worksheets(1).Range(„K3“).CurrentRegion
    ‚
    ‚counting columns
    Dim z2 As Long
    z2 = b1.Columns.Count
   
‚reading into array
   
Dim matrix1 As Variant
    matrix1 = b1.Value
    ‚
    ‚well-ordered copying from array to worksheet(2)
    ‚===============================================
    ‚array delivering sort criteria for worksheet(2)
    Dim ar1 As Variant
    ar1 = Array(„A“, „B“, „C“, „D“, „E“, „F“, „G“, „H“, „I“, „J“, „K“, „L“, „M“, „N“, „O“, „P“, „Q“, „R“, „S“, „T“, „U“, „V“, „W“, „X“, „Y“, „Z“)
    ‚
    ’sorting and transfering
    Dim e3 As Long, e4 As Long, z3 As Long, z4 As Long, z5 As Long, p1 As Long
    ‚row numerator array matrix1
    z3 = 1
    ‚column numerator array matrix1
    z4 = 1
    ‚column numerator participant worksheet
    z5 = 0
    ‚
    Do
        ‚delivering the characters as criteria from ar1-array
        z5 = z5 + 1
        ‚e4 varies colums
        For e4 = z4 To z2
            ‚e3 varies rows
            For e3 = z3 To UBound(matrix1)
                ’some don’t cares
                If Not (matrix1(e3, e4) = c1 Or IsEmpty(matrix1(e3, e4)) = True Or Len(matrix1(e3, e4)) = 1) Then
                    ‚if the kriterium >first character< matches
                    If Left(matrix1(e3, e4), 1) = ar1(z5) Then
                        ‚determining first empty row
                        p1 = 1
                        Do While Not IsEmpty(Worksheets(2).Cells(p1, z5))
                            p1 = p1 + 1
                        Loop
                        ‚copying matches to actors sheet into the next unused cell of the applicable column
                        Worksheets(2).Cells(p1, z5).Value = matrix1(e3, e4)
                    End If
                End If
            Next e3
        Next e4
    Loop Until z5 = UBound(ar1)
    ‚
    ‚fine finishing participants sheet
    ‚===========================
    ‚columns in participants table sorting alphabetically at any one time, deleting doubles, shifting up the rest of the column
    Dim z6 As Long, z7 As Long, z8 As Long, z9 As Long, z10 As Long, t1 As Long, t2 As Long, k2 As Long, sa1 As Range
    z10 = 0
    Set sa1 = Worksheets(2).Range(„A1“).CurrentRegion
    ‚denotes columns
    For z6 = 1 To z5
        ’sorting column in worksheet(2)
        sa1.Columns(z6).Sort key1:=sa1.Columns(z6), order1:=xlAscending, Header:=xlNo, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        t2 = 0
        k2 = 0
        Do Until IsEmpty(Worksheets(2).Cells(k2 + 1, z6))
            k2 = k2 + 1
        Loop
        ‚
        If k2 = 1 Then
            Worksheets(2).Cells(1, z6).Value = Worksheets(2).Cells(1, z6).Value & Space(1) & „(1)“
        ElseIf k2 > 1 Then
            For z7 = 1 To k2
                ‚adapting z7-loop to the actual number of rows of the column
                If z7 >= k2 – t2 Then
                    Exit For
                End If

                t1 = 0
                For z8 = 1 To k2
                    ‚in the case of two or more instances of a name take care of the same either capitalization or use of small initial letters
                    ’since the comparison operator >=< works ‚binary‘ by default, that is case sensitive
                    ‚as option the instruction „option compare text“ can be declared before the procedure in order to prevent case sensivity
                    If Worksheets(2).Cells(z7, z6).Value = Worksheets(2).Cells(z7 + z8, z6).Value Then
                        t1 = t1 + 1
                        t2 = t2 + 1
                    Else
                       
Worksheets(2).Cells(z7, z6).Value = Worksheets(2).Cells(z7, z6).Value & Space(1) & „(“ & t1 + 1 & „)“
                        Exit For
                    End If
                Next z8
                ‚deleting doubles
                If t1 > 0 Then
                    For z9 = 1 To t1
                        ‚t1 times deleting of the z7+1 th row and shifting up the rest
                        Worksheets(2).Cells(z7 + 1, z6).Delete xlShiftUp
                    Next z9
                End If
            Next z7
        End If
        ‚count participants names
        z10 = z10 + k2 – t2
    Next z6
    ‚
    Application.ScreenUpdating = True
    ‚
    MsgBox „Updating Participants Done“ & vbCrLf & „Your Table of Participants now contains “ & z10 & “ Names“, vbApplicationModal
    ‚
End Sub

Sub der()
    ‚delete empty rows
   Dim r1 As Integer, lr1 As Integer
   lr1 = Cells.SpecialCells(xlCellTypeLastCell).Row
   For r1 = lr1 To 1 Step -1
      If Application.CountA(Rows(r1)) = 0 Then
         Rows(r1).Delete
      End If
   Next r1
End Sub

 

Das Programm enthält eine Sub-Routine ‘der’, die lediglich Leerzeilen löscht, und eine aus drei Teilen bestehende Hauptroutine. Zunächst wird das Datenblatt in einen definierten Ausgangszustand gebracht und damit für das weitere Vorgehen geeignet präpariert. Insbesondere muss der Block der Teilnehmernamen einen ununterbrochenen Bereich bilden derart, dass er ohne weiteres in ein Array ‘matrix1’ gelesen werden kann.
Im zweiten Teil wird das Tabellenblatt ‘worksheet2’ aus dem Array ‘matrix1’ alphabetisch geordnet befüllt. Dazu liefert ein weiteres Array ‘ar1’ das alphabetische Ordnungskriterium. Das gleichzeitige Auslesen des Arrays, Sortieren zur Laufzeit und Eintragen in das neue Datenblatt geschieht durch ein vierfach geschachteltes Schleifen-Konstrukt (do, for, for, do). Ergebnis ist zunächst die spaltenmäßige alphabetische Sortierung aller Teilnehmer (natürlich losgelöst von jeder Teilnahme, also der Zuordnung zu Projekten (wie auf Blatt 1)).
Der dritte Teil führt dann eine innerspaltenmäßige Sortierung durch und überführt die entstandene Ordnung der Teilnehmer in eine Ordnung der Personen, indem die Duplikate gelöscht und eventuell noch darunter befindliche Namen entsprechend in die frei gewordenen Zellen nach oben geschoben werden. Dieses wird durch eine diesmal dreifach geschachtelte for-for-for-Schleife bewirkt. Dabei variiert die oberste for-Schleife ‘z6’ die Spalten. Die mittlere Schleife ‘z7’ hat die Aufgabe, die Personennamen zu durchlaufen und Duplikate zu löschen, und die innere Schleife ‘z8’ macht Duplikate ausfindig und zählt sie. Das z7-z8-Zusammenspiel bewirkt die Unterscheidbarkeit von Teilnehmern und bloßen Personen, indem die Duplikate durch sukzessive Vergleiche von jeweiliger Vorgängerzeile mit jeweiliger Nachfolgerzeile herausgefiltert werden.
Das Kernstück der Sache besteht also aus etwas ganz einfach Anmutendem, einem Vergleich.

Duplikate in Zählindizes ummünzen

In einem zweiten Schritt geht es nun darum, eine jede verbleibende Namensinstanz auf Basis der vorgefundenen Duplikate mit einem entsprechenden Zähleintrag, wie in dem zweiten Bild oben, zu versehen. Da die Duplikate ja bereits, zwecks Steuerung der Löschvorgänge, gezählt sind, kann das so aufwendig nicht sein. Es ist jetzt nur noch der dritte Part der Haupt-Routine zu betrachten und anscheinend muss nur die geeignete Stelle innerhalb des dreifach geschachtelten for-Konstrukts für die Anweisung zum Eintragen der Zählergebnisse ausgemacht werden. Ein schnell getaner Versuch (im Code-Teil blau markiert) brachte das Programm jedoch dazu, recht kuriose Ergebnisse bezüglich der Zähleinträge zu produzieren.
Im Falle meiner Anwendung des Programms geht es derzeit um etwa 700 Projekte und circa 2300 Namen. Die Kuriosität des Ergebnisses besteht darin, dass das Verhalten an den fehlerhaften Ergebnis-Stellen jedenfalls keiner offensichtlichen Regelmäßigkeit gehorcht. Möglicherweise ist die Datenbasis zu klein, um die Regularität zu sehen. Jedenfalls ließ die Routine gelegentlich Zähleinträge aus, und zwar stets in letzten Zeilen irgendwelcher Spalten, die ansonsten durch nichts sonderlich ausgezeichnet schienen. Weder zeigte sich eine spaltenmäßige Regelmäßigkeit, noch eine Regelmäßigkeit hinsichtlich der Anzahl von befüllten Zeilen in den betroffenen Spalten. Und es kam sogar vor, dass eine Spalte mit einer bestimmten Anzahl Zeilen in der letzten Zeile einen Zähleintrag aufwies, während eine andere Spalte mit derselben Anzahl Zeilen keinen Zähleintrag erhielt. Außerdem kam die Routine nicht zurecht mit einmaligen Vorkommnissen von Namen eines Initials. Das wurde durch die Formulierung einer Bedingung korrigiert wie sie die erste blaue Markierung zeigt.
Die Sache war Grund genug, sich ein Modell auszudenken, an welchem das Verhalten des abschließenden dritten Teils (das for-for-for-Konstrukt) der Routine kontrolliert werden kann. Das Modell sollte kompakt sein, aber auch ausreichend kritisch, um die typischerweise auftretenden Fälle zu beleuchten.

  Fall a b c d e f g h
Zeile 1 x x x x x x x x
2 y x x y x y x y
3 z x y y x z y y
4 w x y y y z z z

Ferner wird noch ein Fall bestehend aus der Zeilen-Folge {a, a, a, b, b, c, d, e, e, e, f, g, h, h} betrachtet.

Gehen wir beispielhaft mal einige Fälle durch, um die Funktionsweise des Konstrukts zu sehen. Die äußere for-Schleife z6 nimmt die Werte 1 bis z5 an. z5 wiederum ist ein Zähler, der sich aus dem Hochzählen der Elemente des Array ar1 ergibt, also der Literale, die das Ordnungskriterium abgeben. z6 denotiert also die Nummer der Spalte. Tritt die Routine in die Spalte ein, werden deren Zeileneinträge zunächst ebenfalls alphabetisch sortiert. Anschließend werden die Einträge der Spalte in der Variable k2 gezählt. In den Modellfällen ist k2 = 4. Die for-Schleife z7 läuft nur an, wenn es überhaupt Einträge in der Spalte z6 gibt. Zudem machte es ursprünglich Probleme, wenn es nur einen einzigen Eintrag in der Spalte gab; das wurde durch die unterschiedliche Behandlung k2=1 und k2>1 behoben. z7 denotiert die Zeilennummern der Spalte z6 und läuft bis k2. Die innere for-Schleife läuft ebenfalls bis k2 und stellt eine Art Zähler für die Nachfolgezeilen der aktuell in z7 betrachteten Zeile dar. Die Idee dabei ist, dass z8 relativ zu z7 Spalten-Abschnitte jeweils identischen Zelleninhalts sucht. z8 sucht also Duplikat-Abschnitte relativ zum jeweils aktuellen z7. Im Fall a gibt es einen solchen Abschnitt nicht, im Fall b reicht der Duplikat-Abschnitt von Zeile 2 bis Zeile 4, und im Fall c gibt es zwei jeweils einzeilige Abschnitte, die Duplikate relativ zu anderen Zeilen enthalten, nämlich die Zeile 2 und die Zeile 4.
z8 vergleicht nun den Inhalt der in z7 indizierten Zeile mit der nächsten Nachfolgezeile. Bei Identität werden t1 und t2 hochgezählt. Bei Nicht-Identität wird die z8-Schleife abgebrochen. Das ist zulässig, weil aufgrund der vorherigen alphabetischen Sortierung der Spalte nicht mit einem weiteren Duplikat relativ zu z7 an irgendeiner späteren Stelle gerechnet werden kann. Die Stelle vor diesem Abbruch per exit scheint nun geeignet, einen entsprechenden Zähleintrag entsprechend der Anzahl der mit t1 festgestellten Duplikate vorzunehmen. Ist t1 = 0, wie im Fall a so ist kein Duplikat vorhanden und der Zähleintrag lautet auf “t1 + 1”, also “(1)”. Wenn t1 = 0, wird die Bedingung für eine Löschung verfehlt und z7 zählt sich weiter und betrachtet die nächste Zeile. z8 vergleicht wiederum die dritte Zeile mit der zweiten, t1 bleibt 0, Zähleintrag in Zeile 2 wiederum (1), keine Löschung, z7 tritt in die dritte Zeile, und z8 stellt keine Übereinstimmung mit der vierten Zeile fest. Schließlich nimmt z7 den Wert 4 an. An dieser Stelle fehlt jedoch eine Nachfolgezeile mit Inhalt, den z8 mit z7 vergleichen könnte.
Ich fürchte, der Zeitpunkt, zu dem ich die Zeit hätte, nachzuprüfen, wie sich VBA verhält, wenn ein regulärer Zelleninhalt verglichen werden soll mit etwas, was ‘leere Zelle’ bedeutet, wird nie kommen. Daher sehe ich in einem solchen Vergleich der Einfachheit halber eine mögliche Fehlerquelle. Statt sich darauf verlassen, dass das VBA-Verhalten für den Zweck schon passend definiert sein wird, sollte das Programm besser von selbstdefinierten Mitteln Gebrauch machen. Daher müssen die Laufweiten der Schleifen und eventuellen sonstigen Abbruchbedingungen mal überdacht werden. Die z7-Schleife sollte nicht so viele Male laufen wie es gefüllte Zeilen in der Spalte gibt (k2 mal), sondern nur bis k2 – 1, also in den Modellfällen der Tabelle oben bis zur dritten Zeile. Denn mindestens eine jeweils nächste Zeile wird zu Vergleichszwecken in der z8-Schleife benötigt. Ebenso verhält es sich mit der Laufweite der z8-Schleife, die höchstens k2-1 mal laufen sollte, wie im Fall b augenscheinlich wird.
Nun ist es aber so, dass eventuell Zeilen gelöscht werden, nämlich wenn Duplikate vorkommen, und der Rest, so vorhanden, hochgerückt wird, so dass, aufgrund der vorherigen absoluten Festlegung der Anzahl Zeilen (k2) und der Laufweite (k2 – 1), sowohl z7 als auch z8 in eine Leerzeile laufen könnten, wodurch wiederum ein unliebsamer Verlass auf irgendwelche geeigneten Verhaltensdefinitionen von VBA nötig würde. Folglich muss neben den Laufweiten-Begrenzungen, die greifen, wenn nichts zu löschen war, mit zusätzlichen Abbruchbedingungen für die Schleifen, die dann wirken, wenn Löschungen stattfanden, gearbeitet werden. Metaphorisch gesprochen soll das gesamte Konstrukt die aufgrund seines Wirkens aktuellen Tatsachen kennen und seinen Status daran anpassen. Nachdem beispielsweise im Fall b die z8-Schleife drei Duplikate ermittelte, welche anschließend gelöscht wurden, sollte die z7-Schleife anschließend nicht noch zweimal leer weiterlaufen. Oder nehmen wir den Fall e. Hier soll z7 nicht dreimal laufen, aber auch nicht zweimal, denn wenn es dahin kommt, dass z7 die vierte Zeile betrachtet, dann folgt dahinter wiederum keine weitere Zeile, die z8 zu Vergleichszwecken heranziehen könnte. Also darf z7 im Fall e nur einmal laufen, und z8 muss drei mal laufen.
Wie geht der Fall a nun zu Ende, wenn die z7-Laufweite auf k2 – 1 angepasst wurde? z7 hat den Wert 3, z8 den Wert 1, es wird keine Übereinstimmung mit Zeile 4 festgestellt, so dass weiterhin t1 = 0 und t2 = 0 und Wechsel in den else-Zweig. Dort wird der Zähleintrag für die Zeile z7=3, nämlich “(1)”, veranlasst und die z8-Schleife per exit beendet. Eine Löschung findet nicht statt, da t1 = 0. Es folgt die next z7-Anweisung. Die z7-Schleife beginnt jedoch, da z7 den Wert 4 annähme, keinen neuen Lauf. Daher wird die Zeile 4 nicht mehr untersucht und kann auch keinen Zähleintrag erhalten. Und damit ist eine Fehlerquelle identifiziert.
Was folgt daraus? Zunächst, wenn z7 den Wert 3 und z8 den Wert 1 angenommen hat, ist der letzte mögliche Vergleich erfolgt und der Fall a vollständig durchlaufen, denn z7 (=3) + z8 (=1) = k2 (=4). Es ist lediglich so, dass aus diesem letzten Vergleich bisher nicht alle erforderlichen Konsequenzen gezogen wurden. Die Nicht-Identität von z7 und z7 + z8 bedeutet nicht nur, dass es in der Spalte nur eine Inskription von der Art, wie sie in der von z7 denotierten Zeile steht, gibt, sondern auch, und zwar unter der Voraussetzung, dass z7 + z8 = k2, dass es nur eine Inskription gibt von der Art, wie sie in der von z7 + z8 denotierten Zeile steht. Die in dieser Situation zulässige, aber bisher fehlende Konsequenz, besteht darin, wegen der Nicht-Identität von Zeile 3 und 4 nicht nur einen Zähleintrag für Zeile 3, sondern auch für Zeile 4 im else-Zweig zu veranlassen. Die Zulässigkeit hängt aber von einer zur Laufzeit erfüllten Bedingung z7 + z8 = k2 ab.
Wie wirken sich diese Korrekturen auf Fall b und c aus? Im Fall b stellt die Routine bei z7 = 1 drei Duplikate fest (t1 = 3). Bei z8 = 3 ist der Fall vollständig durchlaufen, z8 hat seine maximale Laufweite k2 – 1 erreicht, die anschließende Löschroutine entfernt die Zeilen 2 bis 4, und next z7 weist zum nächsten z7-Lauf (k2 – 1 ist hier noch nicht erreicht) an, der aufgrund der Löschungen jedoch ins Leere liefe, wenn nicht nach dem Eintritt in den z7-Lauf eine Abbruchbedingung formuliert wäre: z7 >= k2 – t2, hier also 2 >= 4 – 2. Dadurch bricht an dieser Stelle z7 ab und die Routine wendet sich der nächsten Kolumne (z6) zu, ohne dass ein Zähleintrag in der übrig gebliebenen ersten Zeile vorgenommen worden wäre. Also gibt es Fälle, in denen die Anweisung zu einem Zähleintrag sowie der Abbruch der z8-Schleife nicht erst im else-Zweig, sondern schon im if-Zweig erforderlich werden.
Wie lautet diese Bedingung? Der Grund für den Abbruch der Schleife und den Zähleintrag an dieser Stelle kann nur sein, dass z7 + z8 = k2 (und nicht dass keine weitere Übereinstimmung vorhanden ist, denn das führte in den else-Zweig). Betrachten wir daraufhin aber den Fall c. Wenn dort z7 = 1 und z8 = 1, ist die Bedingung z7 + z8 = k2 nicht erfüllt, t1 und t2 werden 1. Bei z8 = 2 wird keine Identität mehr festgestellt, im else-Zweig wird ein Zähleintrag für die erste Zeile generiert und z8 beendet. Die zweite Zeile wird gelöscht, der Rest nach oben geschoben. Bei z7 = 2 wird die vormals dritte Zeile (ein “y”) betrachtet. z8 = 1 vergleicht die neue zweite Zeile (“y”) mit der neuen dritten Zeile (“y”) und stellt Identität fest, bleibt also im if-Zweig. Aufgrund der Löschung der zweiten Zeile ist durch diesen Vergleich der Fall realiter vollständig durchlaufen. Das heißt, die Routine muss an dieser Stelle zu Ende kommen und die geforderten Zähleinträge durchführen. Die für den if-Zweig ins Auge gefasste Abbruchbedingung z7 + z8 = k2 (hier 2 + 1 = 4)  greift jedoch nicht, die Routine läuft ihrer Form wegen weiter.
Es ist klar, dass das Problem durch die Löschung von Zeilen und Neupositionierung der restlichen Zeilen entsteht. Wie ist dies zu berücksichtigen? Sehen wir uns die Verwendungs- und Wirkungsweise der Zähler t1 und  t2 an. Beide werden aus demselben Anlass hochgezählt, – ein (weiteres) Duplikat wird festgestellt -, aber verschieden verwendet. t1 soll die Duplikate innerhalb einer ununterbrochenen Serie von z8-Läufen kumulieren und damit einen Duplikat-Abschnitt definieren. Nach Verlassen der z8-Serie bestimmt t1 die Anzahl der Löschvorgänge der z7 + 1 ten Zeile. Dadurch werden alle zur aktuellen z8-Serie gehörigen Duplikat-Zeilen gelöscht und eventuell vorhandene Restzeilen entsprechend hochgerückt. Eintritt in einen weiteren z7-Lauf setzt t1 zurück, wodurch es zur Bestimmung eines anderen Duplikat-Abschnittes in einer neuen z8-Serie zur Verfügung steht. Mit dem Zurücksetzen von t1 geht aber auch Information verloren. Daher wird t2 anders verwendet. Es soll die Anzahl sämtlicher in einer Spalte vorhandenen Duplikate aller Duplikat-Serien aufsummieren. Denn diese Information ist erforderlich zur Bestimmung des gerade aktuellen Zustandes der bearbeiteten Spalte. Die Länge der Spalte ist daher nicht einfach k2, sondern muss als k2 – t2 bestimmt werden, also als Ausgangslänge abzüglich der Löschungen. Und die gesuchte Abbruchbedingung ist nicht z7 + z8 = k2, sondern z7 + z8 = k2 – t2.
Noch einmal zum Fall c. Wenn z7 = 2, hat t2 aus dem vorherigen Durchlauf von z7 den Wert 1, die zweite Zeile wurde gelöscht, der Rest hochgerückt. z8 vergleicht nun Zeile 2 mit Zeile 3 und erhöht wegen Übereinstimmung (im if-Zweig) t1 auf 1 und t2 auf 2. Der Fall ist an dieser Stelle vollständig durchlaufen, also ist der ausstehende Zähleintrag zu veranlassen und die Schleife abzubrechen. Die Bedingung für Zähleintrag und Abbruch soll nun also z7 + z8 = k2 – t2 sein. Doch diese Bedingung wird an dieser Stelle nicht erfüllt, denn 2 + 1 = 4 – 2 ist falsch. Wo liegt der Fehler? Nun, es gibt keinen Fehler (soweit ich sehe), die Überlegung ist nur noch nicht ganz zu Ende gebracht. Es muss noch berücksichtigt werden, dass ein solches Schleifen-Konstrukt ein prozessuales Gebilde ist. Und es ist für das Zutreffen eines Kriteriums von entscheidender Bedeutung, in welches Phase sich der Vorgang befindet. Es gilt also, die richtige Stelle für die Bedingung zu erraten. Sehen wir uns das Geschehen noch einmal an. In dem Zeitpunkt, in dem t2 hochgezählt wird, ist lediglich die Feststellung getroffen, dass es ein Duplikat gibt. Das ist zwar Anlass für eine Löschung und damit eine Verkürzung von k2 (k2 – n), aber die Löschung ist zu diesem Zeitpunkt noch gar nicht durchgeführt. Die Bedingung kann an dieser Stelle nicht zutreffen, insofern sie einen Vorgriff auf eine spätere Phase, in der die Löschung tatsächlich vollzogen wurde, darstellt. Der Zähleintrag und der Schleifenabbruch erfolgen, was die Länge der Spalte angeht, im Vorblick auf eine später stattfindende Löschung. Und der Umstand, dass später eine Löschung stattfinden wird und damit die Länge der Spalte wiederum abnimmt, wäre auch erst für einen neuerlichen z7-Lauf relevant (wenn er denn stattfände). Es verhält sich also so, dass erstens ein Duplikat festgestellt wird, was zweitens aber erst in einer späteren Phase gelöscht wird, so dass drittens die Länge der Spalte aktuell noch unverändert ist (weshalb an dieser Stelle realiter k2 nicht um t2 verkürzt ist). Und viertens muss die spätere tatsächliche Löschung in einem noch späteren eventuell stattfindenden z7- respektive z8-Lauf berücksichtigt werden können. Denn zu dem Zeitpunkt ist die Spalte dann tatsächlich um eine Duplikat-Serie kürzer geworden. Wie ist das zu bewerkstelligen? Nun, dazu ist ein Zähler (unten “dr” genannt) erforderlich der anders eingesetzt wird, nämlich an anderer Stelle hochzählt, eben zum Zeitpunkt des tatsächlichen Löschens, während er zum Zeitpunkt der Abfrage des Abbruch- und Zähleintrag-Kriteriums noch den Vorwert besitzt.

Der dritte Part der Hauptroutine sieht nunmehr folgendermaßen aus:

Dim z6 As Long, z7 As Long, z8 As Long, z9 As Long, z10 As Long, t1 As Long, t2 As Long, k2 As Long, dr As Long, sa1 As Range
    z9 = 0
    z10 = 0
    Set sa1 = Worksheets(2).Range(„A1“).CurrentRegion
    ‚
    For z6 = 1 To z5
        ‚anzahl tatsächlich gelöschter zeilen zu beginn jeder neuen kolummne null setzen
        dr = 0
        ‚
        ’sorting column in worksheet(2)
        sa1.Columns(z6).Sort key1:=sa1.Columns(z6), order1:=xlAscending, Header:=xlNo, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        t2 = 0
        t1 = 0
        k2 = 0

        ‚last used row of a column
        Do Until IsEmpty(Worksheets(2).Cells(k2 + 1, z6))
            k2 = k2 + 1
        Loop
        ‚
        If k2 = 1 Then
            Worksheets(2).Cells(1, z6).Value = Worksheets(2).Cells(1, z6).Value & Space(1) & „(1)“
        ElseIf k2 > 1 Then

            For z7 = 1 To k2 – 1
                If z7 >= k2 – dr Then
                    Exit For
                End If

                t1 = 0
                ‚
                for z8 = 1 to k2 – 1
                    If Worksheets(2).Cells(z7, z6).Value = Worksheets(2).Cells(z7 + z8, z6).Value Then
                        t1 = t1 + 1
                        t2 = t2 + 1
                        ‚
                        if z7 + z8 = k2 – dr then
                            Worksheets(2).Cells(z7, z6).Value = Worksheets(2).Cells(z7, z6).Value & Space(1) & „(“ & t1 + 1 & „)“
                            exit for
                        end if
                    Else
                        Worksheets(2).Cells(z7, z6).Value = Worksheets(2).Cells(z7, z6).Value & Space(1) & „(“ & t1 + 1 & „)“
                        ‚
                        if z8 = k2 – z7 – dr then
                            Worksheets(2).Cells(z7 + z8, z6).Value = Worksheets(2).Cells(z7 + z8, z6).Value & Space(1) & „(1)“
                        end if
                        Exit For
                    End If
                Next z8
                ‚gathering doubles and deleting, shifting up the rest
                If t1 > 0 Then
                    ‚wenn es mindestens eine Nachfolgezelle gleichen Inhalts gibt
                    For z9 = 1 To t1
                        Worksheets(2).Cells(z7 + 1, z6).Delete xlShiftUp
                        ‚zählt anzahl tatsächlich gelöschter zeilen hoch
                        dr = dr + 1
                    Next z9
                End If
            Next z7
            End If
        ‚count actor names
        z10 = z10 + k2 – t2
    Next z6

Das Durchspielen der Zeilen-Folge {a, a, a, b, b, c, d, e, e, e, f, g, h, h} muss hier jetzt nicht mehr vorgeführt werden. Der neue Code bearbeitet auch dieses Beispiel entsprechend den Anforderungen. Wer trotzdem eine Unzulänglichkeit findet, mag das gerne zur Kenntnis bringen.

Hinterlasse einen Kommentar

Make America Great Again

Hinterlasse einen Kommentar

Windows Home Server Bau IV (i)

chevrolet-silverado3500hd (1) 

…. to the limits (i)

Was ist ein Server? Nun, was macht ein Server? Ein Server stellt den am Netzwerk angeschlossenen Computern Daten und Dienste zur Verfügung, wodurch diese zu Clients werden. Daher ist ein Server im Wesentlichen eine Verfügbarkeitsmaschine (availability machine). Verfügbarkeit lässt sich über lange Zeiträume in Begriffen der Zuverlässigkeit (dependability = long run availability) messen, und das wichtigste Kriterium zur Beurteilung der kurzfristigen Tätigkeit eines Servers ist die Geschwindigkeit (performance = short run availability), mit der das Gerät die vorgesehenen Funktionen auszuführen in der Lage ist.
Die eben angebotene Bestimmung von Server-Sein über (die Bereitstellung von) Daten und Dienste(n) entspricht dem heute üblichen funktionalen (an Zwecken orientierten) definitorischen Verständnis. Demnach werden zwei mit einem Kabel verbundene Computer, auf denen wechselseitige Freigaben eingerichtet sind, bereits zu zwei Servern. Ein rein funktionales mitsamt einem daran anknüpfenden prozessualen Verständnis liegt aber für uns noch grundsätzlicher im Argen. Es wirkt ulkig, aber bekanntlich lässt sich mit einer HDD ein Nagel in die Wand schlagen. Ohne weiteres würde die funktionale Art der Bestimmung von Dingen die Welt ziemlich durcheinander wirbeln und zum Beispiel Festplatten zum Hammer erklären. Daher tritt, um der (ontologischen) Ordnung willen, das funktionale Verständnis in einer Verfeinerung auf, indem definitorisch von raumzeitlichen Einschränkungen Gebrauch gemacht wird. Etwa durch Verwendung eines Wörtchens wie “hauptsächlich” in “ist Server, wenn hauptsächlich …”. Das ist eine sehr moderne Sichtweise, die auch die heutige Physik bestimmt, in welcher sich bekanntlich die Welt als barocke Anordnung von Substanzen in die Raumzeit verkrochen hat, der Rest “besteht” nur noch aus Prozessen. Tröstlich immerhin, dass selbst hier noch Substanzen benötigt werden, wenn auch in ausgedünnter raumzeitlicher Form.
Was die Server angeht, so ist es praktisch einerlei (weil soweit ich sehe so gut wie nichts davon abhängt), ob man nun durch eine mehr funktionale Bestimmungsweise die Server-Basis etwas verbreitert und formaliter mehr Computer an höhere IT-Weihen gelangen, oder man ein engeres, substantial orientiertes Verständnis bevorzugt. Bei ganz anderen Gelegenheiten ist die Art des Verständnisses respektive der Beschreibungssprache jedoch keineswegs gleichgültig, aber diese (durchaus lebenswichtigen) Fälle sind hier nicht Thema. Ich persönlich würde jedenfalls eine Kombination aus beidem bevorzugen, es geht um Funktionen (Daten und Dienste), aber eben auch um die Art der Zurverfügungstellung. Und der substantiale Anteil dieses Verständnisses steckt in letzterem, der Weise der Verfügbarkeit. Ein Server-OS, das die Server-Funktionen einheitlich bereitstellt und fähig ist, das Netzwerk zu ordnen, sowie eine Hardware, die hohe Anforderungen an mechanischer, elektrischer und Daten-Zuverlässigkeit sowie an Performance erfüllen muss, sind daher nach meinem Verständnis unabdingbare Voraussetzungen. Ein Router, in dem ein DHCP-Dienst steckt, ist demnach kein Server, sondern höchstens eine Emanation einer Server-Funktion, nämlich der Ordnungsfunktion hinsichtlich des Netzwerks. 

Hier geht es jetzt also um Performance. Interessant wird es ja, wenn Lasten simultan auftreten. Wie verhält sich das System wohl, wenn zugleich ein Backup eines Client läuft, ein Film an einen anderen Client ausgeliefert wird, von einem dritten Client aus die Musik-Datenbank des Servers durchforstet wird, ein vierter Client in den Archiven ein Dokument sucht und der Server die Clients auf erforderliche Updates überprüft. Geht so etwas?
Weiter unten wurde eine Verbrauchsprojektion zum geplanten Server erstellt (und ein bisschen graphisch aufbereitet), – das war eine nette Fleißarbeit, die sogar nützlich ist, weil so besser einzuschätzen ist, auf welche (nicht abzugsfähigen) laufenden Kosten man sich beim Betrieb des Servers einlässt.
Und lässt sich denn nun auch die Leistung des Servers vorab (“theoretisch”) und in welchen Leistungsbegriffen ermitteln? Das dürfte schwierig werden, scheint mir. In einem rechnenden Funktionenzusammenhang das Leistungsverhalten einer solchen Maschine näherungsweise zu simulieren ist ja eine wahnsinnig attraktive Vorstellung, die jedoch etwas zu ambitioniert und mit den Mitteln hier ganz sicher nicht zu leisten ist. Dazu wäre ein prozessuales Modell des Systems und seiner Subsysteme in einer dynamisierten Beschreibungssprache erforderlich, die Formalisierung von Prozessabläufen und Datenflüssen, ein CPU-Modell inklusive Thread-Verarbeitung, wo und wie Zwischenspeicher/Warteschleifen arbeiten, wie die externen und internen Schnittstellen arbeiten, etc. Gibt es denn solche Ansätze zur Simulation komplexerer Systeme rein auf symbolischer Ebene? Wenn es zu irgendetwas nützlich ist, dann vielleicht. Wozu könnte es nützen? Wahrscheinlich wären solche Ansätze eher im theoretischen System-Design angesiedelt, weniger in der konkreten Systemplanung, weil es mutmaßlich günstiger ist, einfach vorhandene historische Erfahrungsdaten zu Planungszwecken heranzuziehen. Es gibt ja nicht nur eine Leistungsverwertungsproblematik (welche Leistung wird wozu benötigt), sondern auch eine Datenproblematik (welche Lasten werden dauerhaft auftreten, welche Spitzenlasten wird es geben). Der Gefahr, dass man als Systemplaner allzu sehr im Ungefähren rumstochern muss, begegnet man heute mit dem Konzept der Skalierbarkeit (von Leistung). Das scheint den Planungsbedarf oder mindestens das Erfordernis einer sehr exakten Planung, und damit das Risiko einer Fehlinvestition, zu senken. Andererseits ist solche Plastizität und Adaptivität gerade unter sich ändernden Umgebungsbedingungen (etwa Wachstum) eine sehr vorteilhafte Eigenschaft. Aber es scheint auch eine Art gegenläufiger Bewegung hierzu zu geben, indem durch Virtualisierung die Leistungsdichte des Systems sich erhöht, mit der mutmaßlichen Folge, dass das System eher Richtung Grenzbereich betrieben wird. Auf den kleinsten Nenner gebracht steigt so einfach die gehandelte Last und das System wird effizienter genutzt, allerdings wird so wahrscheinlich auch die Lebensdauer oder zumindest der Restwert des Systems verkürzt.

Eine weniger anspruchsvolle System-Abbildung würde daher vielleicht auch schon zu Systemplanungszwecken im Fall dieses Mini-Servers genügen. Ob und wie ein gegebener Computer die oben geschilderte, keineswegs außergewöhnliche Lastsituation handeln kann, ist ja eine ganz harmlose und berechtigte Frage. Ich schätze, dass all dies für den L3426-Prozessor kein großes Ding ist, es sei denn, dass Transcoding im Spiel wäre. Die Last betrifft eher das I/O-Subsystem und das Netzwerk, es scheint um Durchsatz, Bandbreite, vielleicht auch um das Antwortverhalten (responsiveness) des Servers zu gehen. Also wie ist die Frage zu beantworten? Was sind mögliche Engpässe des Systems, also solche Systemteile, die nicht oder wenig skalieren?

Wenn schon kein simulierendes prozessuales Modell geleistet werden kann, so lassen sich vielleicht aus einem statischen Strukturmodell einige erhellende Aussagen hinsichtlich der Performance-Möglichkeiten gewinnen. Das Problem eines statischen Ansatzes scheint die Abbildung des effektiven Zusammenspiels der einzelnen Komponenten zu sein. Leistungsdaten von einzelnen Komponenten sind zwar bekannt, aber es geht ja um Systemleistung. Wir wollen sehen.

… stay tuned

, , , , , , , ,

Hinterlasse einen Kommentar

Wie wird man Bürger?

Ich persönlich würde es also nicht wagen,
mich bei meinem Gastgeber mit Unbildung, Dummheit und Unverfrorenheit hervorzutun,
vor allem nicht, wenn ich vorhabe, zu bleiben und Bürger zu werden.
Ich würde meinen Gastgeber durch meine Bildung, mit meiner Kenntnis des Gastgeberhauses und seiner
Geschichte und seiner Sprache beeindrucken wollen und Referenz erweisen.
Ich hätte den unbedingten Ehrgeiz, mit dem, was ich kann, zum weiteren Ruhm des Gastgeberhauses beizutragen.
Und mit der vollumfänglichen Anerkennung seines Rechts würde ich belegen wollen,
dass ich meiner neuen Heimat vertraue.
Weswegen wäre ich sonst dort?
Weswegen sonst?

,

Hinterlasse einen Kommentar

Zum Wert der Demokratie

Was uns Demokratie wert ist, ihr Binnenwert, ist keine Frage
wir kennen unsere 2500 jährige Geschichte wie kein anderer,
weil wir sie selbst gemacht haben
doch ihr Außenwert, ihr Weltmarktwert, sinkt

wie erhöht man den Weltmarktwert einer Sache?
indem man sie verknappt, also sollten wir uns rar machen

Wodurch?
durch Stoppen der nach innen verlagerten Entwicklungshilfe,
sprich der massenhaften Immigration von Menschen, die in ihrer Welt niemals etwas Vergleichbares schufen
und durch Exportstop der Demokratie

mehr als dies und ihre bedingungslose Verteidigung ist nicht nötig,
um den Wert der Demokratie ins Unermessliche steigen zu lassen
und den Innendruck in Nicht-Demokratien exorbitant zu steigern

und noch ein Letztes:
bei der Vorne-Verteidigung kann es nur um die Zerstörung von Feinden unserer Freiheit und Demokratie gehen,
nicht um Demokratie-Export
denn für die zweifellos immer wiederkehrende Verteidigungsnotwendigkeit
gegen Entlastungsangriffe unterentwickelter Weltgegenden auf uns
gibt es doch schon immer Budgetplanungen, – in allen demokratischen Haushalten,
man nennt es Verteidigungshaushalt
für den Demokratie-Export gibt es dagegen keinen Haushaltsplan,
oder soll das Entwicklungsresort umfirmieren zu Kriegsministerium?
Und wie firmiert dann wohl das Resort für die demokratische Entwicklungshilfe im Innern?

Und die Moral von der Geschicht‘
geh mit deinen Kronjuwelen hausieren nicht …

… sondern schließe sie in Fort Knox ein
und lasse sie von der israelischen Armee sichern

, , , , , ,

Hinterlasse einen Kommentar

Ein kurzes Zählprogramm

wieviel Code braucht es wohl, um die Instanzen eines Zeichens >z< in einem Ausdruck >e< beginnend bei Position >p< zu zählen?

Ich leg‘ mal vor:

function c1(p, e, z)
          dim a, b
          a = 0
          b = 0
          do
                    a = instr(a + p, e, z)
                    if a <> 0 then
                              b = b + 1
                    end if
          loop until a = 0
          c1 = b
end function

,

Hinterlasse einen Kommentar

Windows Home Server Bau II

 Nun liegt bisher Folgendes vor:

whs (1)

Das sind im Einzelnen:

 

 1. Intel S3420GPLX

Das S3420GPLX Board gehört zur Reihe der Intel Entry-Level Server Plattformen und ist für preisbewusste Kunden gedacht und solche, die ihren ersten Intel Xeon basierten Server errichten. Es handelt sich um ein Board für die Nehalem Microarchitekur (45nm, Westmere ist das Pendent in 32nm) mit Socket 1156, die den Speichercontroller in die CPU integriert und eine Punkt-zu-Punkt-Verbindung von CPU und Chipset herstellt. Eine Northbridge zur Anbindung des Speichers und des übrigen Systems wird nicht mehr benötigt. Näheres zur Nehalem Architekur unter Anandtech. Das Board realisiert stattdessen ein modernes sparsames Zwei-Chip-Design mit 3420 Chipsatz. Bis zu 32 GB DDR3 1333 registered ECC Speicher (im Dual-Channel-Verfahren angesprochen) und PCIe (8 GB/s bidirektional) sind direkt an die CPU angebunden, der Platform Controller Hub (PCH, ehemals “Southbridge”) über DMI (2 GB/s). Über den PCH werden 6 3 GB/s Sata-Ports, eSata, weitere PCIe-Lanes, 2 Gigabit Ethernet-Ports (mit Jumbo Frame Support) und 12 USB 2.0 Ports angesprochen.

intel s3420gplx (9) intel s3420gplx (8)

Grundsätzlich realisiert die Architektur ein Zwei-Chip-Design, im Fall des S3420GPLX werden jedoch zusätzliche Chips für erweiterte Funktionen verwendet: über einen IDT Chip werden weitere PCIe Lanes bereitgestellt und ein Server Engines Chip sorgt für erweiterte Funktionalität vor allem im Bereich Server Management. Demnach setzt sich, wenn man so möchte (so auch die Intel Sprachregelung in den User- und Design-Guides), der Chipsatz zusammen aus Platform Controller Hub (PCH), ServerEngines LLC Pilot II BMC controller und IDT PCIe Switch.
PCIe Lanes stehen dadurch insgesamt in folgendem Umfang zur Verfügung: Gen2 phys. x16 mit Durchsatz x8, Gen2 phys. x8 mit Durchsatz x8, Gen2 phys. x8 mit Durchsatz x4, Gen1 phys. x8 mit Durchsatz x4, Gen1 phys. x4 mit Durchsatz x1; ferner 1 PCI.
Der BMC Controller stellt, auf Basis eines 250 MHz 32bit ARM9 Prozessors, ein ganzes Subsystem zur Verfügung mit (unter anderen) folgenden Funktionen:

 

  • integrierter 2D Video Controller mit 64 MB DDR2 667MHz Speicher
  • integrierter IPMI 2.0 Baseboard Management Controller (IBMC):
    • Fan Speed Controll (8 Fan Tachometer, 4 PWMs)
    • Temperatur Monitoring
    • Diagnostic LEDs
    • Email Alarm
    • Zugang über Command Line Interface
    • ein KVM Subsystem zur Remote Steuerung/Administrierung des Servers, zur Nutzung dieser Funktionen ist aber die Anschaffung eines kleinen Zusatzmoduls (RMM3) unumgänglich
Über den Mezzanine Connector bringt das Board ferner die Option zu SAS mit: so eine Seagate 2,5″ Savvio SAS ist schon etwas ausgesprochen Reizvolles; zwischen eine solche Savvio und den Mezzanine Anschluss hat Intel allerdings wiederum ein Kärtchen (mit LSI Chip) gestellt, das extra zu beschaffen wäre.Wie zu sehen ist ein Board also mit einigen eingebauten VersuchungenDas mitgelieferte Zubehör-Arsenal könnte man als übersichtlich bezeichnen:   

zwei ordentliche Sata-Kabel, eine Treiber-CD, eine CD mit der Server Board Management Software, ein aufklappbares Poster mit Quick Installation Guides, transparente Selbstklebefolien mit Schema-Zeichnungen und Beschriftung / Beschaltung von Bauteilen. Goodies gibt’s bei einem Serverboard nicht, dafür erfreut man sich an dem I/O-Shield, weil es nicht so mickrig dünn gearbeitetes Blech ist, dass man sich schon vom Ansehen daran schneidet, sondern richtig massiv ist.

Der Stromverbrauch eines solchen Boards ergibt sich aus komplexen hochdynamischen Vorgängen und ist daher insgesamt nicht ohne weiteres anzugeben. Als groben Anhaltspunkt für nicht-quantifizierende Einschätzungen eines Boards lassen sich aber die auf einem Board verbauten Kühlungslösungen und die Anzahl größerer Chips heranziehen. Daran gemessen sieht es bei dem S3420GPLX hervorragend aus. Die beiden Kühlelemente auf den Spannungswandlern und der PCH sind vergleichsweise niedlich und der IBMC- sowie der IDT-Chip benötigen erst gar keine Kühler. Die praktischen Strommessungen nach Inbetriebnahme des Servers werden also sehr spannend. Für die Projektionszwecke unten wurden daher vereinfachend die Stromverbräuche der wichtigsten Chips bei Aktivität und im Idle-Zustand soweit bekannt herangezogen.

 
2.
Intel Xeon L3426 CPU

Xeon L3420 ist eine in 45nm produzierte Lynnfield CPU, die eng verwandt ist mit der (bereits in 32nm hergestellten) Clarkdale Reihe. Der Nehalem Architektur entsprechend sitzt der Speichercontroller in der CPU. Der Xeon L3420 verfügt über 4 physische Cores und über einen 3-stufigen Cache.
Effizienzsteigerungen erreicht die CPU durch 4-fach superskalares Hyperthreading, im OS erscheinen daher 8 virtuelle Cores.
Der Grundtakt dieser Quadcore CPU der Intel Low Power Serie von 1,86 GHz ist ideal für meine Zwecke. Was diese CPU zudem unglaublich attraktiv macht, ist die Fähigkeit, bei Bedarf (und wenn das Verlustleistungsbudget nicht ausgeschöpft ist) nahezu 180% der Grundleistung eines Cores zu liefern. Denn die Intel Turbo Technologie taktet einen einzelnen Core dieser CPU bis hinauf zu 3,2 GHz! Zwei der vier physischen Cores kann der L3420 bei Bedarf immerhin noch auf 2,66 GHz automatisch hochtakten. Das sind bereits sensationelle Eckdaten.

intel xeon l3426 (1) intel xeon l3426 (2)

Das Umwerfendste ist aber, dass diese Dynamik im Rahmen einer TDP von nur 45 Watt erreicht wird. Dazu werden die energetischen Zustände der CPU von einer on-die Power Control Unit (PCU) reguliert auf Basis von real-time CPU loads. Integrierte Power Gates reduzieren Idle CPU Cores auf nahezu Null Power. Ein extrem schnelles Voltage Switching sorgt für ein hocheffizientes Power Management. Dies bewirkt, dass der Xeon L3420 selbst unter Vollast 11% der Rechenzeit, die ein multithreaded Task in Anspruch nimmt, im tiefstmöglichen Energiezustand C6 verbringt!! (siehe hierzu Anandtech, Dynamic Power Management, A Quantitative Approach)

Intel hat seit Lynnfield ein komplexes CPU-Powermanagement geschaffen, in dem extrem schnell schaltende Energiesparzustände und Turbomodi unerreicht raffiniert verwoben sind und das zu sehr beeindruckenden praktischen Resultaten führt.

  3. Kingston DDR1333 registered ECC RAM

Speicherchips von Hynix, Controller von Texas Instruments. Dieser Kingston-Speicher operiert in vollem Umfang innerhalb der JEDEC-Spezifikation.

kingston 1333 ecc (2) 
Das Produkt ist von Kingston abgekündigt, also nur noch begrenzt verfügbar…

Zum Energiekonsum von Speicherchips unter Serverbetrieb der Artikel “Problem of Power Consumption in Servers

” in DrDobbs, Intel Go Parallel.

  4. Seagate Constellation 500GB

Ein 2,5”-Drive der Enterprise Klasse, i.e. 24/7 zugelassen, 5 Jahre Garantie.

seagate constellation 500gb (1)
Diese 2,5”-Festplatte ist ziemlich schnell, und dient als System- und Software-Laufwerk. Bei mir sind solche Laufwerke nicht kleiner als 200GB und i.d.R. nicht grösser als ca. 300GB, dann haben wir hiermit also eine Ausnahme geschaffen.
In Betracht kam noch eine 2,5″ 300GB VelociRaptor, doch WD lobt diese nur als (irgenwie) Server-geeignet aus (was immer das heißen mag), will es aber nicht verantworten, sie für den 24/7 Betrieb freizugeben. Die Raptor  ist also kein Enterprise Drive, mir missfällt aber auch dieses enorme Reptil-Logo. Etwas durchaus Ähnliches veranstaltet Seagate zwar mit der 2000GB Barracuda XT: soll gut für Entry Server Umgebungen sein, hat jedoch keine 24/7 Freigabe; aber immerhin verzichtet Seagate, anders als WD, auf derart dämliche Zielgruppenwerbung, und das ist ja heutzutage auch schon etwas wert.
Tests der Festplatte bei
tecchannel und nochmals bei tecchannel.

 


Und dies hier ist wohl jedem ein Begriff:

 5. Seagate Constellation ES 2000GB

 Ein 3,5″-Drive der Enterprise Klasse, 24/7 freigegeben, 5 Jahre Garantie.

seagate constellation (1)seagate constellation es 2gb (2)

Geht ebenfalls sehr beherzt zu Werke, wie schnell, weiß ich jetzt gerade nicht mehr. Ein Review hierzu findet sich unter dieser Seite. Datenblätter unter seagate.com

. Da der Server in einem (5*5m kleinen) Büroraum residieren wird, interessiert mich nun aber vor allem, wie sie sich anhört; ob sie erträglich klingt, lässt sich vielleicht erst abschätzen, wenn mehrere Constellation ES laufen … das wird man sehen. Außerdem möchte ich wissen, wie sich die Seagate Power Choice Option auswirkt auf Performance, Lautstärke, Verbrauch. Der Stromverbrauch wird gemessen, bezüglich Lautheit sind subjektive Eindrücke maßgeblich und wegen der Performance wird vielleicht mal ein kleiner Testdurchlauf gefahren, wenn ein geeignetes Tool zur Hand ist.
Bei dieser Datenlage zur Seagate Constellation ES und unter der obigen Maßgabe, Einfachheit bei der Zusammenstellung des Servers umzusetzen, ist die Frage, ob der Server mit weiteren Festplatten dieses Typs aufgerüstet werden wird, naturgemäß alles andere als offen. Im Grunde genommen könnte nur noch eine von den HDDs in der Umgebung des erworbenen Gehäuses ausgehende sehr unerwartete Geräuschkulisse die Tendenz, diese Aufrüstoption wahrzunehmen, unterlaufen.

  

 

6. Lian Li A77

Das Servergehäuse sollte sich optisch in eine aufgeräumte Büroumgebung einfügen, in tadelloser Qualität aus Aluminium gefertigt sein, mindestens zehn 3,5”-Festplatten aufnehmen und eine ausgezeichnete Belüftung, insbesondere der Festplatten, vorweisen können. Aufgrund dessen landet man fast zwingend beim taiwanesischen Hersteller Lian Li. Kennt man Lian Li aus eigener Erfahrung, ist ohne viel Aufhebens dann nur noch die Frage, ob A77 oder A77F oder PC-343. Die technische Anmutung von letzterem geht mir dann doch etwas zu weit, und die gebotene Anzahl 3,5”-Einschübe (18) wird (glaube ich) so schnell auch nicht benötigt. Der Vorteil des gut abgelagerten A77 gegenüber dem taufrischen A77F ist, dass es um drei Festplatten und eine Lüftersteuerung geräumiger ist und dennoch, wahrscheinlich wegen der an den Lüftern fehlenden Beleuchtungselemente, preislich etwas moderater ausfällt. Nein, ernsthaft, der A77F-Tarif hat natürlich vorwiegend andere Gründe, nämlich einen etwas gediegeneren Auftritt und vor allem das toolless design. Da ich jedoch zufälligerweise die puristische Ästhetik des A77 und auch die hergebrachte Lian Li-Art der Befestigung der Komponenten mittels Edelstahlschrauben schätze, die analoge Lüftersteuerung für drei zusätzliche Lüfter haben wollte und den Mehrplatz für drei weitere HDDs gerne mitnahm, fiel die Wahl auf das A77.

lianli a77 front (1) lianli a77 back (4) lianli a77 inside (1)lianli a77 inside (3) lianli a77 left (1)lianli a77 right (4)lianli a77 front (2)

Dieses Gehäuse ist vor allem schlicht, auf eine mit kühlem Charme vorgetragene funktionelle Art, elegant würde ich es nicht unbedingt nennen, ihm dennoch eine gewisse Noblesse nachsagen, die sich aus der stilsicheren Linienführung, den verwendeten Materialien und einer Verarbeitung, die eigentlich schon Legende sein sollte, speist.
Ohne Seitenteile und Mainboard-Träger offenbart sich eine filigrane, teils geschraubte, größtenteils vernietete Konstruktion, die trotz eines Gesamtgewichtes von lediglich 11 kg nach bisherigem Eindruck an Stabilität und Verwindungssteifigkeit nichts zu wünschen übrig lässt. Dieses wird bewirkt durch die Vernietung, die auf kleinstem Raum eine extrem starre Verbindung herstellt, und durch die wesentlichen Merkmale der Innenkonstruktion, nämlich den durchgängigen 3,5”-Schacht, die beiderseitigen, auf 4/5 der Höhe laufenden Querstreben, die senkrechte Mittelstrebe und den massiven Board-Träger. Im voll ausgebauten Zustand hat dieses Gehäuse der 75 Liter-Klasse ca. 11 kg an Festplatten zu tragen und die Vibration von 14 Highspeed Enterprise Festplatten zu neutralisieren.
Wie gekonnt die Lian Li-Konstruktion ist, erschließt sich auf den zweiten Blick. Zum Beispiel bewirkt der durchgängige 3,5”-Schacht nicht nur eine außerordentliche Stabilität, dieses Merkmal sorgt auch für maximale Flexibilität bei der Laufwerksbestückung und der Belüftung und lässt freie Hand bei der Herstellung einer ansprechenden Ästhetik, die Lian Li im Fall des A77 wie man sieht unnachahmlich gut gelungen ist. Die senkrechte Mittelstrebe unterstützt nicht nur die Steifigkeit des Gehäuses, sondern dient auch als Halterung für große Add-On-Karten. Die Rahmenkonstruktion im hinteren oberen Teil des Gehäuses sorgt nicht nur für Verwindungssteifigkeit im hinteren Gehäusebereich und dient als zusätzliche Anflanschfläche für die beiderseitigen oberen Querstreben, sondern nimmt auch wahlweise ein PSU oder ein HDD-Rack auf. Die Höhe des Gehäuses, die sich ergibt als Summe der Höhen des Mainboards, des PSU und des (hinteren) HDD-Racks, wurde auf der Vorderseite optimal genutzt, indem die übrige über den zwölf 3,5”-Einschüben verbleibende Höhe zum Einbau einer Sonderkonstruktion der Lian Li TR3 Lüftersteuerung verwendet wurde.

Ein Lian Li Case ist nicht nur eine Menge von technischen Funktionen (Größe, Anzahl Einschübe, Kühleigenschaften, etc.), sondern ist auch ein zugleich visuelles, haptisches und akustisches, i.e. ästhetisches, Objekt. Das zusammen macht ein State of The Art Gehäuse aus. Es gibt leider kleinere Anhaltspunkte dafür, dass Lian Li eventuell über der bei diesem Case durchexerzierten funktionellen Schlichtheit ein wenig die Notwendigkeit aus dem Auge verloren hat, dem Lian Li-Gesamtanspruch in jeder Hinsicht zur Geltung verhelfen. Ein Gehäuse dieser Art erfordert nämlich auch ein veritables Acoutic Management. Ich meine sehr wohl, dass sich Lian Li Cases weiterhin via handwerklichem Purismus von Gerät z.B. der gehobenen Unterhaltungsindustrie abgrenzen sollten. Dennoch ist es ganz unpassend für ein Gehäuse dieser Klasse, wenn das I/O-Port Deckelchen beim Anheben einen leisen Quietschlaut produziert, weil die Vorderkante des Deckelchens im umgebenden Gehäusedeckelmaterial zwecks festem Sitz beim Schließen sachte eingeklemmt wird. Dramatisch ist das nicht, ein kleiner Schönheitsfleck, würde ich meinen. Schon ein wenig ärgerlich hingegen ist die Machart des Reset- und vor allem des größeren Einschaltbuttons. Die Knöpfe haben zu wenig Masse, wackeln etwas in den metallenen Rundfassungen, haben keinen Hub und keinen soliden Federmechanismus mit mechanischem Schalter (wie noch im PC-767), sondern betätigen nur ein billiges Folienschalterchen. Auch solche Billigtechnik hat man schon mal angenehmer umgesetzt gesehen.
Ein klein wenig gespart hat Lian Li allem Anschein nach auch bei den Blechen der Außenkonstruktion, also dem Deckelblech und den beiden Seitenteilen. Während das Seitenteil eines seit einigen Jahren nicht mehr erhältlichen LianLi PC-767 bei einer Größe von 47cm*56cm 940g, also 3571,43g/m² wiegt, bringt ein Quadratmeter Seitenblech des A77 3107,5g, also 464g weniger auf die Waage. Ein Seitenblech des A77 als solches ist 150g schwerer als das des PC-767, aber auch etwa 450cm² größer. Ein richtiges Leichtgewicht dagegen ist das Deckelteil, das seine Stabilität vorwiegend aus den seitlichen Umkantungen bezieht.
Wie sich das Gehäuse akustisch macht bei einer großen Menge von Festplatten, wird man einfach abwarten müssen. Ich glaube offen gesagt kaum, dass sich die Seitenteile hier irgendwie hervortun werden.

Wenn man es unterlässt, den Einschaltknopf zu betätigen und mit den Fingern auf dem Deckel zu trommeln, stellt sich das Lian Li A77 als Offenbarung dar. Aber ich rate Lian Li dringend, auf die Umsetzung seiner Qualitätsansprüche en detail zu achten. Es ist nämlich nichts für die Ewigkeit, noch nicht einmal ein guter Ruf. 

 7. Kühlung

Der Intel Stock CPU-Lüfter, ob mit diesem Kuriosum die Stromsparqualitäten der Lynnfield CPU andemonstriert werden sollen, man weiß es nicht. Vielleicht probiere ich das einfach aus…

intel cooler (2) intel cooler (6)

…andererseits erscheint mit dem ProlimaTek Samuel 17 ein brandneuer, putziger kleiner Kühler mit High End – Anspruch, auf den ein 12cm-Lüfter passt, der dann auch die Spannungswandler u.ä. kühlt und der mir gefallen könnte. Mir behagt zudem diese alttestamentarische Anspielung, aus welcher dieses nette kleine Stück Technik sein Selbstverständnis bezieht.
Das Intel Board kommt mit 5 PWM Lüfter-Anschlüssen (einer davon für den CPU-Lüfter), diese sollen, sobald (weitere) Lüfter benötigt werden, auch verwendet werden. In der Erstausstattung des Rechners ist nur ein HDD-Rack belegt, in diesem Zustand arbeitet der Rechner mit nur 3 Lüftern (CPU, HDD-Rack 1, Gehäuse-Rückseite).
Auf meinen Lieblingslüfter, den Pabst 4412 F/2GP (PWM, 500 bis 2900 u/min, max. Förderleistung 170 m³/h) verzichte ich diesmal, weil dieses Gerät 5 bis 6 Watt verbraucht. Der Noiseblocker BlackSilent Pro PLPS (bis 100 m³/h, 600 – 1500 U/min) ist wohl eine brauchbare Alternative in diesem Fall, soll nur 1,8 Watt verbrauchen, was sehr gut wäre. In der Vollausstattung drehen 7 (eventuell 8) Lüfter, davon 5  PWM und 2 (3) an die TR3 angeschlossene Analog-Lüfter (wahrscheinlich von Noctua). Das ergäbe also einen beachtlichen Verbrauchsunterschied von 16 Watt zwischen Pabst und Noiseblocker.

Insgesamt funktioniert die Belüftung auf klassische Weise, vorn tritt Luft ein (durch zu Beginn zwei und zuletzt vier HDD-Rack 120mm Lüfter), hinten und oben tritt die Luft aus (durch zwei 120mm Gehäuselüfter und den PSU-Lüfter). Wegen Steigerungen der Effizienz von PSUs können deren Lüfter jedoch zunehmend auf einen Hybrid-Silent-Betrieb eingestellt werden, in welchem sie erst ab einer gewissen PSU-Belastung starten. Für die Gehäuse-Belüftung insgesamt bedeutet dies, dass das PSU hierzu nicht permanent zur Verfügung steht. Dadurch könnte ein unerwünschter Wärmestau unter dem Gehäusedeckel resultieren, weil der oberste rückwärtige Gehäuselüfter sich auf 2/3 der Gehäusehöhe befindet. Mit steigender Anzahl Festplatten ist daher geplant, in die freie Gehäusedeckelfläche zwischen Netzteil und vorderem 3,5”-Schacht eventuell eine Entlüftungsmöglichkeit einzuarbeiten, unter der ein 140mm Noctua Lüfter die durch die HDDs erwärmte Luft ständig abführt.

 8. Stromversorgung

Üblich sind im Retailbereich üppig dimensionierte Netzteile. Aber das erklärt sich als natürlich, weil es eine ganz gewöhnliche Neigung gibt, jeder denkbaren Mangelversorgung entgegen zu arbeiten. Ist der Verbrauch der gewählten Komponenten unbekannt und, wie üblich, auch nur schwer eruierbar, so führt dies i.A. zur Wahl eines leistungsstarken PSU.
Netzteile liefern nicht 100% der aus dem Stromnetz gezogenen Leistung (AC) an die zu versorgenden Komponenten, sondern sie haben einen Eigenverbrauch, der bei 50% – 70% der Nennbelastbarkeit des PSU am geringsten ist. Das Verhältnis der Anforderung der Komponenten (DC) zu AC drückt die Effizienz des Netzteils aus. Demnach ließe sich Strom einsparen, indem man ein PSU wählt, welches bei einem gegebenen Computer mit ca. 60% seiner Leistung arbeitet. Ein Computer kann jedoch eine ganze Reihe von Energieverbrauchszuständen einnehmen, daher arbeiten PSU-Hersteller nicht nur daran, das Effizienzniveau von PSUs insgesamt anzuheben, sondern auch daran, den Bereich des geringen Eigenverbrauchs zu verbreitern. Das scheint jedoch ausgerechnet für den Niedriglastbereich schwierig zu sein, viel schwieriger sogar als im Bereich ab 100 Watt aufwärts höhere Effizienzwerte zu erreichen. Dies scheint letzten Endes damit zusammenzuhängen, dass (Energie konsumierende) Hardware (des PSU) nicht plastisch ist, sie wird weder weniger noch wird sie mehr. Sie ist nicht in steuerbarer Weise adaptiv. Ein in einem PSU verbautes Quantum an elektrischen Schaltungen zeigt daher offenbar lediglich eine Untergrenze des Eigenverbrauchs, dessen relatives Gewicht im Niedriglastbereich eben höher ist als in höheren Lastbereichen. Absolut steigt der Eigenverbrauch eines PSU bei Abgabe höherer Leistung praktisch wie der eines Motors. Die Verläufe des Eigenverbrauchs dreier PSU unterschiedlicher Stärke und Zertifizierung entnehme man der Tabelle unten. Aus dem gezeigten Zusammenhang folgt, dass stärkere PSU einfacher höhere Effizienzklassen erreichen können als kleine PSU.

effizienzvergleich (1)

Lässt sich seriöserweise pauschal der Erwerb eines “kleinen” oder jedenfalls leistungsmäßig an den Computer “angepassten” PSU anraten? Solange es nur um Effizienz geht mit Sicherheit nicht. Der Retail-Markt bietet immer noch eine in Leistung, elektrischer Qualität und Effizienz große Vielfalt von PSUs. So sind auch kleine PSU meist älterer Bauart zu haben, die höchstens noch frühere Innovationen, deren R&D-Kosten längst gedeckt oder substanzwertmindernd abgeschrieben sind, ausschlachten und für wenige Euros erstanden werden können.

Dass in einem gegebenen Rechner mit gegebenem DC-Verbrauch seiner Komponenten ein beliebiges kleineres PSU gegenüber einem größeren Modell stets einen Verbrauchsvorteil leistet, ist nur ein dämliches Märchen, und die pauschale Empfehlung zu einem kleineren PSU vom Effizienzgesichtspunkt her barer Unsinn. Die Verbrauchstabelle hier belegt das anhand eines konkreten Beispiels. Es gibt aberdutzende weiterer solcher Beispiele.
Erst ab 65 Watt gibt es in diesem Beispiel Effizienzfortschritte von Bronce auf Gold, was darauf hindeutet, dass die Hersteller den Niedrigverbrauch technisch noch nicht so ganz im Griff haben oder nachfragemäßig i.A. noch nicht ernst nehmen. Seasonic allerdings wagt mit dem innovativen X-400 ein Hocheffizienzgerät für den Niedriglastbereich.
Bei einem max. Verbrauch der Komponenten von ca. 300 Watt pauschal dem im Beispiel angeführten 400 Watt PSU gegenüber dem 500- oder gar 600-Watt PSU den Vorzug zu geben, ist also unbegründet, denn auch im Niedriglastbereich stellen sich die moderneren, besser zertifizierten PSU im obigen Beispiel besser als das kleinere, alte 400W PSU.
Das soll nur heißen, wenn es um die Optimierung des Energieverbrauchs geht, bleibt nichts anderes übrig, als Verbräuche und Effizienzen zu ermitteln und zu vergleichen und danach zu entscheiden.

Quelle für AC- und DC-Daten spcr.com / silent pc review,
die einzige mir bekannte Seite, die ihre Testergebnisse in dieser aussagekräftigen Form liefert, so dass auch verwertbare Ergebnisse zum Niedriglastbereich vorliegen, und nicht nur, wie dutzende anderer Seiten, die Werte um 100 – 50 – 20 abnickt.

 9. Energiekonsum Planung

Hierzu wurden die Datenblätter der Hersteller zu Rate gezogen. Die DC-Werte der berücksichtigten Rechnerkomponenten beruhen auf solchen Herstellerangaben für die Startphase des betreffenden Gerätes, seinen Aktiv- und seinen Idle-Zustand, soweit einem Gerät bekannt. Für den 3ware Controller wurde einfach eine Art Idle-Zustand angenommen mit einem Schätzwert (da lsi für den Controller nur einen „Maximalverbrauch“ angibt, weswegen man annehmen kann, dass das Gerät auch so etwas wie einen „Minimalverbrauch“, eben eine Art Idle, kennt). Die Tabelle rechnet derzeit aber mit dem angegebenen SuperMicro Controller. Die Verbrauchswerte wichtiger Boardkomponenten fließen nun mit ein, die Werte für die Xeon CPU liegen zwischen Nahe-Null und 45 Watt, aber es ist nicht klar, wie sich die Festplattenzustände vernünftig mit CPU-Zuständen korrelieren ließen für den Zweck der Verbrauchsberechnung hier.
Bis dato kamen als PSU infrage Seasonic X-650, Enermax Modu87+ (beide Gold) und Enermax Revolution 85+ (Silber). Hier eine vergleichende Verbrauchsberechnung für Seasonic X-400, Enermax Modu87+ 500 und Revolution 85+ 1050. Das Seasonic X-650 verhält sich nahezu identisch zum Modu87+.

psu vergleich (4)

Für den Rechneraufbau werden 4 Phasen gedacht, die sich im Wesentlichen durch die Anzahl der verwendeten HDD unterscheiden (eine Art Minimalausstattung in der Anfangsphase, eine Grundausstattung, halbe und volle Ausstattung). Ab der siebenten Festplatte kommt ein Sata-Controller hinzu.
Im oberen Bereich sind die Effizienzwerte der PSU zu einer Reihe von DC-Anforderungen angegeben. Im mittleren Bereich werden die DC-Werte der verwendeten Komponenten aufsummiert, außerdem sind hier die vier gedachten Phasen des Rechneraufbaus dargestellt, in denen Komponenten (HDDs, Lüfter, Sata-Controller) hinzukommen.
Im unteren Bereich entscheidet eine kleine Funktion auf geschachtelter wenn-dann-Basis welcher DC-Rubrik oben der aufsummierte DC-Wert der Komponenten entspricht, greift auf den entsprechenden Effizienzwert des fraglichen PSU zu und gibt den so errechenbaren AC-Wert aus. Der untere graue Bereich drückt die AC-Werte in Prozent zur Basis DC = 1 aus. Die vorletzte Zeile zeigt den prozentualen Vorteil des 87+ gegenüber dem 85+ im Klartext, in der letzten Zeile dasselbe für X-400 gegenüber 87+.
Denkbar ist auch, dass im tatsächlichen Betrieb bei Aktivität nicht alle Festplatten in diesen Zustand treten, das aber hängt davon ab, wie das OS Daten auf den Array/Pool verteilt. Da dies (derzeit) unbekannt ist, wurden solche gemischten Zustände für diese Verbrauchsprojektion nicht berücksichtigt.
 
psu vergleich graph (4)

Der Graph bildet die vier Aufbauphasen des Rechners ab und in jeder Phase den Rechner im Start (die Peaks), im Aktiv-Zustand und im Idle-Zustand. Man erkennt, dass die AC-Unterschiede der PSU im DC-Bereich von etwa 35 bis 250 Watt liegen. Das Gold-PSU hat hier erkennbar Vorteile hat und ist insoweit vorzuziehen.
Bei den relativen Vergleichswerten zeigt sich, dass das Silber-PSU im Bereich bis ca. 50 Watt mehr als ein Drittel des Gesamtverbrauchs für den Eigenverbrauch aufwendet (also in Wärme umwandelt), das Gold-PSU wendet immerhin nur im Bereich bis ca. 35 Watt mehr als ein Drittel des Gesamtverbrauchs für den Eigenverbrauch auf. Es liegt zudem in der Natur der Sache, dass es kaum möglich ist, im Niedriglastbereich absolute Unterschiede derart zu erzielen, dass sie als signifikant oder wichtig erachtet würden. Ob ein Unterschied übers Jahr gesehen wichtig ist, das hängt natürlich auch vom zu zahlenden Energiepreis ab.

Ob Seasonic etwas nachlässig in der Darstellung der Vorzüge seiner PSU ist oder ob die X-Serie wirklich nicht 24/7-freigegeben ist, es ist leider nicht beleghaft dokumentiert. Modu87+ ist als 24/7-tauglich ausdrücklich ausgewiesen, leider stört mich dieser unerträgliche goldige Lüfter gewaltig; der Effizienzverlauf der beiden Letzteren ist nahezu identisch.
So wird noch die PSU-Neuvorstellungen der Computex abwarten müssen, Seasonic hat beispielsweise schon die Version 2 der X-Serie angekündigt, dasselbe würde ich mir von Enermax bzgl. der Revolution-Serie wünschen, diese sähe ich gern auf Gold-Niveau verbessert und nach unten abgerundet mit einem 600 bis 700 Watt Teil, das wäre dann wohl meine Wahl. Wenn sich allerdings bewahrheitet, was eine andere Seite kolportiert, dann wäre das schon eine Enttäuschung: die Modu87+ Reihe wird danach leistungsmäßig nach oben (Richtung Revolution) erweitert und aufgehübscht, die kleineren Revolution Modelle erhalten als Neuerung nur kleinere Gehäuse, bleiben aber 80+Silber; ob dieser Unsinn wahr wird, wird man sehen.

Das Router-Geschäft ist ein einziges heilloses Feature-Wirrwarr, sich hier kundig zu machen um eine fundierte Auswahl treffen zu können, ist zeitaufwendig. Am liebsten wär mir ein Gerät, bei dem wenige Grundfeatures hochwertig umgesetzt sind für einen stabilen und sicheren Dauerbetrieb. Es sieht jedoch ganz so aus, als käme man bei den Angeboten überhaupt nicht umhin, einen Haufen Zusatzmerkmale mitzuerwerben. Bei den Preisen dieser Geräte weiß man dann aber nicht, ob die auf die solide Umsetzung der grundsätzlichen Dinge zurückgehen oder darauf, dass eben eine Menge Nebensächlichkeiten, die ja auch zu entlohnen sind, in diesen Feature-Brei eingerührt sind. Bis dahin schmeckt mir das alles noch nicht so ganz und daher warte ich auch hier die Computex ab, vielleicht gibt’s da ja was Nettes … to be continued

intel s3420gplx (6)intel s3420gplx (4)intel s3420gplx (3)intel s3420gplx (5)

, , , , , , , , , , , ,

Hinterlasse einen Kommentar

Zum Zeichen der Verbundenheit

 

9/11 – We Shall Never Forget Stars and Stripes (1)

 

 

 

 

 april.shower, germany

Hinterlasse einen Kommentar

Windows Home Server Bau III

Neue Komponenten sind da:

new components (1) new components (2)

  • 2 weitere Seagate Constellation ES 2000GB, damit verfügt der Server nun über 6,5 TB State of the Art Enterprise Storage
  • Lian Li-Aluminiumblech für 2,5″ HDD
  • 4  Noiseblocker Blacksilent PLPS Pro PWM Lüfter (für CPU, 2 HDD-Racks und Gehäuse hinten)
  • Prolimatek Samuel 17 CPU Kühler (die niedlichste Verbindung zwischen CPU und Luft seit man Computer kühlt)
  • einige CAT5e uninet 5502 flex 4P S/UTP Kabel von Dätwyler mit Hirose Stecker für Gigabit LAN Betrieb (einzeln geprüfte Kabel mit zugesicherten Eigenschaften)
  •  Draytek Vigor 2130n Router

Prolimatek Samuel 17

Diesem niedlichen kleinen Stück Technik ist ja unmöglich zu widerstehen, ein Must Have.
An diesem Produkt ist alles vollkommen, der Name, die Technik, die Ausführung, das Erscheinungsbild, und sogar die Verpackung.

Prolimatek Samuel 17 (1)Prolimatek Samuel 17 (3)Prolimatek Samuel 17 (8) 
Prolimatek Samuel 17 (5)Prolimatek Samuel 17 (6)Prolimatek Samuel 17 (4)   
Zum Ausprobieren des Intel Stock Kühlers werde ich nicht mehr kommen.

Eine der beiden kühltechnisch sinnvollen Positionen auf dem S3420GPLX verhindert leider den Zugang zum x16 PCIe Port, die im Übrigen aber auch die Heatpipes in eine Lage bringt, in der sie gegen die Schwerkraft arbeiten müssten, was sich nachteilig auf die Kühlleistung auswirkt. So bleibt also nur die zweite hier gezeigte Variante. Der Abstand zu den Dimms ist dabei gegeben, allerdings sollte das Board ersichtlich vor der Kühlerinstallation schon mit ausreichend Speicher bestückt worden sein, sonst würde eine Kühlerdemontage notwendig werden.

intel s3420gplx (26) intel s3420gplx (19)

Dätwyler CAT5e Kabel

 

Das Dätwyler uninet 5502 flex 4p ist ein elektrisch und mechanisch hochwertiges 300 MHz Rangierkabel, das höchste Ansprüche übertrifft. Es ist kompatibel mit allen gängigen Stecksystemen nach EN 50173 und ISO/IEC 11801 sowie mit R&M T+T 83 und D-Sub-Systemen. Garantierte Grenzwerte nach Cat.5: ISO/IEC 11801:2002 und EN 50173-1, EN 50288-2-2. Es eignet sich für die Übertragung von digitalen und analogen Sprach-, Bild und Datensignalen, ISDN, Ethernet 10 BASE-T, Fast Ethernet 100 BASE-T, Gigabit Ethernet 1000 BASE-T, Token Ring 4/16 Mbit/s, TP-PMD/TP-DDI 125 Mbit/s, ATM 155 Mbit/s, und ist speziell geeignet für alle Anwendungen der Klasse D, Cat.5e

Dätwyler uninet 5502 flex 4pDätwyler uninet 5502 flex 4pwhs

Klasse D, d.h. bis 100MHz Betrieb, mit symmetrischen Kabeln der Kategorie cat5, cat6 und cat7 können im 100MHz betrieb sichere Übertragungstreckenlängen von 100m erreicht werden
(Klasse E = 250MHz, hierfür sind cat6 oder cat7 kabel erforderlich, mit denen 100m erreicht werden können; Klasse F = 600MHz, nur cat7 kabel, bis 100m möglich)

Halogenfrei, keine korrosiven Brandgase IEC 60754-2, EN 50267, VDE 0482-267 (gilt für FRNC/LSOH)
Selbstverlöschend IEC 60332-1, (EN 50265-2-1), Neu: EN 60332-1, (VDE 0482-265-2-1), Neu: VDE 0482-332-1
Minimale Rauchentwicklung IEC 61034, (EN 50268), Neu: EN 61034, (VDE 0482-268), Neu: VDE 0482-1034 (gilt für FRNC/LSOH)
EMV geschirmt
Biegeradius ≥ 20 mm, Wiederholte Biegung ≥ 1000 Zyklen, Zugfestigkeit ≤ 63 N, Querdruckfestigkeit ≥ 1000 N/10 cm, Hammerschlag ≥ 10 Schläge, Temperaturbereich während Installation 0°C bis +50°C, im Betrieb -20°C bis +60°C Schleifenwiderstand bei 20°C: 220 Ω/km, Betriebskapazität: 45 pF/m, Impedanzmittelwert bei 100 MHz: 100 Ω ±5 Ω, Kopplungswiderstand bei 1/10/30 MHz: 20/9/25 mΩ/m, Erdunsymmetriedämpfung LCL bei 1-100 MHz: > 40 dB, Skew (Laufzeitdifferenz): 15 ns/100m, NVP: 76 %

Frequenz [MHz] 1 4 10 16 20 31,25 62,5 100 155 200 250 300
Dämpfung [dB/10m] 0,2 0,5 0,8 1,0 1,2 1,5 2,2 3,0 3,9 4,6 5,2 5,8
Next [dB] 75 70 65 60 57 55 50 42 40 37 35 33
PS Next [dB] 75 70 60 60 60 55 50 42 40 37 33 30
ACR [dB/10m] 74 69 64 59 56 53 48 39 36 32 30 27
PS ACR [dB] 74 69 59 59 59 53 48 39 36 32 28 24
ELFEXT [dB/10m] 80 78 75 73 70 67 65 60 58 55 53 50
PS ELFEXT [dB/10m] 77 75 72 70 67 63 62 57 55 52 50 47
Rückfluss-dämpfung [dB] 24 30 30 30 30 30 30 28 26 24 23 23

Die hohe Rückflussdämpfung ist ein Maß für die Homogenität, wodurch Übertragungsqualität mindernde Reflexionen im Kabel vermieden werden, und kennzeichnet die extrem hohe Fertigungsqualität des Dätwyler Kabel. Das hier verwendete Kabel wird lose im Büro verlegt. Daher war S/UTP (unshielded twisted pair mit äußerem Geflechtschirm) in der von Dätwyler bereitgestellten Qualität ausreichend. Für eine feste Verkabelung z.B. in einem Neubau ist (zum Investitionsschutz) in jedem Falle mehrfach geschirmtes Kabel der Kategorie Cat7, Klasse F zu empfehlen.

Draytek Vigor 2130n Highspeed Router

Draytek Vigor 2130n (7)   Draytek Vigor 2130n (12) Draytek Vigor 2130n (5)Draytek Vigor 2130n (9)whs

Dieses ist nicht die Handtasche von Dana Delaney, auch nicht die von Kim Cattrall oder Sarah Jessica Parker. Nein wirklich, es ist ein Router. Wegen der Hochglanz Cremeweiss Optik, dem spiegelnden Silberaufdruck und dieser einzigartigen Form (und abgesehen von den Antennen) sieht es entschieden aus wie ein Aufbewahrungsbehältnis für Max Factor Utensilien. Aber ich hab’s ausprobiert, es funktioniert tatsächlich wie ein Router. Und wegen seiner stylischen Eigenschaften und der (single band) 11n WLan Fähigkeiten ist sogar der WA-Faktor hoch, wirklich ziemlich hoch. Und sonst?
OK, die Feature-Liste des Draytek Vigor 2130n ist recht lang, hier das wichtigste. Viermal Gigabit LAN, Hardware NAT Beschleunigung, Gigabit WAN, DHCP Client und Server, DDNS, statische IP, MAC-to-IP, MAC-Filter, Layer 2/3 QoS (tag Priorisierung), (immerhin portbasiertes) VLAN, ACL, SPI, Email-Alarm, UPNP, IPv6, 2 VPN Tunnel, ausserdem auch 2 * USB 2.0 für Drucker, 3G USB Modem, NAS. Wobei hier natürlich niemand auf die Idee verfällt, das Gerät als NAS Server zu betreiben. Denn bei praktisch allen Geräten dieser Kategorie ist die NAS-Funktionalität nur moderat gut umgesetzt. so auch bei diesem, wie
hier dargelegt ist. Allein, diesem eleganten, Feature-reichen Highspeed Router von Draytek steht sogar dieser kleine NAS-Lapsus ganz schlecht. Daher sag’ ich zur NAS-Funktion überhaupt nur noch: SKIP!
Verbraucht typischerweise 10 Watt, wenn es Full Power gefordert wird, können es angeblich aber auch 25 Watt werden. WLAN ist abschaltbar. Einrichten/Aufräumen lässt sich das Handbag wahlweise via Web Oberfläche (http/https) oder CLI (telnet/ssl).

Der Router wurde löblicherweise mit der neuesten Firmware ausgeliefert. Die Einrichtung war easy. Es gibt einen User Mode und einen Admin Mode. Zuallererst ist man aufgefordert, ein Passwort anzugeben, dann werden (im User Mode) die (wenigen) wesentlichen Einstellungen vorgenommen, die u.a. den Internetzugang ermöglichen. Lediglich die (Provider-spezifische) MTU-Size muss man wissen, wenn der Connection Type PPPoE eingestellt wird. Was danach auffällt, ist, dass der Seitenaufbau erheblich schneller abläuft als nur mit OS-seitig eingerichteter Breitbandverbindung und Modem.
Unter Windows 7 Ultimate läuft die Netzwerk-Einrichtung aufgrund seiner Network Location Awareness praktisch automatisch, doch überraschenderweise verhält sich bereits ein XP Professional SP3 Rechner ganz ähnlich. Das einzig Beachtliche im Falle des eben mal schnell eingerichteten Büronetzwerkes war, dass zum einen das Netzwerk auf jedem Rechner gleichnamig ist und dass zweitens auch die Kontennamen auf allen Rechnern des Netzwerks exakt gleich lauten. Leistungstests des Netzwerkes plane ich gelegentlich mal nachzuliefern.

 

NB Blacksilent Pro PLPS PWM-Lüfter

Das Paket kommt aufwendig daher: der Lüfter sitzt auf einem stabilen, sauber gearbeiteten Plastikrahmen; es liegen 2 ummantelte Kabelverlängerungen praktischerweise unterschiedlicher Länge bei; auch das Befestigungsmaterial (Entkopplungsgummirahmen, Entkopplungsgummis für die Befestigungsschrauben, Rändelmuttern) macht einen guten ersten Eindruck. Nur das viele Plastik der Verpackung ist ganz unzeitgemäss.

NB Blacksilent Pro PLPS PWM (3)NB Blacksilent Pro PLPS PWM (1)

Was mir definitiv nicht gefallen hat:
das am Lüftermotor angeschlossene Stromversorgungskabel ist zu kurz; wenn der Lüfter in einem HDD-Rack verwendet wird, hindert das Stromsteckerchen dabei, das Kabel um die Kante des Racks zu legen; wird er als Gehäuselüfter verwendet, wird das Anstecken/Abziehen eines Stromverlängerungskabels im montierten Zustand zur fummeligen Geduldsprobe. Möglicherweise kam den Designern dieses PWM-Gerätes die Verwendung als Gehäuse-/Rack-Lüfter auch nicht in den Sinn.
Zum anderen ist das kombinierte Befestigungs-/Dämm-System nicht so durchdacht, wie es scheint. Der Gummidämmrahmen ist m.E. unnötig dick konstruiert, oder darf man von diesem Lüfter derart starke tieffrequente Brummschwingungen erwarten, dass solche Gummistärken erforderlich wären? Wegen dieser Materialstärke ist der Gummirahmen nicht zu gebrauchen, wenn der Lüfter in HDD-Racks verwendet werden soll. In die zum A77 mitgelieferten Racks passt er jedenfalls nicht zusammen mit dem Lüfter.
Die Befestigung des Lüfters ist eine etwas wackelige Angelegenheit, weil die mitgelieferten Schrauben, die durch die beiderseitigen Gummiführungen hindurch zu führen sind, zu dünn gewählt sind. Dies bewirkt einen mangelhaften radialen Halt, so dass der Lüfter erst im letzten Moment, wenn die Schrauben wirklich angeknallt sind, fest am Gehäuse sitzt.
Auch die Spezifikation des Schraubenkopfes ist ungünstig. Weil die Schrauben wegen dem stark nachgebenden dicken Gummi und des mangelhaften Halts der Schrauben in den Gummiführungen sehr fest angezogen werden müssen, quetscht sich der zu klein geratene Schraubenkopf halbwegs in den Gumminippel hinein. Besser wären hier sorgfältiger gewählte Schrauben mit einem exakter angepassten Querschnitt und einem ausladenderen Tellerkopf mit dem Durchmesser des Scheibenrandes der Gumminippel gewesen.

So wirkt das Ganze offen gestanden ein wenig wie am grünen Tisch zusammengestellt von Leuten, die höchstens ausnahmsweise mal mit Befestigungssystemen zu tun haben.
Aber ich hoffe ja noch auf die Lauf- und Kühlleistungseigenschaften des Gerätes, man wird sehen.

What Next?

Was nun noch fehlt an Grundausstattung, ist das PSU.
Dazu möchte ich mal die Ankunft der von Seasonic für (ich glaube) Oktober angekündigten Modelle X-560/660 abwarten.
Einen fulminanten Test (mit ebensolchem Ergebnis) des bereits erschienenen, kleineren und lüfterlosen Seasonic X-400 kann man studieren unter
Silent PC Review. Weiterhin haben ebenfalls in Silent PC Review einige andere lüfterlose Modelle die undankbare Aufgabe, sich mit dem Seasonic X-400 zu messen.

, , , , , , , , , , ,

Hinterlasse einen Kommentar