Auslesen der "Plattenauslastung"

Bash, Shell, PHP, Python, Perl, CGI
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Auslesen der "Plattenauslastung"

Post by andreask2 »

Hallo!

Ich habe auf einem Server das Problem, dass er ständig mit verhältnismäßig großen Datenmengen umgehen muss, und sehr viele Plattenzugriffe verwendet, was sich leider nicht wirklich cachen lässt. Typisch für diesen Server ist, dass z.B. der Load steigt, aber CPU und RAM-Auslastung im Rahmen bleiben, da viele Prozesse auf Daten von der Platte warten müssen.

Jetzt überlege ich, wie man so etwas sinnvoll monitoren kann, das heißt in eine mrtg oder cacti Statistik einbauen kann. Aber irgendwie habe ich hier noch keine wirklich gute Idee.

Ich habe überlegt die "bi" und "bo" Werte von vmstat zu verwenden (ein Block ist doch 1 KB, oder?), aber ich bin noch nicht so sicher wie aussagekräftig das ist.
Wie ist das - laufen IDE(udma), SATA bzw. SCSI Platten alle im "Full-Duplex-Modus"? Eine IDE-Platte schafft ja um die 40 - 50 MB pro Sekunde - heißt das 20MB oder 40MB in beide Richtungen?

Das Problem mit der Aussagefähigkeit besteht auch darin, dass diese Methode eher nicht berücksichtigt, wenn sehr viele sehr kleine Plattenzugriffe stattfinden.

Es geht mir darum eine langfristige Statistik zu erhalten, um ggfs. frühzeitig auf einen Server mit schnelleren Platten/RAID umzustellen, oder ggfs. sogar Loadbalancing einzusetzen.

Bei vmstat gibt es ja noch den Messwert "wa":
wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.
Das hört sich für mich sehr interessant an, nur leider ist der 2.6er Kernel im Moment noch keine Option für mich.

Wie würdet ihr das machen? Vielleicht auch einfach mehrere Werte kombinieren, aber welche außer IO-Bandbreite?


Viele Grüße
Andreas
c-otto
Posts: 5
Joined: 2004-06-18 22:48
Location: Aachen

Re: Auslesen der "Plattenauslastung"

Post by c-otto »

Wenn du einfach nur sehen willst, wie langsam die Kiste ist, könnte folgendes helfen:
Lege eine Datei mit passender Größe an und miss die Zeit, die zum Auslesen/Kopieren/... benötigt wird. Je stärker die Festplatte beansprucht wird, desto länger dauert dieser Vorgang. Um die Skala auf Null zu stellen, lasse diese Operation einfach (öfters) im Idle-Zustand laufen. Bei der ganzen Sache muss natürlich beachtet werden, dass die Datei nicht im Cache von Linux landet. Wenn der Zeitunterschied zwischen den Tests allerdings groß genug ist (und der Server unter Last steht, darum geht es ja) kann man dieses Problem aber (vermutlich) vernachlässigen.
Die 40MB/sec, die du ansprichst, kommen nur unter "Laborbedingungen" zum Vorschein. Die Daten werden hierbei sequentiell von der Festplatte gelesen. In deinem Serverbetrieb werden aber ständig Daten von den unterschiedlichsten Bereichen auf der Festplatte angefordert. Hier ist die Zugriffszeit (10ms oder sowas haben die Platten normalerweise) und damit verbunden auch die Geschwindigkeit der Festplatte viel wichtiger als die maximale Ã?bertragungsrate. Um die Geschwindigkeit zu steigern, empfehle ich dir ein Raid-System (die Zugriffe werden auf die Platten verteilt). Schnelle Festplatten mit 10krpm helfen natürlich auch.
Wegen der Fullduplex-Geschichte: Eine Festplatte kann nur lesen und schreiben. Wenn diese Zugriffe nicht im Festplatten-Cache geschehen, kann die Festplatte immer nur abwechselnd schreiben und lesen.
Viel Erfolg beim Messen!
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: Auslesen der "Plattenauslastung"

Post by andreask2 »

Hi!

Daran hatte ich noch gar nicht gedacht. Das Problem ist nur - wenn man diesen Test alle 5 Minuten durchführt, wie kann ich sicherstellen dass die entsprechende Datei nicht im Cache liegt, und gar nicht von der Festplatte kommt, oder auch im Plattencache...?

Was wäre denn eine "passende Größe"?

Grüße
Andreas
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Auslesen der "Plattenauslastung"

Post by Joe User »

andreask2 wrote:Was wäre denn eine "passende Größe"?
>8MB
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: Auslesen der "Plattenauslastung"

Post by andreask2 »

So groß? Naja, über 5 Minuten gerechnet, sagen wir mal ich nehme 8 MB, dann sollte das ja in weniger als einer Sekunde über die Bühne gehen, das ist ja noch OK. Und was mache ich am besten mit der Datei? Ich meine, "auslesen", wie simuliere ich das in der shell? Verschieben muss nicht wirklich ausagekräftig sein, kopieren schon eher, hm. Das heißt einfach hin und her kopieren, alle 5 Minuten?

Was ist mit

Code: Select all

time my_8m_file.txt > /dev/null
, aber das Problem hier ist, ich habe das gerade mit einer 90 MB Datei probiert, das erste mal dauerte das ca. 3 Sekunden, danach nur noch 0,12. Das System stand nicht unter Last. Aber beeindruckt mich schon was dieses Caching durch Linux bewirkt...

Und dieser Effekt ist unter Last weg? Auch bei einer 8 MB Datei? Ich habe die Zeit auch mit time gemessen, also noch ein time davor, und ich habe die entsprechende Zeit, die ich dann an mrtg übergebe, oder wie würdet Ihr das sonst messen?

Außerdem habe ich da ein wenig Bedenken dass ich mit solchen Aktionen RAM/Cache und Platte(Fragmentierung, Plattencache...) etwas unnötig durcheinander wirbele(zumindest wenn ich die Datei kopiere), oder sind die unbegründet? Kopieren der Datei dauert übrigens 0,3 Sekunden, und das auch nach dem 10 mal. Also was würdet Ihr verwenden?

Und die Werte aus vmstat haltet ihr nicht wirklich für aussagekräftig?

Macht denn einer von Euch sowas in der Art? Oder ist hier jemand der sonst irgendwie seine Platten-Performance "monitort"?


In jedem Fall Danke schonmal für die Ideen, Grüße
Andreas