そろそろ「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」と呼んでひとまとまりのグループとしている。デフォルトで実行されるのも、これらのベンチマークテストだ。
2020-05-09 19:59:03