2008-10-02 9 views
5

Beim Ausführen von Leistungstests kann der Treffer oder Fehlschlag des Dateisystemcaches die Testergebnisse erheblich beeinflussen. Daher werden im Allgemeinen vor dem Ausführen solcher Tests verwendete Dateien aus dem Systemcache entfernt. Wie macht man das unter Linux?Wie Datei aus Systemcache unter Linux zu entfernen?

Erläuterung: Wenn möglich, sollte die Lösung keine Root-Berechtigungen erfordern.

Antwort

9

Ha, ich habe die Antwort:

#include <unistd.h> 
#include <fcntl.h> 
int main(int argc, char *argv[]) { 
    int fd; 
    fd = open(argv[1], O_RDONLY); 
    fdatasync(fd); 
    posix_fadvise(fd, 0,0,POSIX_FADV_DONTNEED); 
    close(fd); 
    return 0; 
} 

Dies ist von http://insights.oetiker.ch/linux/fadvise.html

11

Als Superuser Sie folgendes tun:

Um kostenlos Pagecache:

  • echo 1>/proc/sys/vm/drop_caches

Um freie Dentries und Inodes:

  • echo 2>/proc/sys/vm/drop_caches

Um freie Pagecache, Dentries und Inodes:

  • echo 3>/proc/sys/vm/drop_caches

Dieser Vorgang wird nicht "verlieren" alle Daten (Cache-Speicher geschrieben werden, um bevor die Daten gelöscht werden. Um jedoch sicherzustellen, dass der gesamte Cache bereinigt ist, sollten Sie zuerst die Synchronisierung durchführen. Z.B. alle Caches sollten, wenn Sie

sync; echo 3 > /proc/sys/vm/drop_caches 

Wie gesagt, nur ein Superuser (root), können dies laufen gelöscht werden.

0

In Bezug auf die Verwendung von O_DIRECT: das würde die Ergebnisse auf andere Weise stören. Der Kernel wird versuchen, die Dateisystemdaten direkt in Ihren lese() - Puffer zu schreiben, damit er Ihrer Anwendung übergeben werden kann, ohne dass eine zusätzliche Kopie erstellt wird. Ohne O_DIRECT speichert der Kernel die Dateidaten im Seitencache und kopiert sie vom Seitencache in Ihren read() - Puffer.

Dies ist in Ordnung, wenn Ihre App wirklich O_DIRECT in der Produktion verwenden wird. Wenn Sie Leistungstests mit O_DIRECT ausführen und dann O_DIRECT für die Produktion entfernen, ist Ihr Leistungstest unrealistisch.

-1

Wenn Sie die Testdaten in einem separaten Dateisystem setzen kann dann das Dateisystem Montage von neuem für den Test werden Sie leeren Caches geben .

Wenn Sie den Test fileystem in/etc/fstab mit der Option „User“ Liste, dann können Sie es für den Test montieren, ohne Superuser zu sein