HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。

新着トピックス

SSHクライアント「OpenSSH」

 OpenSSHは、SSHプロトコルによって暗号化されたネットワーク通信を利用してリモートサーバーにアクセスしたり、ファイルを送受信するためのツールだ。

 SSHプロトコルではRSAやDSAといった公開鍵暗号を利用して通信内容を暗号化し、安全な通信を実現している。しかし、RSAやDSAによる暗号化/復号処理はそれなりに計算量が必要であるため、インテル コンパイラーを使用することで処理の高速化が期待できる。

OpenSSHのコンパイル(Linux環境)

 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のとおりである。また、コンパイルオプションについてはデフォルトの設定を用いた。

表12 テストに使用した環境
構成要素サーバー側クライアント側
CPUCore 2 Duo E6550(2.33GHz)Core i7 920(2.66GHz)
メモリ2GB3GB
ネットワークインターフェイス10/100BASE-TX1000BASE-T
OSWindows Vista Business SP2Debian GNU/Linux 5.0
サーバー/クライアントソフトfreeSSHdOpenSSH

 以上の環境で、約660MBのDebian GNU/Linux 5.0インストールCDイメージをアップロードおよびダウンロードするのにかかった時間を測定したところ、次の表13のような結果となった。

表13 OpenSSHのパフォーマンス比較
条件コンパイラかかった時間転送速度
アップロードインテル コンパイラー64秒約10.3MB/s
GCC64秒約10.3MB/s
ダウンロードインテル コンパイラー58秒約11.4MB/s
GCC59秒約11.2MB/s

 ファイル転送ではネットワークの速度がボトルネックになることが多いため、残念ながら今回の検証結果ではコンパイラの違いによる差は誤差の範囲内でしか見られなかった。

インテル コンパイラーでオープンソースソフトウェアのコンパイルに挑戦しよう

 いくつかのオープンソースソフトウェアを実際にコンパイルしてみたが、多くのソフトウェアの場合インテル コンパイラーで簡単にコンパイルが可能である。さらに、ソースコードの修正を加えずとも、インテル コンパイラーを使用するだけでパフォーマンスの向上が見られたソフトウェアも多くあった。

 インテル コンパイラー 1000本ノックプロジェクトでは、これからもインテル コンパイラーによるオープンソースソフトウェアのコンパイルを行っていく予定だ。また、プロジェクトではインテル コンパイラーを使用して作成したソフトウェアの紹介や、コンパイルしてほしいソフトウェアの希望などもプロジェクトのフォーラムで受け付けているので、気軽に意見を寄せてほしい。