2008年4月25日

Debian で VIA の PadLock を使ってみる

以前持っていた EPIA-ME6000 が不幸なことに再起不能になってしまった。直ぐにEPIA-EN12000EGを入手してたのだが、当時のLinuxのSATA_VIAドライバは不安定だったので、放ったらかしにしていた。

症状として、立ち上げ直後は問題ないが、それからしばらくするとディスク関連でエラーを吐いてフリーズしてしまい、長時間運用ができない、、、何じゃこれって感じ。

最近(etch/lenny ともに最新版)試したところ sata_via は非常に安定している気がする。

VIA C7 Esther には、ハードウェア処理のAES暗号化、SHA関数、乱数生成といった目玉な機能が実装されている。

なんで、Linux で使いましょう。。。。

参考 VIA PadLock support for Linux

ハードウェア乱数生成

Debian etch/lenny の Linux 2.6.18/2.6.24? ともに十分なサポートがあり、rng-tools を使うと、/dev/random からの乱数生成の帯域が太くなるらしい。

apt でインストール

# apt-get install rng-tools

設定を行い

/etc/default/rng-tools

...
RNGDOPTIONS="--hrng=via"
...

/etc/modules

via_rng

rngd を立ち上げ、動作確認をする。

# /etc/init.d/rng-tools stop
# dd if=/dev/random of=/dev/null bs=512 count=1000 & pid=$!
# sleep 10 ; kill -USR1 $pid ; sleep 1 ; kill $pid
0+0 records in
0+0 records out
0 bytes (0 B) copied, 10.0067 seconds, 0.0 kB/s
# /etc/init.d/rng-tools start
# dd  if=/dev/random of=/dev/null bs=512 count=1000       
0+1000 records in
0+1000 records out
96169 bytes (96 kB) copied, 1.04326 seconds, 92.2 kB/s

/dev/random に十分なエントロピーが供給されているので、ブロックされることは殆ど無くなる。

VIA Padlock for Linux Crypto API

VIA Padlock は Linux 2.6.19 からフルサポートされる。素のDebian etch のままだと 2.4.18 止まりなのだが、最近 etch-proposed-updates にバージョンに etchnhalf が含まれる linux-image が提供され、こいつが最新カーネルバージョンに追随してるっぽい。なので、etch でも 2.6.24 が使えるのでこいつを使う。

# apt-get install linux-image-2.6-686-etchnhalf
# reboot
...
# uname -r
2.6.24-etchnhalf.1-686

VIA Padlock のモジュールを読み込むように設定

/etc/modules

padlock_aes
padlock_sha

リブートして

# grep driver.*padlock /proc/crypto
driver       : sha256-padlock
driver       : sha1-padlock
driver       : cbc-aes-padlock
driver       : ecb-aes-padlock
driver       : aes-padlock

カーネルで使える暗号化処理 AES/SHA が高速化するらしい。IPSec 、dm-crypt、とかが、、、

# dd if=/dev/zero of=/dev/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.0236812 seconds, 221 MB/s
...
# modprobe padlock_aes
# cryptsetup create -c aes-cbc-essiv:sha256 -d /dev/random ram1 /dev/ram1
# dd if=/dev/zero of=/dev/mapper/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.142272 seconds, 36.9 MB/s
# cryptsetup remove ram1
# rmmod padlock_aes
...
# modprobe aes_i586
# cryptsetup create -c aes-cbc-essiv:sha256 -d /dev/random ram1 /dev/ram1
# dd if=/dev/zero of=/dev/mapper/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.902938 seconds, 5.8 MB/s
# cryptsetup remove ram1
# rmmod aes_i586

VIA Padlock を使った方が 6倍くらい速くなるらしい。。。

これでユーザランドで高速化されるかと言うと、Linux Crypto API は、userland にはインタフェースを持っていない。。。パッチは2種類(CryptoDev for Linux,OCF-Linux)あるらしいが、いまだに議論があるらしく、マージされてない。

OpenBSD/FreeBSD だと OpenSSLが CryptoDev を使うようになってるので、何もせずに高速化されるらしい。。。いいなぁ。

VIA Padlock for OpenSSL

Debian etch/lenny ともに、VIA Padlock の engine が有効にして構築されていなので、自前で用意する必要がある。どうも共有ライブラリの形でプラグイン化できないのが駄目らしい。

VIA PadLock support for Linux 内の以下のパッチを当て、パッケージを再構築。

  • openssl098-padlock-shared-move.diff
  • openssl098-padlock-shared-makefiles.diff

インストール後、/usr/lib/ssl/engines/libpadlock.so がインストールされる。

# openssl speed -evp aes256            
Doing aes-256-cbc for 3s on 16 size blocks: 1847840 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 575493 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 154125 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 39230 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 4929 aes-256-cbc's in 3.00s
...
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc       9855.15k    12277.18k    13152.00k    13390.51k    13459.46k
# openssl speed -evp aes256 -engine padlock
engine "padlock" set.
Doing aes-256-cbc for 3s on 16 size blocks: 10478263 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 8095021 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 256 size blocks: 4480017 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 1600314 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 228568 aes-256-cbc's in 3.00s
...
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      55884.07k   173271.35k   382294.78k   546240.51k   624143.02k

via_rng/padlock_aes の効果で、実に約46倍速くなるらしい。。。はや。

OpenSSL を使う奴のほとんどが簡単なパッチを当てる必要があるらしい。そのうち改善されていくのかなぁ。

OpenSSH にパッチを当てて VIA Padlock を有効にした場合、

 ...  ssh/sshd ともにソフトウェアバージョンを利用 ...
# dd if=/dev/zero count=50 bs=1M | ssh -c aes256-cbc localhost "cat >/dev/null"
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 11.8916 seconds, 4.4 MB/s
 ...  ssh/sshd ともに padlock engine を利用 ...
# dd if=/dev/zero count=50 bs=1M | ssh -c aes256-cbc localhost "cat >/dev/null"
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 7.88281 seconds, 6.7 MB/s

約 50 % の高速化かぁ。。。

さて EPIA-EN12000EG をどう活用しようかなぁ。

0 件のコメント:

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...