Entwickler-Ecke
Windows API - FILE_FLAG_NO_BUFFERING: Wie verwenden?
Martok - So 27.05.07 17:17
Titel: FILE_FLAG_NO_BUFFERING: Wie verwenden?
Hallo!
Win2K-Nutzer kennen das Problem vielleicht: im Gegensatz zu allen anderen Windows-Versionen ist der Systemcache nicht in der Größe limitiert. Er wächst also bei allen Dateioperationen ins unendliche mit, bis der RAM voll ist.
Das heißt auch, dass Windows zum Beispiel beim kopieren großer Datenmengen (z.B. Videos, Unmengen Fotos, ...) schnell unbenutzbar wird, da alles in den RAM kommt und er die wichtigen Sachen auslagert! Windows in 50MB laufen zu lassen, geht halt nicht.
Nun wollte ich mir ein Tool schreiben, dass unter Umgehung der Windows-Caches direkt kopiert. Dabei hab ich für
CreateFile [
http://msdn2.microsoft.com/en-us/library/aa363858.aspx] FILE_FLAG_NO_BUFFERING und FILE_FLAG_WRITE_THROUGH gefunden, aber der
MSDN-Artikel [
http://support.microsoft.com/default.aspx?scid=kb;en-us;99794] hilft mir nicht wirklich.
Hier gibts ja einige Leute, die sich mit WinAPI auskennen *zu Luckie schiel*
(andere dürfen auch antworten...), kann mir das mal jemand genau erklären? Von den internen Strukturen der Speicherverwaltung von Windows versteh ich halt nicht so wirklich was, daher sagt mir das nicht so viel...
Danke,
Sebastian
Martok - Do 14.02.08 19:48
Der Thread ist zwar fast ein Jahr her, aber bei einem Plattenumzug vor kurzem hatte ich das Problem wieder, daher... *push* ;)
Delete - Fr 15.02.08 09:46
Titel: Re: FILE_FLAG_NO_BUFFERING: Wie verwenden?
Martok hat folgendes geschrieben: |
| Das heißt auch, dass Windows zum Beispiel beim kopieren großer Datenmengen (z.B. Videos, Unmengen Fotos, ...) schnell unbenutzbar wird, da alles in den RAM kommt und er die wichtigen Sachen auslagert! Windows in 50MB laufen zu lassen, geht halt nicht. |
Wieso?
| Zitat: |
| The FILE_FLAG_WRITE_THROUGH flag for CreateFile() causes any writes made to that handle to be written directly to the file without being buffered. |
Und:
| Zitat: |
| The FILE_FLAG_NO_BUFFERING takes this concept one step further and eliminates all read-ahead file buffering and disk caching as well, so that all reads are guaranteed to come from the file and not from any system buffer or disk cache. When using FILE_FLAG_NO_BUFFERING, disk reads and writes must be done on sector boundaries, and buffer addresses must be aligned on disk sector boundaries in memory. |
Was ist daran nicht hilfreich?
Martok - Fr 15.02.08 13:42
Luckie hat folgendes geschrieben: |
Martok hat folgendes geschrieben: | | Das heißt auch, dass Windows zum Beispiel beim kopieren großer Datenmengen (z.B. Videos, Unmengen Fotos, ...) schnell unbenutzbar wird, da alles in den RAM kommt und er die wichtigen Sachen auslagert! Windows in 50MB laufen zu lassen, geht halt nicht. |
Wieso? |
Gute Frage. Wenn das irgendwer wüsste, wäre einigen geholfen ;)
Ist aber ein bekanntes Problem in Win2k, quer durch sämtliche ServicePacks. In NT und 2003 aufwärts ist der Cache-Manager nicht so verbuggt... außer, das soll ein Feature sein :|
Zum testen kannst du ja mal was kopieren, und im Taskmanager beobachten wie sich der System Cache aufbläst. Und vor allem, nicht wirklich wieder runter kommt. Da werden gerne mal 2GB+ gecached, was bei 2GB physikalischem RAM zu den genannten Ergebnissen führt.
Luckie hat folgendes geschrieben: |
| Was ist daran nicht hilfreich? |
Dieser Teil:
| Zitat: |
| When using FILE_FLAG_NO_BUFFERING, disk reads and writes must be done on sector boundaries, and buffer addresses must be aligned on disk sector boundaries in memory. |
BenBE - Di 26.02.08 00:14
Ganz einfach: Du musst immer Vielfache von 512 Bytes lesen (ein Sektor). Dein Puffer muss eine durch 512 teilbare Adresse haben).
Noch was?
Delete - Di 26.02.08 10:07
BenBE hat folgendes geschrieben: |
| Ganz einfach: Du musst immer Vielfache von 512 Bytes lesen (ein Sektor). Dein Puffer muss eine durch 512 teilbare Adresse haben). |
Ein Sektor muss nicht zwingend 521 Bytes groß sein. Es kommt darauf an, wie die Festplatte formatiert wurde.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!