Archive for the 'Performance' Category

Festplatten-Verschlüsselung unter Linux/Ubuntu

Raphael Vullriede November 21st, 2009

Anlässlich des Kaufes einer externen Festplatte für mein Notebook (Plextor PX-PH500US) habe ich die Gelegenheit genutzt, mir mal die Performance verschiedener Verschlüsselungsmöglichkeiten unter Linux anzuschauen. Da eine für den Nutzer transparente Verschlüsselung des Home-Verzeichnisses möglich sein sollte, blieben nur eCryptfs und LUKS. Zusätzlich habe ich noch TrueCrypt getestet, da ich das bereits unter Windows genutzt habe.
eCryptfs und LUKS/Truecrypt benutzen unterschiedliche Ansätze wie Dateien verschlüsselt werden. Während eCryptfs tatsächlich einzelne Dateien verschlüsselt, operieren LUKS/Truecrypt auf Blocklevel. Zu Vor- und Nachteilen einfach mal Google bemühen.

Testsystem:

uname -a
Linux nexus 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 GNU/Linux
cat /proc/cpuinfo | grep "model name"
model name    : Intel(R) Core(TM)2 Extreme CPU Q9300  @ 2.53GHz
model name    : Intel(R) Core(TM)2 Extreme CPU Q9300  @ 2.53GHz
model name    : Intel(R) Core(TM)2 Extreme CPU Q9300  @ 2.53GHz
model name    : Intel(R) Core(TM)2 Extreme CPU Q9300  @ 2.53GHz
sudo hdparm -I /dev/sdb | grep Model
Model Number:       TOSHIBA MK5055GSX

Interessant, Plextor verbaut also Toshiba-Platten…

Um die Test einfach zu halten benutze ich Bonnie 1.03c . Es gibt sicherlich bessere Benchmarks aber um einen ersten Eindruck zu bekommen reicht es! Bei der Interpretation beziehe ich mich in erster Linie auf die Block-Operationen, da diese in einem echten System den Großteil des Workload ausmachen.

Zum Vergleich erstmal die Performance ohne Verschlüsselung im Auslieferungszustand, d.h. VFAT als Dateisystem:

VFAT USB 2.0

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 28284  56 28552   7 14808   5 33960  75 34282   5 143.8   0
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16    75  64 +++++ +++  1826  99   107  50 +++++ +++   665  96

VFAT eSATA

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 49123  76 60099  12 30173   9 72605  94 75029  11 164.4   0
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16    86  63 +++++ +++  1834  99   114  51 +++++ +++   675  98

Wie nicht anders zu erwarten ist eSATA in allen Bereichen um Längen besser. Interessant dabei ist allerdings die höhere CPU-Auslastung. Alle weiteren Tests wurden nur noch mit eSATA durchgeführt.

Alles erstes mal ein vernünftiges Dateisystem testen:

Ext4 eSATA

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 53860  80 54020  10 25841   6 67645  92 73386  11 174.7   0
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++

53,8MB/s schreiben und 73,4MB/s lesen, nicht schlecht! Auf jeden Fall besser als meine interne Festplatte :-)

Zuerst zum Vergleich eCryptfs:

Ext4 eCryptFS eSATA

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 29381  97 48973  97 21543  57 46309  97 73448  71 112.2   1
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16  4846  52 +++++ +++ 25089  89  9856  96 +++++ +++  4622  13

Es bleiben 48,9MB/s schreiben und 73,4MB/s lesen bei deutlich höherer CPU-Auslastung. Weiterhin sind die Seeks/s deutlich zurückgegangen. Der Performance-Verlust ist allerdings nicht so hoch wie erwartet.

Ext4 LUKS (aes-xts-plain, 256Bit, cryptsetup 1.0.6)

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 51435  77 49828   8 27971   7 52273  76 73933  10 167.7   0
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++

49,8MB/s schreiben, 73,9MB/s lesen. Die Werte sind somit nahezu gleich zu eCryptfs, trotz vollkommen unterschiedlicher Ansätze. Allerdings ist die CPU-Auslastung gerade mein Lesen deutlich geringer und es sind mehr Seeks möglich.

Ext4 TrueCrypt eSATA (AES 128Bit, RIPE-160, TrueCrypt 6.3)
Da der TrueCrypt-Wizard auch in der aktuelle Version noch kein Ext4 kennt musste ich das Dateisystem von Hand anlegen, wie zu Beispiel hier beschrieben.

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bl018550         6G 50909  84 52487   8 27557   6 41492  85 74252  12 174.3   0
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++

52,4MB/s schreiben und 74,2MB/s lesen. Schreiben und Seeks/s sind hier also fast genauso schnell wie ohne Verschlüsselung.

Fazit:

  • Verschlüsselung muss kein Performancefresser sein (Vorausgesetzt man hat eine CPU dafür über ;-) )
  • Schreiboperationen sind bei allen Lösungen zwar langsamer als ohne Verschlüsselung, ob der Unterschied in der Praxis allerdings eine Rolle spielt sei dahingestellt.
  • eCryptfs hat leichte Nachteile gegenüber Mechanismen die auf Blocklevel-Ebene arbeiten. Dafür ist die Integration in Ubuntu deutlich besser und man kann die verschlüsselten Dateien einfacher sichern.