このページの本文へ

前へ 1 2 次へ

Windows Info 第223回

20H1とともに正式に来るWindows Subsystem for Linux 2の実力を見る

2020年05月10日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 そろそろ「May 2020 Update」こと、Windows 10 Ver.2004(以下コード名で20H1)が最終版になる。とりあえず、完成したよ的なアナウンスがあった。

 20H1における最大の変更点は、Linuxカーネルを使うWSL2(Windows Subsystem for Linux 2)だ。そこで今回は、WSL1とWSL2を比較してみることにした。WSL2ではLinuxカーネルが仮想HDD上でネイティブのファイルシステムを動作させる。このため、NTFSの上でLinuxのファイルシステムをエミュレートしていたWSL1のVolFs(あるいはlxfx)に比較してファイル処理などが高速化するという。

 その一方で、WSL2では仮想マシン環境でLinuxカーネルを起動させるためオーバーヘッドがある。また、WSL2からNTFS側をアクセスするには、9Pと呼ばれるネットワークプロトコルが用いられる。これにより、WSL2側からWindowsのファイルアクセスは可能になるが、ネットワークによるファイル共有と同じ仕組みであるため効率はよくない。

 そこでまずは、WSL1/WSL2内部でのベンチマークでCPU性能やカーネルの機能呼び出し性能(WSL1では、WindowsがLinuxカーネルをエミレーションしている)、ファイルアクセス性能などを調べていきたい。

UnixBenchは米国Byte誌が開発したUnix用ベンチマークソフトで、ソースコードとして公開されており、コンパイルすることでWSL上のLinuxでも動作する

Linux上でのベンチマークにはどんなものがある?

 Linux上でシステム性能を測定する方法はいくつかある。たとえば、/proc/cpuinfoには、bogomipsと呼ばれる値があり、これは起動時に簡易的になされるCPU速度の測定だ。ただしWSL1では、Linuxカーネルがないため、bogomipsもどうやって測定しているかハッキリしない。また、ファイルシステムのアクセス速度は、ddと呼ばれるコマンドがファイルシステム上の転送速度を表示できるため、簡易な速度測定によく使われる。

 これ以上になると、ベンチマーク専用のソフトウェアを利用する必要がある。そのうち著名なものの1つがUnixBenchだ。

 Unixbenchは、旧Byte誌が作成した。Byte誌は、8bitパソコンの時代にもBASICのベンチマークソフトウェアを発表していたことがある。このUnixbenchは、Unixワークステーションが普及し始めた頃に作られ、整数演算、浮動小数点演算やプロセス生成やシェルによる処理、2D/3Dグラフィックス描画性能などの測定ができる(ただしグラフィックスは、X Window Systemが前提であるため、今回は割愛した)。

 ソースコードが公開されていて、現在も開発が続いており、Linuxへの対応も進められている。今回はこれを使って、WSL1とWSL2を比較してみたい。評価にはプレビュー版ビルド19041.208を用い、WSLには、Ubuntu-18.04を使った。CPUは、Core i7-3517U(クロック1.9GHz)、メモリは8GBである。

Unixbenchを実際に動かしてみる

 今回はUnixbenchのうち、すべてのコアで並列に実行した。デフォルト設定では、シングルコアとマルチコアのテストを別にするのだが、時間の関係もあり、マルチコアでのテストのみとした。行ったテストは以下の表のようなものだ。Unixbenchでは、これらのテストをまとめて「system」と呼んでひとまとまりのグループとしている。デフォルトで実行されるのも、これらのベンチマークテストだ。

 上の表に含まれるテストは、かつては製品同士の比較などに使われていたポピューラーなものだが、今の読者にとってはドライストーン(Dhrystone)やウェットストーン(Whetstone)など聞いたこともないという人は少なくないだろう。そこで簡単に解説しておく。

 浮動小数点演算の性能を測定するためのWhetstoneベンチマークは1972年にイギリス国立物理学研究所で開発された。ウェットストーンという名称は、最初にプログラムを記述した「Whetstone Algol 60」というコンパイラーの名称に由来し、もともとはイギリスの地名であった。

 Algolは、ヨーロッパ(EU統合以前の話である)が中心になって開発したコンピューター言語である。ウェットストーンは意味のある計算をするものではなく、評価対象としたKDF9というコンピューターでプログラムを実行したときの機械語命令の利用頻度を再現するようなプログラムとして作られた。つまり、ウェットストーンは当時の一般的なプログラムとほぼ同じ機械語命令を含むため、その実行結果から該当マシンのプログラムの実行速度を評価できるとされていた。

 ドライストーンは、このWhetstoneに対して整数演算性能やメモリアクセスの速度を調べるために作られたプログラムで、「ウエット(湿った)」に対して「ドライ(乾いた)」という連想から名前が付けられ、Whetstoneと同じく2文字目を「h」とした。開発は1984年で、米国防省が採用したことで著名となったAdaという言語のソースコードとして公開されたが、のちにC言語に移植されUnix上で動作するものとなった。

 ドライストーンが必要になったのは、浮動小数点演算ハードウェアは、メインフレームなどでは一般的だったのに対して、ミニコンやマイクロプロセッサを使ったシステムでは必ずしも搭載されておらず、ソフトウェアによる演算が一般的であり、これにウェットストーンでは適さなかったからである。

 この2つは、当初はコンピューターシステムの性能を測定するという意味合いが強かったが、最近のCPUから見るとどちらも小さなプログラムであるためキャッシュに入ってしまう。そこでどちらかというとCPU性能を測定するものとして使われることが多い。かつては、コンピューター同士の比較を1秒間に実行できる命令数(MIPS値)で比較していたこともあったが、それでは最近のスーパースケーラーやアウトオブオーダー実行といった機能やCISC、RISCといった命令セットの違いなどを考慮できないため、ドライストーンで測定した値を元にしたDMIPS(Dhrystone MIPS)を使うことがある。

 UnixBenchで実行する、ほかのテストとしては、Unixのシステムコール関係(syscall、pipe、context1、spawn、execl)やファイルコピー(fstime、fsbuffer、fsdisk)、シェルプログラムの実行性能がある。システムコール関係のベンチマークでは、API呼び出しのオーバーヘッドや実行ファイルからのプログラム起動、プロセスの生成などの性能を測定する。また、シェルプログラムによる簡易な実行のベンチマークでは、シェルスクリプト(sort、grep、od、tee、wcなどの基本Unixコマンドによるもの)を繰り返し実行したときの速度を測る。

 このUnixbenchが広く使われたのは、1980年代からのUnixブームやその後のワークステーションブームの頃。当時GUIはすでに利用可能だったが、多くのユーザーはコンソールやターミナルウィンドウからコマンドラインで利用することが多く、こうしたベンチマークは体感性能と、さほどかけ離れていなかった記憶がある。

 UnixBenchは、C言語で記述した実行プログラムをPerlから起動している。また一部のベンチマークはPerl側で行なっている。なお、UnixBenchを実行するには、ソースコードを入手し、これをコンパイルする必要がある。ただし、コンパイル手順などは煩雑になるため今回は省略させていただく。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン