Für Benchmarking-Zwecke möchte ich Apache 2 zwingen, jede angeforderte Datei von der Festplatte zu laden, anstatt sie aus einem Cache im Speicher zu laden. Nach dem, was ich gelesen habe, wird eine Synchronisierung durchgeführt, gefolgt von
echo 3 > /proc/sys/vm/drop_caches
Lass mich den Linux-Cache löschen. Eine nachfolgende Anforderung für eine bestimmte Datei wird dann nicht aus dem Linux-Cache bereitgestellt, aber weitere Anforderungen für dieselbe Datei werden erneut aus dem Linux-Cache bereitgestellt. Dies liegt daran, dass / proc / sys / vm / drop_caches das Caching nicht deaktiviert, sondern nur das verwirft, was bis zu diesem Moment zwischengespeichert wurde. Ich könnte den Cache wahrscheinlich vor jeder einzelnen Anfrage löschen, aber ich würde eine andere Lösung bevorzugen. Kann ich noch etwas tun, um sicherzustellen, dass Apache jede angeforderte Datei von der Festplatte lädt?
Warum ich das tun möchte : Ich weiß, dass im normalen Betrieb das Caching aktiviert ist. Der Server stellt jedoch keine kleinen Dateien bereit, auf die häufig zugegriffen wird, z. B. HTML-Seiten, kleine Bilder usw. Stattdessen werden Dateien bereitgestellt, die meist ein paar Megabyte groß sind und aus einem sehr großen Satz von Dateien stammen. Auf diese Dateien wird ziemlich einheitlich zugegriffen, und daher wird sehr selten auf jede einzelne Datei zugegriffen. Daher erwarte ich im normalen Betrieb, dass die meisten Zugriffe keinen Cache-Treffer verursachen, sondern dass die Datei von der Festplatte geladen werden muss. Ich habe mehrere Beispieldateien, auf die ich mit apaches ab zugreifen möchteBenchmark, um zu messen, wie viele Transaktionen pro Sekunde der Server bedienen kann. Leider glaube ich, dass die Ergebnisse, die ich erhalte, aufgrund von Caching viel zu optimistisch sind. Daher möchte ich das Festplatten-Caching von Linux deaktivieren, und das Zwischenspeichern von Apache kann sich von selbst erledigen.
Update: Die bisher gegebene Antwort sagt mir, wie ich Apaches eigenes Caching deaktivieren kann, aber ich frage mich immer noch, ob es eine Möglichkeit gibt, das vom Linux-Kernel durchgeführte Caching zu deaktivieren.
quelle
Antworten:
Ich glaube nicht, dass Sie das gesamte Festplatten-Caching unter Linux deaktivieren können.
Als Hack können Sie weiterhin "sync; echo 3> / proc / sys / vm / drop_caches" ausführen, um fast alles zu löschen, was im Speicher zwischengespeichert ist. Von der Konsole
würde den Trick machen. Im obigen Beispiel bleibt nichts länger als eine Sekunde vom Kernel zwischengespeichert, obwohl dies keine Auswirkungen auf Daten hat, die von Apache oder anderen Prozessen im Speicher gespeichert werden. Es werden möglicherweise auch keine Inhalte aus Dateien mit Speicherzuordnung gelöscht, die noch geöffnet sind und Teile gesperrt haben.
Wenn Sie zu Beginn eines Testlaufs nur nichts zwischengespeichert haben möchten und es Ihnen egal ist, ob während der Tests Daten zwischengespeichert werden, können Sie "sync" und "echo 3> / proc / sys / vm" einfach einen einzelnen Aufruf hinzufügen / drop_caches "zu Beginn Ihres Testlaufs.
Wenn Ihr Test Skripte umfasst, die auf eine Datenbank zugreifen, müssen Sie Ihrem Datenbank-Back-End mitteilen können, dass zwischen den Tests auch keine Daten im RAM zwischengespeichert werden sollen.
quelle
Sie können den Großteil des Caching in Apache deaktivieren, indem Sie das Modul mod_cache deaktivieren. Das Auskommentieren der folgenden Zeilen in Ihrer Konfiguration sollte den Trick tun:
LoadModule cache_module
LoadModule disk_cache_module
LoadModule mem_cache_module
quelle
Nein, die Verwendung des Puffercaches kann nicht deaktiviert werden. Es gibt Möglichkeiten, dies programmgesteuert zu tun (z. B. Öffnen der Datei in O_DIRECT), aber Apache müsste dazu neu geschrieben werden.
Im Kern sieht es so aus, als würden Sie versuchen, Ihr E / A-Subsystem für mehrere Streaming-Megabyte-Dateien zu vergleichen. Es gibt viel bessere Möglichkeiten, dies zu tun, ohne den Overhead von Apache in das Bild zu mischen.
Wenn Sie entschlossen sind, dies zu versuchen, können Sie versuchen, ein kleines Programm zu schreiben, um den größten Teil des physischen Speichers auf dem Computer zu speichern, um den verfügbaren Festplatten-Cache zu reduzieren. Dies würde jedoch wahrscheinlich dazu führen, dass der Server Ihre Benchmark-Ergebnisse ruiniert (Apaches Multi Process) Modell wird schlecht mit diesem in Wechselwirkung treten , wenn Sie das set
StartServers
,MinServers
undMaxServers
auf den gleichen Wert zu vermeiden Prozesserstellung während der Benchmark -Durchlaufs)quelle
Ich bin hier vielleicht furchtbar unpassend (also lassen Sie mich wissen, wenn ich eine falsche Annahme mache), aber das Zwischenspeichern von Datenträgern unter Linux wird als Swap bezeichnet und verwendet eine Swap-Datei oder eine Swap-Partition.
Sollte das Festplatten-Caching deaktivieren.
quelle