
Ich habe viele Torrent-Dateien heruntergeladen und während ich sie seede, ist mir aufgefallen, dass der Browser beim Starten sehr oft langsam ist und die Festplattenaktivitätsanzeige leuchtet. Wenn ich ein Programm starte, wird es normalerweise im RAM zwischengespeichert und der erneute Start geht sehr schnell. Da ich 3 GB RAM habe, bleibt es normalerweise fast ewig zwischengespeichert. Aber wenn mein Torrent-Client seedet, scheinen die von mir ausgeführten Programme nach einer Stunde nicht mehr im RAM zwischengespeichert zu sein.
Ich dachte, es liegt vielleicht daran, dass die vom Torrent-Client ausgeführten Festplattenlesevorgänge zwischengespeichert werden und schließlich den RAM füllen. Aber ich glaube nicht, dass das nötig ist, da sie nur einmal gelesen werden und es unwahrscheinlich ist, dass sie bald wieder gelesen werden.
Meine Fragen sind also: Ist das meine Ansicht und wenn ja, ist es grundsätzlich möglich, das Zwischenspeichern von Festplattenlesevorgängen zu verhindern? Ich kann versuchen, den Quellcode des Programms zu bearbeiten.
Antwort1
Es hängt genau davon ab, welches Torrent-Programm Sie verwenden. Einige von ihnen verhalten sich möglicherweise anders.
Aber ja, es ist möglich, den Systemcache zu umgehen, da dies ein häufiges Problem ist.
Wenn Sie mit der Bearbeitung der Quelle vertraut sind (vielleicht sollte dies auf einem anderen StackExchange sein...), finden Sie heraus, wo das Torrent-Programm die Datei von der Festplatte öffnet. Höchstwahrscheinlich ein open()-Aufruf. Wenn es fdopen() ist, verwendet es stdlib und ich bin nicht sicher, ob stdlib direkte E/A unterstützt.
Dieser Systemaufruf akzeptiert bis zu drei Argumente, das erste ist der Dateiname, das zweite sind Flags, das dritte ist eine optionale Dateierstellungsmaske. Die Flags werden O_RDWR
im Moment wahrscheinlich so aussehen. Das Flag für „Systemcache nicht verwenden“ ist O_DIRECT
, und Sie kombinieren Flags, indem Sie sie mit trennen |
.
Das Ergebnis des Flag-Arguments wäre in diesem Fall also O_RDWR | O_DIRECT
. Fügen Sie einfach das neue Flag hinzu.
Weitere Informationen finden Sie unter
man 2 open
Antwort2
Schließen Sie den Browser nicht :)
Der E/A-Cache (nur zum Lesen, nicht zum Schreiben in eine Datei) führt, egal wie groß er ist, nicht dazu, dass die vom Programm verwendeten Seiten ausgelagert werden.