Re: Verständnisfrage zu top

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Fri, 17 Dec 2010 15:35:02 +0100 (CET)

Heino Tiedemann wrote:
> Oliver Fromme wrote:
> > [...]
> > Typisches Beispiel wäre, wenn Du eine Software baust, z.B.
> > einen Port.
>
> Das genau war mein Beispiel :)
>
> Ein Portb au legt meinen Single Core immer derbe lahm.

Das kann an verschiedenen Dingen liegen, nicht unbedingt an
der CPU-Zeit, die die Prozesse schlucken (das kann man z.B.
mit nice(1) in den Griff bekommen).

Das Bauen eines Ports verursacht auch ein gewisses Maß an
I/O-Last. Dieses macht paradoxerweise sich um so stärker
bemerkbar, je schneller die CPU ist, da sie dann häufiger
auf die Platte warten muss. Auch die Option -j bringt in
so einer Situation nicht viel, wenn überhaupt.

Wenn das Bauen eines Ports auf der Platte herumrödelt, ist
es natürlich einleuchtend, dass andere Programme nicht mehr
so schnell zum Zuge kommen. Dein Desktop und andere inter-
aktive Sachen werden dann spürbar ausgebremst.

Es gibt verschiedene Möglichkeiten, wie man diese Situation
etwas bessern kann. Zum Beispiel kannst Du (bei aktuellem
FreeBSD 8) von den ata(4)+ad(4)-Treibern zu ahci(4)+ada(4)
wechseln, so dass Du in den Genuß von NCQ und anderer Ver-
besserungen kommst. Das wirkt sich positiv auf die Disk-
Performance aus.

Wirksam, aber nicht ganz billig, ist der Einbau einer SSD.
Die hat nämlich nicht nur einen höheren Durchsatz, sondern
eine verschwindend geringe Seek-Time, was zu einer hohen
Zahl von IOPS (I/O operations per second) führt, und genau
das ist es, was beim Port-Bauen (unter anderem) von Vorteil
ist.

Nachdem auf alternate.de neulich die OCZ Vertex2 E (120 GB)
im Angebot war, habe ich da zugeschlagen und sie in meine
Workstation daheim eingebaut. Da ist jetzt das Basis-
system drauf. Die »normale« 1TB-Festplatte, die bisher
drin war, habe ich drin gelassen und verwende sie als
»Datenhalde« für größere Sachen.

Das Ding schafft 250 bis 280 MByte/s und 50.000 IOPS.
Alles, was auf der Platte herummacht, ist damit eine wahre
Freude, sei es Ports bauen, make world, das Arbeiten mit
größeren Verzeichnisstrukturen (find, rm -r, .tar aus- und
einpacken usw.), und sogar das Abarbeiten der rc-Files beim
Booten geht erheblich schneller. Die Zeit vom root-Mount
bis zum Anzeigen des xdm-Login-Bildschirms hat sich bei mir
rund auf ein Viertel (!) reduziert.

(Das soll jetzt keine Werbung sein; ich stehe in keiner
Geschäftsbeziehung mit OCZ oder Alternate. Ich bin nur ein
zufriedener Privatkunde, der seine Erfahrungen weitergibt.)

> > Das Bild, das Du angegeben hast, sieht recht typisch für
> > den Fall aus, dass nebenher eine Software gebaut wird.
>
> Treffer :)
>
> Mal ne Frage: kann ich mir das irgendwie mit einem anderen Komando
> klarmachem, WAS da gerade so die CPU gelegt?

Ja, mit top oder ps. Das zeigt Dir genau an, welche Pro-
zesse »gerade« laufen, also exakt in dem Augenblick, in dem
top bzw. ps die Process-Table abfragen, um sie anzuzeigen.

Damit siehst Du natürlich nicht die Prozesse, die bereits
wieder beendet sind, weil sie vor ein paar Millisekunden
liefen.

Wenn Du wirklich verlässlich _alle_ Prozesse sehen willst,
egal wie lang sie laufen, musst Du das Process-Accounting
aktivieren (dazu gibt's ein Kapitel im Handbook). Das
zeichnet jeden einzelnen Prozess auf, der ausgeführt wird.
Da das mit einem gewissen Overhead verbunden ist (CPU-Zeit
und Plattenplatz), macht man davon nur in Ausnahmefällen
Gebrauch. Alternativ kann man auch die Auditing-Features
oder dTrace verwenden, um alle fork/exec*-Calls zu loggen.

Ein anderer Trick, den man anwenden kann, ist, mithilfe
von cpufreq den Prozessor vorübergehend stark zu bremsen.
Die Chance ist dann deutlich größer, dass Du die Prozesse
in top zu Gesicht bekommst. Wie gut das funktioniert,
hängt allerdings von der CPU ab; manche kann man bis auf
100 oder 50 MHz abbremsen, bei anderen wiederum kann man
den Takt maximal halbieren (was nicht viel bringt).

Alternativ schreibst Du eine kleine Endlosschleife (genügt
schon in der Shell: »while :; do; done«) und gibst ihr
vorsichtig negative nice-Werte (geht nur als root), so dass
sie mehr CPU-Anteil bekommt. Die anderen Prozesse, die
auch die CPU haben wollen, werden dann entsprechend ausge-
bremst, so dass auch wieder die Chance steigt, sie in top
zu Gesicht zu bekommen. In dem Fall solltest Du auch top
selbst eine höhere Priorität geben (negativer nice-Wert),
damit es mit der Anzeige hinterherkommt.

> Unter Windows kann man in dem sogenanten Taskmanager die Prozesse
> nach CPU-Zeit sortieren, und das bringt meist recht schnell die
> "fresser" nach oben (auch nicht Dauerhaft aber doch recht
> frequentiert). Sowas suche ich.

Der Windows-Taskmanager hat exakt das gleiche Problem wie
top: Sehr kurzlebige Prozesse wirst Du da kaum sehen.
Es ist nur so, dass Windows so einen schlechten Scheduler
hat, dass Prozesse dort traditionell eher langlebig sind.
Daher siehst Du sie dort. ;-)

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"The last good thing written in C was
Franz Schubert's Symphony number 9."
        -- Erwin Dieterich
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 17 Dec 2010 - 15:35:24 CET

search this site