Autor Beitrag
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 27.05.07 17:17 
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 FILE_FLAG_NO_BUFFERING und FILE_FLAG_WRITE_THROUGH gefunden, aber der MSDN-Artikel 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

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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* ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 15.02.08 09:46 
user profile iconMartok 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 15.02.08 13:42 
user profile iconLuckie hat folgendes geschrieben:
user profile iconMartok 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.

user profile iconLuckie 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 26.02.08 10:07 
user profile iconBenBE 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.