Wenn ein Datenelement geschrieben werden soll, wird zuerst der Block mit den Daten in den Cache und das Datenelement in den Cache geschrieben. Dies kann zu einer Verschmutzung des Caches führen. Um dies zu vermeiden, hat Intel keine zeitlichen Anweisungen eingeführt.Umgehung der Übersetzung vermeiden Umgehung des Puffers (TLB) bei mmap()
Wenn ich mmap() verwenden werde, um Daten in die Datei zu schreiben und nie wieder zu lesen, ist es dann möglich, die Erstellung eines TLB-Eintrags zu vermeiden? Gibt es Anweisungen, die nicht-zeitlichen Anweisungen ähnlich sind?
Nein, ich bin mir ziemlich sicher, dass es nicht gibt, da Sie rigidpages nicht für file-backed mappings verwenden können. Die Verwendung von 'write' mit einer Puffergröße von vielleicht 1/2 L2-Cache-Größe oder etwas Ähnlichem könnte tatsächlich eine bessere Leistung bringen; du solltest testen. (Obwohl der Kernel prob. Beim Kopieren des Puffers in den Pagecache keine NT-Speicher verwendet). Sie können eine Verunreinigung des Seitencache vermeiden, wenn die Dateidaten * wirklich * lange Zeit nicht referenziert werden, indem Sie 'madvise (MADV_DONTNEED)' verwenden, um den Kernel dazu zu bringen, ihn nach dem Schreiben auf den Datenträger aus dem RAM zu löschen. –
pwrite() ist möglicherweise passender als write() abhängig von Ihren Zugriffsmustern. Aber ja, du solltest unbedingt testen. Ein anderer Vorschlag besteht darin, zu versuchen, sicherzustellen, dass alle Dateiänderungen auf derselben CPU stattfinden, um die Verschmutzung zu verringern. Vergessen Sie auch nicht, die Kosten für einen endgültigen TLB-Shootdown zu messen, wenn die Datei nicht zugeordnet ist. – Pseudonym