2 Stimmen

Beibehaltung einer Datei im OS-Blockpuffer

Ich muss so viel wie möglich von einer großen Datei im Block-Cache des Betriebssystems behalten, auch wenn sie größer ist, als ich in den Ram passen kann, und ich lese ständig eine andere sehr große Datei. ATM Ich werde große Stücke der großen wichtigen Datei aus dem System-Cache entfernen, wenn ich eine andere Datei lese.

3voto

Sufian Punkte 8277

Unter Linux können Sie ein Dateisystem mit dem Typ tmpfs der bei Bedarf den verfügbaren Swap-Speicher als Backup verwendet. Sie sollten in der Lage sein, ein Dateisystem zu erstellen, das größer ist als Ihr Arbeitsspeicher, und es wird den Inhalt dieses Dateisystems im System-Cache priorisieren.

mount -t tmpfs none /mnt/point

Siehe: http://lxr.linux.no/linux/Documentation/filesystems/tmpfs.txt

Sie können auch von den folgenden Dateien profitieren swapiness y drop_cache innerhalb /proc/sys/vm

3voto

Don Neufeld Punkte 21948

Wenn Sie Windows verwenden, öffnen Sie die zu überprüfende Datei mit dem Flag

FILE_FLAG_SEQUENTIAL_SCAN

Sie können auch Folgendes verwenden

FILE_FLAG_NO_BUFFERING

für diese Datei, aber es gibt einige Einschränkungen hinsichtlich der Lesegröße und der Pufferausrichtung.

3voto

Zan Lynx Punkte 51045

In einem POSIX-System wie Linux oder Solaris sollten Sie posix_fadvise verwenden.

Gehen Sie in der Streaming-Datei etwa so vor:

posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
  bytes = pread(fd, buffer, 64 * 1024, current_pos);
  current_pos += 64 * 1024;
  posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}

Und Sie können POSIX_FADV_WILLNEED auf Ihre andere Datei anwenden, was ihre Speicherpriorität erhöhen sollte.

Ich weiß, dass Windows Vista und Server 2008 auch raffinierte Tricks mit Speicherprioritäten anwenden können. Wahrscheinlich können auch ältere Versionen wie XP einfachere Tricks anwenden. Aber ich kenne die Funktionen nicht auswendig und habe keine Zeit, sie nachzuschlagen.

1voto

William Hutchen Punkte 689

Einige Betriebssysteme verfügen über Ramdisks, die Sie verwenden können, um ein Segment des Speichers für die Speicherung zu reservieren und dann als Dateisystem zu mounten.

Was ich allerdings nicht verstehe, ist, warum Sie das Betriebssystem daran hindern wollen, die Datei zwischenzuspeichern. Ihre gesamte Frage ergibt für mich keinen Sinn.

0voto

basszero Punkte 29038

Kaufen Sie mehr Arbeitsspeicher (der ist relativ billig!) oder lassen Sie das Betriebssystem sein Ding machen. Ich denke, Sie werden feststellen, dass die Umgehung des Betriebssystems mehr Aufwand bedeutet, als es wert ist. Das Betriebssystem wird so viel von der Datei zwischenspeichern, bis Ihre oder eine andere Anwendung Speicher benötigt.

Ich denke, man könnte die Anzahl der Prozesse minimieren, aber es ist wahrscheinlich schneller, mehr Speicher zu kaufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X