SSブログ

Raspberry Pi (の7) [プログラム]

無線+openvpnでの通信速度を測定してみます。

もともとRaspberry Piは、P6世代Celeronの128KB L2キャッシュのクロック240MHz相当程度なので速度を期待するのは間違いですが、無線の上限値くらいまでは出てるのか、気になるところです。大雑把に調べてみましょう。
大雑把なので、ftpでなくscpで(笑)。

まず、無線ルータの無線部分だけを、一昔前のx86マシンで同士で測定。
    $ scp x86host:/tmp/file50MB /tmp/
    file50MB     100%   50MB   9.9MB/s   00:05
10MB/sありますね。150Mbpsの1/2程度、実測96Mbpsという広告は正しいですね。あ、ネットワークが100Baseでした(笑)。ですので、無線ルータの実力値はもっと高いかもしれません。
じゃぁ、openvpnを通してみると、一昔前のx86マシンで同士では
    $ scp x86host-ovpn:/tmp/file50MB /tmp/
    file50MB     100%   50MB   8.3MB/s   00:06
15%減ですかね。それでも8MB/sです。

じゃぁ、Raspberry Piはというと、56MBのファイルを/tmp(tmpfs)に作成して、ダウンロードしてみます。
    $ scp raspberrypi:/tmp/file50MB /tmp/
    file50MB     100%   56MB   1.1MB/s   00:49    
おおぅ。1MB/s!? 10Baseの速度ですよ。約10Mbps。1/8〜1/7程度ですな。

実はこの速度は、片側だけRaspberry Piでした。もう一方は、組込み用PenM 600MHz。

で、両方をRaspberry Piにするとどうなるか、ですが、overclockを2段階のところに上げて
    $ scp raspberrypi:/tmp/file50MB /tmp/
    file50MB      100%   50MB   1.0MB/s   00:48
これくらいです。2.8MB/sからだんだん速度が遅くなってくのはなぜ?
でもまぁ、こんなもんですかね。瞬間最大では2.9MB/s出てましたし。
topでみると、idleが0%、openvpnが65%、sshが25%。openvpn重すぎです(笑)。

ついでに、このあたり、
自分でやってみないとわからないものだという典型をひとつ。

OpenVPNの速度ですが、そういえば、昔々に貧弱な組込み用CPUで実装したときに250KB/s(約2Mbps)という、FastEther(100Base)の2%!!!という衝撃の結果がでて驚いたものです。そのあと、それより速い組込み用P●werPCでも1.4MB/s(約1.1Mbps)で、あーこれはOpenVPNの設計仕様どおりでuserとkernelを行き来するため、非常に重いんだと納得していました。確かに、数GHzのInt●lの石とかでは、100Baseフルほどではないにしてもまぁなんとか速度がでていますが、とにかくそれくらいCPU性能を要求するものなのでしょう。

で、Raspberry PiでIPSecの導入に挫折、OpenVPNを入れてみたところ、通信速度が1MB/sで、今更、10Base5/2/Tの速度を使うのかーとがっかり。だって、700MHzのARM11ですよ? 組込み用P●werPCでも1.4MB/sですよ? って、確かに自作ベンチだと、旧Celeronの240MHz相当な結果しか出てないので当然の結果といえばそうなのでしょうけど、もう何年もの時間が経過しているわけでムーアの法則?なにそれ的な事態にめまいが。念のためググって調べてみると、他の人も同じ程度の速度しかでていないようでした。

少しでも速くしたいなーと思ってあれこれやってみました。

  1. OverClockする
    これは効果があります。ただし、「動作する範囲」でしかOverClockできませんが。
    CPUにヒートシンクをつけて、カバーをせずに、OverClockも中(5段階の3)ならある程度安定して動作するようです。が、OverClockの効果も限定的 (CPU:700MHz→900MHz、 Core:250MHz→333MHz、 SDRAM:400MHz→450MHz) で、10〜20%程度でしょうか。
  2. MTU,cipher
    MTUを引き下げてみたり、AES-256-CBCからBF-CBCにしてみたり、comp-lzoを無効にしたり、… いずれも効果ありません。この結果は、某掲示板でもそのようなことが書かれていて、私も同じ結果でした。
  3. OpenVPN?
    とりあえず、topで見てみると,巨大ファイル転送時に、openvpnが65%、sshが25%を占有してます。なーんだ、openvpnが重すぎるだけかー。となると、openvpnの中身、といってもOpenSSLを使っているのでしょうから、そっちを高速化しないとどうにもなりませんね(もし他の部分に問題がないとしたら、ですが)。
    これについては、同じ某掲示板では、「非力なCPUでも負荷は高くない」みたいなところの人もいたようですが、私のところとは全然状況が違います。Raspberry PiのARM11 700MHzだとopenvpnの負荷が高すぎて速度が出ないようです。考えてみると昔の250KB/sしか出なかったのもCPUを100%使い切っていたからなんでしょうね。
  4. ついでに
    AESを高速化できないか、ということで、ググってみたところ、いくつかヒットしました。簡単にまとめてみると、
    • AESのための専用命令を持ってるCPUは速いらしい
      そりゃ当然か。まぁ、AESのためのハード(モジュール)は使うのが難しい(私は使うことができなかった)ので、命令ならインラインアセンブラを使うとかあまり難しくないから、実装しやすいでしょうね。
    • ARM内蔵のGPUを使うと17%くらい速くなるらしい
      ( http://www.scs.stanford.edu/~deian/pubs/osvik:2010:fast.pdf )
      簡単にできるならOpenSSLに実装されてますよね。手間がかかるんじゃないですか、それ。そんな手間とOverClockの手間を考えたとき、同じ程度の性能アップなら、どっちが楽か、答えはひとつですね。

…というわけで、まとめると、

  • ネットの情報は、自分の結果と「合致することもある」し、一方、正反対の「まったく正反対の場合もある」ということで、自分で裏をとらない限りは、「自分にとっての真実」が分からない。(あれっ、そういう話だったっけ?)
  • Raspberry PiのOpenVPNは1MB/s程度の速度(設定によりもう少し速くなる)。
  • OpenVPNは処理としてはかなり重い部類に入る。重い原因が、実装の問題なのか、設計の問題なのか、場合によってはカーネルのバグなのかは不明。
  • ARM11内蔵GPUによる高速化もOverClockによる高速化も同じ程度の高速化。OpenSSLに実装されるまで待ち。一方、OverClockは動作可能範囲でやっておくとよいだろう。

ということになりました。

 



共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。