Ich versuche zu verstehen, wie der Write-Back-Cache auf einem RAID-Controller weiterhin Vorteile bringen kann, während Sie einen riesigen zufälligen Datensatz schreiben.Lassen Sie mich zunächst sagen, dass ich verstehe, wie ein Write-Back-Cache funktioniert: Das Betriebssystem erhält einen I/O-Abschluss bei einem Schreibvorgang, wenn die Daten den Controller-Cache und nicht das langsamere zugrunde liegende Medium erreichen, und der Controller schreibt die Daten dann so schnell wie möglich auf das Medium. Wenn das der Fall ist,Wenn Sie Daten also sehr schnell schreiben, als das Trägermedium sie schreiben kann, würde ich davon ausgehen, dass der Controller-Cache gesprengt wird und die Leistungssteigerung durch das Zurückschreiben wegfällt, und Sie am Ende eine Leistung erzielen, die einer Write-Through-Konfiguration entspricht?
Was ich oben beschrieben habe, ist das, was ich erwarten würde, aber es ist nicht das, was ich sehe. Der Write-Back-Cache-gestützte Server hat konstant mindestens 4x höhere IOPS und Durchsatz und hält dies aufrecht; im Vergleich zu einem identischen Server, den ich in den Write-Through-Modus versetzt habe. Irgendwelche Ideen, wie sich dieses Verhalten erklären lässt?
Und ja, ich schreibe viel mehr Daten als nötig, um den Dateisystem-Cache zu füllen, und ich schreibe sie sehr schnell.
Antwort1
Der Write-Back-Cache ermöglicht dem Betriebssystem, die Daten vor dem Schreiben besser zu organisieren, was zu einer Leistungssteigerung führt. Wenn Sie viele relativ kleine Schreibvorgänge durchführen, können Sie die Leistung erheblich steigern, indem Sie die Daten mehrerer aufeinanderfolgender Schreibvorgänge zusammenfassen und alle auf einmal auf das Medium schreiben.
In geringerem Maße kann der Write-Back-Cache dem Betriebssystem dabei helfen, die Clustergröße beim Schreiben anzupassen. Wenn Sie beispielsweise 10.000 Bytes auf einmal schreiben und die Clustergröße 8.192 Bytes beträgt, verhindert das Caching, dass das Betriebssystem 1.808 Bytes in einen teilweise gefüllten Cluster schreibt (wofür der Cluster zuerst gelesen werden müsste).