2014年7月27日日曜日

CentOS7 の cryptsetup で AES-NI が活用されているか確認する方法

CentOS 7 の cryptsetup には、benchmark オプションが追加されており、これを利用することで、Intel CPU の AES-NI 命令が活用されているか確認できます。わたしの自宅メインマシン ThinkPad T510 (Intel Core i7 M620 2.67G) の場合のデータです。
[root@hoge ~]# grep i7 /proc/cpuinfo 
model name : Intel(R) Core(TM) i7 CPU       M 620  @ 2.67GHz
model name : Intel(R) Core(TM) i7 CPU       M 620  @ 2.67GHz
[root@hoge ~]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       396586 iterations per second
PBKDF2-sha256     234057 iterations per second
PBKDF2-sha512     156410 iterations per second
PBKDF2-ripemd160  320078 iterations per second
PBKDF2-whirlpool  157349 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   639.9 MiB/s  1498.5 MiB/s
 serpent-cbc   128b    62.0 MiB/s   261.6 MiB/s
 twofish-cbc   128b   151.4 MiB/s   213.0 MiB/s
     aes-cbc   256b   493.1 MiB/s  1194.9 MiB/s
 serpent-cbc   256b    65.2 MiB/s   262.2 MiB/s
 twofish-cbc   256b   155.1 MiB/s   212.9 MiB/s
     aes-xts   256b  1351.7 MiB/s  1344.8 MiB/s
 serpent-xts   256b   230.7 MiB/s   239.1 MiB/s
 twofish-xts   256b   196.6 MiB/s   196.9 MiB/s
     aes-xts   512b  1088.9 MiB/s  1066.1 MiB/s
 serpent-xts   512b   231.7 MiB/s   240.8 MiB/s
 twofish-xts   512b   198.4 MiB/s   196.7 MiB/s
aesni_intel をロードしないようにして、計測すると、次のように数値が下がり、ちゃんと活用されている様子が確認できます。
[root@hoge ~]# grep aesni_intel /etc/modprobe.d/aes.conf 
blacklist aesni_intel
[root@hoge ~]# lsmod | grep aesni_intel
[root@hoge ~]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       402678 iterations per second
PBKDF2-sha256     234057 iterations per second
PBKDF2-sha512     156597 iterations per second
PBKDF2-ripemd160  319687 iterations per second
PBKDF2-whirlpool  159454 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   165.1 MiB/s   187.2 MiB/s
 serpent-cbc   128b    62.3 MiB/s   263.5 MiB/s
 twofish-cbc   128b   152.1 MiB/s   214.3 MiB/s
     aes-cbc   256b   127.4 MiB/s   139.9 MiB/s
 serpent-cbc   256b    63.4 MiB/s   264.3 MiB/s
 twofish-cbc   256b   155.8 MiB/s   213.9 MiB/s
     aes-xts   256b   187.5 MiB/s   185.2 MiB/s
 serpent-xts   256b   231.2 MiB/s   242.4 MiB/s
 twofish-xts   256b   197.7 MiB/s   197.7 MiB/s
     aes-xts   512b   140.6 MiB/s   140.8 MiB/s
 serpent-xts   512b   232.0 MiB/s   242.6 MiB/s
 twofish-xts   512b   199.1 MiB/s   197.6 MiB/s
この数値だと、SSD 等の高速なディスクに LUKS で暗号化してデータ格納するなら、AES-NI(Intel CPU の暗号化支援命令)によりスループットが大幅に向上しそうですね。

2014年7月16日水曜日

CentOS7 使いはじめメモ

現在書きかけです。

RHEL7.0 RC を弄って、少し探ってはいましたが、CentOS 7.0 をサーバ利用し始めるにあたり、自分なりの勘所をまとめてみようと思います。

■インストール開始前に考えること(2014-07-16)
CentOS 6 以下でも、OS ディスクのパーティション構成、割り当てサイズについては考えていたわけですが、CentOS 7 ではファイルシステムの選択肢が増えているために、どれにしようか迷うかもしれません。選択肢は3つ XFS(デフォルト), Ext4, Btrfs(まだTechnology Preview) あります。
また、LVM を使うか否かも考慮事項ですが、新しく LVM のシンプロビジョニングを利用することもできます。
さらに、ソフトウェア RAID は md ではなく、Btrfs の RAID 機能を利用できます。Btrfs は、データとメタデータのチェックサム機能を備えており、RAID 機能を利用すれば、md を越える耐障害性を発揮できる(はず)です。・・・でも Red Hat 社は、RHEL7.0 では、まだ Btrfs は Technology Preview と言ってますので、リスクが高いと考えられます。Btrfs は、透過圧縮機能も魅力なのですが。

■ファイルシステムはどれにしたらいいか?(2015-01-22追記)
レッドハット社は XFS を推してますが、わたしとしては、OS 領域については、ext4 でよいのではと考えます。CentOS 6(または RHEL6)以下の利用経験があれば、その経験値(システムバックアップのノウハウなど)を使える点からの選択です。もしも、RHEL7+商用サポートサービス(N社やF社など)を利用するならどうかというと、やはり ext4 を選択するのがよかろうと思います。ext4 ならば、障害事例やノウハウが商用サポートベンダに、豊富に蓄積されていることが期待でき、従って、トラブル発生時の対応時間が XFS よりは短くて済むと考えられるためです。
さて、次にデータ領域のファイルシステムをどうするかということですが、だいたい5年先(たいていのサーバの利用年数はこのくらいでは)を考えて、データ量が 16TB を越えることが予想されるのであれば、XFS を選択すれば良いだろうと思います。ext4 上に既存データがあり、そのデータ量が5年先でも 16TB を越えそうにないのならば、RHEL7系に移行しても、引き続き ext4 を使うのが良いのではと思います。現在の ext4 ならば、ブロックサイズを 4K を越える値(例えば 8K)にすることで、16TB を越えられるはずですが、この使用形態は商用実績がほとんど無いものと考えられるので、リスクが高いと思われます。
2015-01-25追記、認識が間違っていたようで、ブロックサイズは 4K のままのようです。こちらを参照。

2014-11-12追記
まとめようと思いつつ放っているが、過去の経験上、安定志向ならば RHEL7.2 あたりから使ったほうが良いだろうと思う。あくまで個人的感触。

2015-04-23追記
RHEL7.1/CentOS7.1 がリリース済みですが、期待の Btrfs は、引き続きTechnology Previewのままでした。

2015-09-05追記
RHEL7.2 Beta のリリースノートが公開されましたが、期待の Btrfs は、今回もTechnology Previewのままでした。
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/7.2_Release_Notes/index.html
ですが、カーネルのchangelogを眺めてみると、精力的に取り組んでいる様子が伺えます。RHEL6系カーネルのほうのchangelogには Btrfs: がぽつぽつとしか出てきませんので、見比べればわかります。

2015-11-23追記
RHEL7.2 がリリースされたようですが、やっぱり Btrfs は Technology Preview でした。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/7.2_Release_Notes/index.html

2014年7月5日土曜日

Perlのprintf("%d")の落とし穴

古いマシンで、32bit版のCentOS6を使っているのですが、その環境で手持ちのPerlスクリプトの出力値がおかしく(負値になる)、つまるところ2Gを越える整数値をprintf("%d")で表示しようとすると、オーバーフローするためのようでした。
[root@hoge ~]# cat /etc/redhat-release 
CentOS release 6.4 (Final)
[root@hoge ~]# uname -p
i686
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024;printf("%d\n",$a*$b);'
1073741824
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*2;printf("%d\n",$a*$b);'
-2147483648
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*3;printf("%d\n",$a*$b);'
-1073741824
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*4;printf("%d\n",$a*$b);'
-1
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*5;printf("%d\n",$a*$b);'
-1
現象はわかりましたが、ちゃんと表示できるようにするにはどうしたらいいのか、しばし格闘したのち、%sを使えば、よきに計らってくれることがわかりました。Perlよ、ありがとう。
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*2;printf("%s\n",$a*$b);'
2147483648
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*3;printf("%s\n",$a*$b);'
3221225472
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*4;printf("%s\n",$a*$b);'
4294967296
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*5;printf("%s\n",$a*$b);'
5368709120
あるいは、いったん変数に入れれば、次のように書けます。場合によっては、こちらのほうがいいかも。
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*2;$c=$a*$b;print("$c\n");'
2147483648
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*3;$c=$a*$b;print("$c\n");'
3221225472
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*4;$c=$a*$b;print("$c\n");'
4294967296
[root@hoge ~]# perl -e '$a=1024*1024;$b=1024*5;$c=$a*$b;print("$c\n");'
5368709120
もちろん、64bit環境では%dであっても、負にはなりません。
人気ブログランキングへ にほんブログ村 IT技術ブログへ