Ist es sicher, lseek () beim zweiten Lesen von Proc-FS-Dateien zu verwenden?

8
  1. Ist es sicher, lseek(fd,0) und dann read(fd,buf) für /proc/stat file zu verwenden, anstatt es erneut zu öffnen, um den Inhalt dieser Datei das nächste Mal zu aktualisieren?
  2. Und was macht der mmap() Aufruf nach dem Öffnen dieser Datei wirklich (siehe unten)?

Das Problem, auf das ich stoße, ist, dass Top-Berichte viel zu geringe CPU-Auslastung anzeigen (10% gegenüber 100% für Software-Interrupts). Der strace gibt an, dass top diese Datei nicht erneut öffnet, sondern stattdessen zum Anfang und liest es erneut. Und irgendwie stimmen die Inhalte, die beim nächsten Mal aus dieser Datei gelesen werden, nicht mit dem überein, was ich bekommen würde, wenn ich cat für /proc/stat file alleine laufen lasse.

Auch wenn ich top und cat /proc/stat in einer Schleife gleichzeitig starte, dann beginnt top, die korrekte CPU-Auslastung zu melden.

Ein weiterer Unterschied, den ich sehe, ist, dass top mmap() call direkt nach dem Öffnen der /proc/stat -Datei verwendet, während cat das nicht tut. Ich bin nicht sicher, ob dies auch mit meinem Problem zusammenhängen könnte (weil filesdes=-1 hier):

%Vor%

Ich benutze Ubuntu 10.04.1 Desktop Edition mit 2.6.32-27-Server Image. Die CPU ist Intel Q6600.

    
Hans Solo 24.01.2011, 23:36
quelle

1 Antwort

4

Es ist sehr interessant, was Sie fragen ... Ich fange an, meinen Computer einzuchecken, aber ich sehe keine Unterschiede zwischen cat / proc / stat und execute top. Wie auch immer, ich bin bei der Arbeit und ich bin nicht völlig frei, um Tests zu machen.

Die Beschreibung, wie Sie die geöffnete Datei aktualisieren, um neue Daten zu lesen, ist korrekt ... im Falle eines Aufrufs von [f | l] seek () bis zum Ende und dann am Anfang der Datei wird die Datei aktualisiert EOF und neue Daten werden gelesen.

Ich denke nicht, dass der Aufruf von mmap () das Problem verursachen wird, das Sie erwähnten, es könnte das Lesen schneller machen, aber sonst nichts (ich bin nicht 100% sicher).

Ich würde vorschlagen, dass Sie eine kleine App in C machen, die / proc / stat öffnet, sie liest, sie sucht und sie erneut liest, um zu sehen, wie sie aktualisiert wird, auch wenn Sie einen Stresstest machen müssen, der nützlich sein könnte / p>

Beantworte jetzt deine wahren Fragen:

  1. Ja, AFAIK ist sicher, weil Sie auf neue Daten in der Datei warten werden, und es sollte besser sein, als die Datei ständig zu öffnen und zu schließen.

  2. Es wird eine Datei dem Prozessadressraum zugeordnet, hier einige Informationen und Beispiele:

Ссылка http://www.linuxquestions.org/questions/programming-9/mmap-tutorial-c-c-511265/

    
webbi 25.01.2011, 13:22
quelle

Tags und Links