In C-Datei-E/A kann das Flag O_DIRECT
verwendet werden, um Cache-Effekte für eine Datei zu minimieren, die open()
ed ist. Ich verstehe, dass dies keine POSIX-Funktion ist, seit Version 2.4.10 im Linux-Kernel vorhanden ist und dass Linus der Schnittstelle im Allgemeinen widerspricht. Unter NetBSD scheint es wie angekündigt zu funktionieren. Beispielaufruf:Portabilität von offenen (... O_DIRECT) in C?
int fd = open(filename, O_DIRECT);
Ich versuche, einig Low-Level-Disk Benchmark-Dienstprogramme zu schreiben, und mit O_DIRECT
eine potenziell gute Möglichkeit zur Messung der Scheibe und Antriebsleistung ohne die Auswirkungen der OS-Dateisystem/Block-Cache aussieht . Idealerweise möchte ich den Benchmark unter Linux, Windows (Cygwin ist OK), Mac OS X und BSD-Systemen ausführen können. Ist O_DIRECT
der beste Weg, um die Betriebssystem-Festplatten-Caches zu umgehen, in Bezug auf Portabilität und Zuverlässigkeit für das Benchmarking? Gibt es Alternativen?
Sie sollten ein anderes Flag als nur O_DIRECT in den Aufruf von open(); Was Sie implizit getan haben, ist O_RDONLY, aka 0. –
Für zukünftige Google-Suchen wird diese Frage von dieser anderen StackOverflow-Frage beantwortet: http://stackoverflow.com/questions/2299402/how-does-one-do -raw-io-on-mac-os-x-ie-equivalent-zu-linux-o-direct-flag –