Edited at

CPU脆弱性Meltdownのパッチ適用でベンチマークスコアが25%低下した

More than 1 year has passed since last update.

いま話題のCPU脆弱性Meltdownですが、

各OSベンダーからカーネルのパッチが配布され始めました。

個人で利用しているEC2にパッチを適用して、ベンチマークをとったところ、

トータルスコアが25%低下という結果が出ましたのでまとめます。

※環境やCPUの種類やベンチマークの取り方で変わるので、

必ずしも全ての環境においてこの結果が正しいわけではありません。


環境とスペック


  • EC2インスタンスタイプ:t2.midium

  • OS: 3.10.0-693.11.6.el7.x86_64 (CentOS 7)

  • CPU: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz (2コア)


結論


  • コンテキストスイッチの速度が低下する。

Meltdown関連の記事にもあるように、

パッチ適用によってカーネルモードとユーザモードのアドレス空間を分離する措置が取られるため、

システムコールやハードウェア割り込み時のオーバーヘッドが大きくなることが分かりました。


  • 基本的な演算処理能力には影響ない。

ベンチマークツール上では計算処理の速度低下は見られませんでした。

脆弱性の詳細をあまり理解しておらず、その結果だけを見て速度低下は無さそうだと勘違いしてしまったので、

ベンチマークの計測を考えている方はテスト項目に注意してください。


使ったベンチマークツール


  • LINPACK

  • 姫野ベンチマーク

  • UnixBench


LINPACKと姫野ベンチマーク

LINPACKはIntel、姫野ベンチは理研のツールらしいです。

LINPACKはスパコンの性能比較で使われています。

どちらもインストールも簡単でシンプルで使いやすかったのですが、

これらは計算処理を元にベンチマークを出すタイプだったため、

Meltdownのパッチ適用前後では変化が見られず有益な結果が得られませんでした。

※そのためベンチ結果は割愛します。


UnixBench

Unixと付いてますが、元々Unix向けに開発された後Linux用に移植されたらしいです。

40個ほどのテスト項目があり、デフォルトだと15項目をテストしてくれます。

実行時の引数-iは試行回数です。デフォルトだと10回実行するので30分ほどかかります。


インストールから実行までの手順

# sudo yum install perl-Time-HiRes

# cd /usr/local/src/
# wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/byte-unixbench/UnixBench5.1.3.tgz
# tar xvzf UnixBench5.1.3.tgz
# cd UnixBench
# make
# ./Run -i 1

1コアだけで計測した場合と、全コア使った場合の2通りを計測してくれますが、

全コア(2コア)使った場合のみ記載します。

BASELINEとは1995年頃のコンピュータ性能を意味しているそうで、固定値です。

その性能を1とした時の相対的な性能がINDEXです。


パッチ適用前


パッチ適用前

------------------------------------------------------------------------

Benchmark Run: Fri Jan 05 2018 13:05:04 - 13:11:47
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables 62784918.6 lps (10.0 s, 1 samples)
Double-Precision Whetstone 7849.1 MWIPS (9.9 s, 1 samples)
Execl Throughput 5955.7 lps (29.1 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks 1627842.0 KBps (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks 430865.0 KBps (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks 4064151.0 KBps (30.0 s, 1 samples)
Pipe Throughput 3106533.0 lps (10.0 s, 1 samples)
Pipe-based Context Switching 560702.3 lps (10.0 s, 1 samples)
Process Creation 23914.5 lps (30.0 s, 1 samples)
Shell Scripts (1 concurrent) 10148.7 lpm (60.0 s, 1 samples)
Shell Scripts (8 concurrent) 1399.0 lpm (60.1 s, 1 samples)
System Call Overhead 3570647.5 lps (10.0 s, 1 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 62784918.6 5380.0
Double-Precision Whetstone 55.0 7849.1 1427.1
Execl Throughput 43.0 5955.7 1385.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 1627842.0 4110.7
File Copy 256 bufsize 500 maxblocks 1655.0 430865.0 2603.4
File Copy 4096 bufsize 8000 maxblocks 5800.0 4064151.0 7007.2
Pipe Throughput 12440.0 3106533.0 2497.2
Pipe-based Context Switching 4000.0 560702.3 1401.8
Process Creation 126.0 23914.5 1898.0
Shell Scripts (1 concurrent) 42.4 10148.7 2393.6
Shell Scripts (8 concurrent) 6.0 1399.0 2331.7
System Call Overhead 15000.0 3570647.5 2380.4
========
System Benchmarks Index Score 2534.9



パッチ適用後


パッチ適用後

------------------------------------------------------------------------

Benchmark Run: Fri Jan 05 2018 15:19:18 - 15:26:02
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables 62876708.3 lps (10.0 s, 1 samples)
Double-Precision Whetstone 7840.0 MWIPS (9.9 s, 1 samples)
Execl Throughput 5044.5 lps (29.7 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks 1094523.0 KBps (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks 310239.0 KBps (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks 3346623.0 KBps (30.0 s, 1 samples)
Pipe Throughput 1771787.9 lps (10.0 s, 1 samples)
Pipe-based Context Switching 324654.9 lps (10.0 s, 1 samples)
Process Creation 20214.7 lps (30.0 s, 1 samples)
Shell Scripts (1 concurrent) 9043.8 lpm (60.0 s, 1 samples)
Shell Scripts (8 concurrent) 1247.2 lpm (60.0 s, 1 samples)
System Call Overhead 1438079.5 lps (10.0 s, 1 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 62876708.3 5387.9
Double-Precision Whetstone 55.0 7840.0 1425.5
Execl Throughput 43.0 5044.5 1173.1
File Copy 1024 bufsize 2000 maxblocks 3960.0 1094523.0 2763.9
File Copy 256 bufsize 500 maxblocks 1655.0 310239.0 1874.6
File Copy 4096 bufsize 8000 maxblocks 5800.0 3346623.0 5770.0
Pipe Throughput 12440.0 1771787.9 1424.3
Pipe-based Context Switching 4000.0 324654.9 811.6
Process Creation 126.0 20214.7 1604.3
Shell Scripts (1 concurrent) 42.4 9043.8 2133.0
Shell Scripts (8 concurrent) 6.0 1247.2 2078.7
System Call Overhead 15000.0 1438079.5 958.7
========
System Benchmarks Index Score 1893.4



パッチ適用前後の比較

テスト項目
パッチ適用前
パッチ適用後
性能低下割合(%)

Dhrystone 2 using register variables
5380
5387.9
100.1

Double-Precision Whetstone
1427.1
1425.5
99.9

Execl Throughput
1385
1173.1
84.7

File Copy 1024 bufsize 2000 maxblocks
4110.7
2763.9
67.2

File Copy 256 bufsize 500 maxblocks
2603.4
1874.6
72.0

File Copy 4096 bufsize 8000 maxblocks
7007.2
5770
82.3

Pipe Throughput
2497.2
1424.3
57.0

Pipe-based Context Switching
1401.8
811.6
57.9

Process Creation
1898
1604.3
84.5

Shell Scripts (1 concurrent)
2393.6
2133
89.1

Shell Scripts (8 concurrent)
2331.7
2078.7
89.1

System Call Overhead
2380.4
958.7
40.2

System Benchmarks Index Score
2534.9
1893.4
74.7

著しく低下してる項目の意味は以下の通りです。


  • Pipe Throughput…… 小さいサイズのデータでパイプ処理を繰り返す。OSやCPU性能が見れる。

  • Pipe-based Context Switching…… プロセス間のコンテキストスイッチの速度を測る。

  • System Call Overhead…… 単純なシステムコールを繰り返し実行する。

一番下の合計スコアから分かる通り、総合して25%低下という結果でした。

元々5~30%程度低下するとの情報があったため、予想通りという結果でした。

ですが、単純な演算速度テストである

Dhrystone 2 using register variables

Double-Precision Whetstone

に関しては性能低下は見られませんでした。

UnixBenchについてはこちらの記事が詳しいです。

http://blog.idcf.jp/entry/cloud/unixbench/