Werden von eCryptfs Daten abgeholt und / oder gepuffert?

762
Rahul

Ich habe mit der Verwendung von eCryptfs als zugrunde liegendes Dateisystem für MySQL-Daten experimentiert, um die transparente Datenverschlüsselung für MySQL nachzuahmen . Ich habe einige Tests durchgeführt, um den Overhead der Entschlüsselung zu messen, wenn MySQL Daten liest und ich merkwürdige Ergebnisse bekomme.

Ich bereitete eine Tabelle mit einer Größe von 7,5 GB vor und führte eine vollständige Tabellensuche (SUM) durch. Ich habe zwei Szenarien -

  1. Wenn das zugrunde liegende fs ext4 ist und keine Verschlüsselung vorliegt, beträgt die durchschnittliche Zeit der Abfrage bei mehreren Durchläufen 22,5 Sekunden
  2. eCryptfs auf ext4 eingehängt -
    • Wenn die Tabelle zum ersten Mal erstellt wird, beträgt die durchschnittliche Laufzeit der Abfrage 21 Sekunden. (Da es sich um weniger als unverschlüsselte handelt, ist ein Vorabruf erforderlich?)
    • Löschen Sie die MySQL-Puffer und führen Sie die Abfrage erneut aus. Die durchschnittliche Laufzeit beträgt jetzt 9,6 Sekunden (aufgrund der eCryptfs-Pufferung?).
    • Wenn ich mein Verzeichnis ummounte und es erneut mounte, ohne die Daten neu zu erstellen, beträgt die durchschnittliche Zeit etwa 17 Sekunden . Das ist wieder geheimnisvoll. Haben eCryptfs beim ersten Entschlüsseln einige unverschlüsselte Metainformationen gespeichert?

Ich habe diese Tests mehrmals durchgeführt (jedes Mal die MySQL-Puffer gelöscht), und ich erhielt konsistente Ergebnisse. Kann jemand bitte erklären oder mich auf eine Ressource verweisen, die dieses Verhalten erklärt? Kann man das deaktivieren (für die Tests)?

3

1 Antwort auf die Frage

1
Rahul

Ich habe dieselbe Frage in der Mailingliste von eCryptfs gestellt. Dies ist der Thread -

http://comments.gmane.org/gmane.comp.file-systems.ecryptfs.general/294

Einer der Top-Mitwirkenden, Tyler Hicks, antwortete auf die Anfrage, hier kopiert (falls der Link nicht mehr funktioniert)

== BeginMessage ==

Ihre Testergebnisse sind für mich auf den ersten Blick nicht sinnvoll.

In den meisten Kernelversionen verwendet eCryptfs das Durchschreiben von Zwischenspeichern. In einigen Kernel-Releases wurde ein Write-Back-Cache implementiert, der jedoch einige Probleme verursachte und der Patch zurückgesetzt wurde.

Für die SUM-Abfrage, die Sie ausführen, würde ich erwarten, dass alle Lesevorgänge ausgeführt werden. Rückschreiben oder Durchschreiben sollten daher keine Rolle spielen. Es gibt eine Ebene für das Caching der verschlüsselten Seiten im unteren Dateisystem und dann eine weitere zwischengespeicherte Ebene der entschlüsselten Seiten auf der eCryptfs-Ebene. Dies ist sicherlich etwas anderes als bei der Verwendung von nur ext4.

Sie sprachen über das Löschen der MySQL-Puffer und des eCryptfs-Seitencaches (durch das Aufheben der Bereitstellung von eCryptfs und das erneute Bereitstellen von eCryptfs) zwischen den Tests. Es gibt immer noch den unteren Cache des Dateisystems, der nicht gelöscht wird. Vielleicht hat das etwas damit zu tun, aber ich bezweifle, dass dies die ganze Geschichte ist.

Verwenden Sie innodb_flush_method = O_DIRECT? eCryptfs implementiert keine direkte E / A, daher bin ich mir nicht sicher, wie MySQL dies zusätzlich zu eCryptfs vs. ext4 handhaben würde, was direkte E / A bewirkt.

Dies ist etwas, was ich mehr herausfinden müsste, um einen Sinn daraus zu machen. Was Sie sehen, ist definitiv seltsam.

== Ende der Nachricht ==

Könnten Sie zusammenfassen, was der Link in Ihrer Antwort für den Fall sagt, dass er tot wird? jonsca vor 11 Jahren 0