Windows10 1903でELFバイナリの動作速度が向上した模様

 先日ほぼすべてのマシンにリリースされたWindows10の最新のアップデート1903を適用したところ、WSL上で実行しているプログラムの処理速度が速くなったような気がします。
 気のせいかとも思ったのですが、1903へアップデートする前のマシンもあったので、アップデート前後での処理時間を測定してみたところ、確かに高速化していました。
 

測定内容・条件

  • WSL上でleptonでJPEGファイルを圧縮する所要時間をtimeコマンドで測定
  • 1903へのアップデート前後に、同一マシンで同一JPEGファイル(3ファイルを用意)を対象に測定

 

測定結果

圧縮対象ファイルA
time 1809 1903
real 2.672 2.637
user 7.047 6.984
sys 0.422 0.391

※表中の数値単位は秒(以下同様)
⇒realで約1.3%の高速化、userは0.9%の高速化、sysは7.3%の高速化

圧縮対象ファイルB
time 1809 1903
real 2.668 2.590
user 7.000 6.938
sys 0.453 0.484

⇒realで約2.9%の高速化、userは0.9%の高速化、sysは-6.8%と低速化

圧縮対象ファイルC
time 1809 1903
real 2.754 2.614
user 6.938 6.906
sys 0.422 0.438

⇒realで約5.1%の高速化、userは0.5%の高速化、sysは-3.8%と低速化

平均
  • 測定値の相加平均から算出した高速化率
real
3.1%
user
0.7%
sys
-1.2%
  • 測定値の中央値から算出した高速化率
real
2.2%
user
0.9%
sys
-3.8%

 

まとめ

 検証対象プログラムはleptonの1つだけ、検証対象データは3ファイルだけと、サンプル数は少ないですが、上記測定からは以下のことが言えます。

  • 実所要時間(real)としては数%の高速化が果たされている
    • userは僅少ながらも高速化している
    • sysは少なからず遅くなる場合があるようだ(が、総所要時間に占めるsysの割合は小さいため実害はない)

 

(雑記)

 投機的実行の脆弱性の緩和策のペナルティを低減する更新だとか、ファイルシステム回りも含めたWSLの大幅な強化が行われるWSL2だとか、関係しそうなWindowsの機能改善についての記事は見かけていたので、それらの影響かと思ったのですが、前者は1903より前に提供されていますし、後者は1903より後の未来の話のようです。
 なお、以下のMicrosoft公式の情報を確認しても、該当するような内容は掲載されていません。というわけで、直接的に何が原因で高速化したのかは判りません。
Windows 10 Version 1903 の新機能 | Microsoft Docs
 
 参考までに、上記で測定に使ったJPEG圧縮ツールのleptonはELF64バイナリです。

$ readelf -h /usr/bin/lepton
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - GNU
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x6f80
  Start of program headers:          64 (bytes into file)
  Start of section headers:          510576 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         10
  Size of section headers:           64 (bytes)
  Number of section headers:         30
  Section header string table index: 29

 1903へのアップデート前後で、通常のWindows版バイナリ形式のプログラムのパフォーマンスが変化したという体感はありません。
 



以上。