HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
OpenSSHは、SSHプロトコルによって暗号化されたネットワーク通信を利用してリモートサーバーにアクセスしたり、ファイルを送受信するためのツールだ。
SSHプロトコルではRSAやDSAといった公開鍵暗号を利用して通信内容を暗号化し、安全な通信を実現している。しかし、RSAやDSAによる暗号化/復号処理はそれなりに計算量が必要であるため、インテル コンパイラーを使用することで処理の高速化が期待できる。
OpenSSHのコンパイルには、OpenSSHのほかデータ圧縮/展開ライブラリ「zlib」やOpenSSLに含まれる「libcrypt」が必要だ(コンパイル設定によってはそのほかのライブラリも必要であるが、今回は最小限の構成でコンパイルを行っている)。まずはこれらをインテル コンパイラーでコンパイルし、最後にOpenSSHをコンパイルすることになる。
なお、以下では「~/local/」ディレクトリ以下にこれらをインストールするよう設定を行っている。それ以外のディレクトリへのインストールを行う場合は適宜「prefix=」以下を変更してほしい。
まずzlibのコンパイルであるが、zlibのソースアーカイブはzlibのWebサイトから入手できる。今回はzlib 1.2.3(アーカイブファイルは「zlib-1.2.3.tar.gz」)を使用した。このアーカイブファイルを適切なディレクトリに展開し、次のように実行する。
$ cd zlib-1.2.3 $ CC=icc CFLAGS="-O3 -ip" ./configure --shared $ make make install prefix=$HOME/local
また、~/local/ディレクトリ以下にインストールされたライブラリを使用するため、下記のように「LD_LIBRARY_PATH」環境変数を設定しておく。
export LD_LIBRARY_PATH=~/local/lib/:$LD_LIBRARY_PATH
以上で、~/local/lib/ディレクトリ以下にzlibのスタティックライブラリおよび共有ライブラリがインストールされ、利用可能になる。
続いて、OpenSSLのコンパイルを行う。ソースアーカイブは公式Webサイトから入手が可能だ。今回はOpenSSL 0.9.8(アーカイブファイル名は「openssl-0.9.8k.tar.gz」)を使用した。
適切なディレクトリにアーカイブを展開し、以下のように実行する。
$ cd openssl-0.9.8k $ CC=icc ./config --prefix=$HOME/local --shared $ make $ make test $ make install
最後に、OpenSSH本体のコンパイル作業を行う。OpenSSHのソースアーカイブは、ミラーサイト(JAIST)から入手可能だ。今回はOpenSSH 5.2p1(アーカイブファイル名は「openssh-5.2p1.tar.gz」)を使用した。ダウンロードしたアーカイブを展開後、以下のように実行する。
$ cd openssh-5.2p1 $ CC=icc CFLAGS="-O3 -ip -I$HOME/local/include" LDFLAGS="-L$HOME/local/lib" ./configure --prefix=$HOME/local --with-privsep-path="$HOME/local/empty" $ make $ make install
以上の作業が完了すると、~/local/bin/ディレクトリ以下に「ssh」や「scp」、「sftp」といったSSH関連コマンドがインストールされているはずだ。
コンパイラの違いによる差異を確認するため、sftpコマンドを使用してファイルをアップロード/ダウンロードするのにかかった時間を測定した。使用した環境は次の表12のとおりである。また、コンパイルオプションについてはデフォルトの設定を用いた。
構成要素 | サーバー側 | クライアント側 |
---|---|---|
CPU | Core 2 Duo E6550(2.33GHz) | Core i7 920(2.66GHz) |
メモリ | 2GB | 3GB |
ネットワークインターフェイス | 10/100BASE-TX | 1000BASE-T |
OS | Windows Vista Business SP2 | Debian GNU/Linux 5.0 |
サーバー/クライアントソフト | freeSSHd | OpenSSH |
以上の環境で、約660MBのDebian GNU/Linux 5.0インストールCDイメージをアップロードおよびダウンロードするのにかかった時間を測定したところ、次の表13のような結果となった。
条件 | コンパイラ | かかった時間 | 転送速度 |
---|---|---|---|
アップロード | インテル コンパイラー | 64秒 | 約10.3MB/s |
GCC | 64秒 | 約10.3MB/s | |
ダウンロード | インテル コンパイラー | 58秒 | 約11.4MB/s |
GCC | 59秒 | 約11.2MB/s |
ファイル転送ではネットワークの速度がボトルネックになることが多いため、残念ながら今回の検証結果ではコンパイラの違いによる差は誤差の範囲内でしか見られなかった。
いくつかのオープンソースソフトウェアを実際にコンパイルしてみたが、多くのソフトウェアの場合インテル コンパイラーで簡単にコンパイルが可能である。さらに、ソースコードの修正を加えずとも、インテル コンパイラーを使用するだけでパフォーマンスの向上が見られたソフトウェアも多くあった。
インテル コンパイラー 1000本ノックプロジェクトでは、これからもインテル コンパイラーによるオープンソースソフトウェアのコンパイルを行っていく予定だ。また、プロジェクトではインテル コンパイラーを使用して作成したソフトウェアの紹介や、コンパイルしてほしいソフトウェアの希望などもプロジェクトのフォーラムで受け付けているので、気軽に意見を寄せてほしい。
[PageInfo]
LastUpdate: 2009-11-18 20:39:15, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members