STREAMの使用方法 (Linuxメモリ帯域幅の計測方法)
メモリのバンド幅を計測するベンチマークツール「STREAM」を用いて、Linuxサーバの実効メモリ帯域幅(メモリバンド幅)・メモリ性能を計測する際の手順メモです。コンパイラはgccを使用しています。
「STREAM」は、簡単な手順でLinuxサーバやUNIXサーバの実効メモリ帯域幅・メモリ性能を計測できる優れたベンチマークツールです。ソースコードはOpenMPにも対応しており、OpenMPに対応したコンパイラを使用すれば、マルチスレッドで並列実行してメモリの限界性能を探ることもできます。
STREAM インストール
ソースのダウンロード URL
次のURLからリンクされている「Source Code Directory」を参照して、同ページからCのソースファイル(stream.c)をダウンロードして下さい。
http://www.cs.virginia.edu/stream/
ディレクトリの作成
$ cd /home/user $ mkdir stream $ cd stream
ソースファイルの配置
作成したディレクトリ配下にダウンロードしたソースファイル(stream.c)を配置します。
make
- シングルスレッド実行用
$ gcc -O stream.c -o stream
$ gcc -O -fopenmp stream.c -o stream_openmp
STREAM 実行(メモリ帯域幅の計測)
STREAM | data | Memory |
実行
- シングルスレッドでの実行
$ ./stream
$ ./stream_openmp
$ export OMP_NUM_THREADS=2 $ ./stream_openmp
STREAM 実行結果の見方
測定終了後、次のような実行結果が表示されます。
最大で 814 MB/sec の実効メモリ帯域幅を持っていることが分かります。
------------------------------------------------------------- STREAM version $Revision: 5.8 $ ------------------------------------------------------------- This system uses 8 bytes per DOUBLE PRECISION word. ------------------------------------------------------------- Array size = 2000000, Offset = 0 Total memory required = 45.8 MB. Each test is run 10 times, but only the *best* time for each is used. ------------------------------------------------------------- Printing one line per active thread.... ------------------------------------------------------------- Your clock granularity/precision appears to be 1 microseconds. Each test below will take on the order of 33451 microseconds. (= 33451 clock ticks) Increase the size of the arrays if this shows that you are not getting at least 20 clock ticks per test. ------------------------------------------------------------- WARNING -- The above is only a rough guideline. For best results, please be sure you know the precision of your system timer. ------------------------------------------------------------- Function Rate (MB/s) Avg time Min time Max time Copy: 679.4184 0.0472 0.0471 0.0473 Scale: 681.2716 0.0471 0.0470 0.0471 Add: 814.0414 0.0591 0.0590 0.0592 Triad: 814.4149 0.0592 0.0589 0.0593 ------------------------------------------------------------- Solution Validates -------------------------------------------------------------
性能測定結果一覧
実環境での測定結果を一覧にまとめました。測定条件等は以下の通りです。測定値の妥当性を確認する際、参考にして頂ければと思います。
- 他処理が実行されないサーバ環境構築後の無風時に測定
- 測定結果は5回実行した結果の中から「Copy」で中央値を出した結果を「MB/sec」値で記載
- 小数点第2位以下は切り捨て
- [ nCPU ] : CPU n個 を搭載した状態で測定
- [ HT ] : ハイパースレッド(Hyper-Threading) ONの状態で測定
- [ OpenMP ] : マルチスレッド(OpenMP)で測定
H/W <SDRAM> | CPU | OS kernel | Compiler Option | COPY | SCALE | ADD | TRIAD |
OptiPlex GX115 <PC133> | Pentium III 800MHz | RedHat 8.0 2.4.18-14 | gcc 3.2 -O | 311.3 | 311.6 | 370.3 | 351.2 |
CentOS 3.6 2.4.21-37.EL | gcc 3.2.3 -O | 312.8 | 313.3 | 372.4 | 353.2 | ||
Fedora Core 4 2.6.11-1.1369 | gcc 4.0.0 -O | 275.6 | 311.6 | 371.0 | 346.8 | ||
OptiPlex GX240 <PC133> | Pentium 4 1.7GHz | RedHat 8.0 2.4.18-14 | gcc 3.2 -O | 564.5 | 559.9 | 654.7 | 658.9 |
CentOS 3.6 2.4.21-37.EL | gcc 3.2.3 -O | 567.8 | 562.6 | 657.5 | 662.7 | ||
Fedora Core 4 2.6.11-1.1369 | gcc 4.0.0 -O | 560.5 | 555.0 | 650.6 | 654.7 | ||
ML350 G3 <PC2100> | Xeon 2.2GHz 512KB L2 400MHz FSB | CentOS 3.6 2.4.21-37.ELsmp | gcc 3.2.3 -O | 679.4 | 681.2 | 814.0 | 814.4 |
[ HT ] | 683.0 | 682.8 | 818.3 | 818.4 | |||
Xeon 2.2GHz 512KB L2 400MHz FSB | CentOS 4.4 2.6.9-42.ELsmp | gcc 3.4.6 -O | 796.5 | 798.3 | 919.7 | 917.4 | |
[ HT ] | 756.8 | 756.6 | 870.5 | 868.7 | |||
xSeries 335 <PC2100> | Xeon 3.06GHz 512KB L2 533MHz FSB | Fedora Core 3 2.6.9-1.667smp | gcc 3.4.2 -O | 1403.5 | 1401.9 | 1441.7 | 1432.8 |
[ HT ] | 1417.2 | 1417.4 | 1455.9 | 1448.4 | |||
DL360 G4 <PC2700> | Xeon 3.0GHz 1MB L2 800MHz FSB | RedHat AS 3 2.4.21-37.ELsmp | gcc 3.2.3 -O | 1364.1 | 1362.2 | 1571.4 | 1581.6 |
[ HT ] | 1363.1 | 1361.1 | 1570.6 | 1580.1 | |||
xSeries 336 <PC2-3200> | Xeon 3.0GHz 2MB L2 800MHz FSB | RedHat AS 3 2.4.21-37.ELsmp | gcc 3.2.3 -O | 2507.6 | 2460.0 | 2940.1 | 2979.7 |
[ 2CPU ] | 2308.1 | 2288.6 | 2698.9 | 2760.0 | |||
OptiPlex 740 <PC2-5300> | Athlon 64 X2 3800+ 2GHz 512KB L2 * 2 | CentOS 4.5 2.6.9-55.ELsmp | gcc 3.4.6 -O | 2658.0 | 2657.7 | 2889.8 | 2533.1 |
ML110 G4 <PC2-5300> | Pentium D 925 3.0GHz 2MB L2 * 2 800MHz FSB | CentOS 3.6 2.4.21-37.ELsmp | gcc 3.2.3 -O | 3193.2 | 3228.7 | 3089.3 | 3088.9 |
ProLiant MicroServer <PC3-10600> | Turion II NEO N40L 1.50GHz 1MB L2 * 2 200MHz FSB | CentOS 6.0 2.6.32-71.el6.x86_64 | gcc 4.4.4 -O | 3278.6 | 3176.4 | 3558.7 | 3453.2 |
ML110 G6 <PC3-10600> | Core i3-530 2.93GHz 4MB L3 DMI 2.5GT/s | CentOS 6.0 2.6.32-71.el6.x86_64 | gcc 4.4.4 -O | 5716.2 | 5688.8 | 6437.7 | 6501.5 |
[ HT ] | 5710.1 | 5696.1 | 6414.5 | 6479.5 | |||
ML110 G7 <PC3-10600> <Dual> | Celeron G530 2.40GHz 2MB L3 | CentOS 6.2 2.6.32-220.el6.x86_64 | gcc 4.4.6 -O | 9714.1 | 9546.5 | 10760.9 | 10758.1 |
[ OpenMP ] | 10232.7 | 10235.5 | 11441.6 | 11482.7 | |||
ML310e Gen8 v2 <PC3-10600> <Dual> | Xeon E3-1220 v3 3.10GHz 8MB L3 DMI 5GT/s | CentOS 6.4 2.6.32-358.el6.x86_64 | gcc 4.4.7 -O | [ Minimum Power Usage ] | |||
5343.9 | 5317.4 | 5818.8 | 5779.5 | ||||
[ Balanced Power and Performance ] | |||||||
11940.2 | 12061.0 | 12988.3 | 13054.2 | ||||
[ Maximum Performance ] | |||||||
11726.8 | 11880.2 | 12843.8 | 12920.0 | ||||
[ OpenMP ] | [ Minimum Power Usage ] | ||||||
10221.8 | 10172.9 | 11358.9 | 11346.9 | ||||
[ Balanced Power and Performance ] | |||||||
12436.1 | 12374.2 | 13869.7 | 13900.1 | ||||
[ Maximum Performance ] | |||||||
12381.0 | 12370.5 | 13825.7 | 13885.6 |
関連記事
RAMディスク(/dev/shm)のIO性能をチューニングに活用する方法
姫野ベンチの使用方法・測定結果一覧 (Linux編)
STREAMの使用方法 (Linuxメモリ帯域幅の計測方法)
HDDベンチマーク手順+性能測定結果一覧 (hdparm,dd,bonnie++)
Iperfの使用方法 (Linuxネットワーク帯域確認方法)
「Linux」カテゴリーの記事一覧
参考になるサイト
MEMORY BANDWIDTH STREAM BENCHMARK PERFORMANCE RESULTS
STREAMの情報、ソース、測定結果情報を提供する公式ホームページ。
IBM – Tuning stream with libhugetlbfs
STREAMの限界性能を引き出す方法を解説したIBM developerWorksの記事。(Internet Archive)
HPCテクノロジーズ – STREAMベンチマークテストによるXeon(Nehalem)の基本性能調査
STREAMとnumactlコマンドを用いて、Nehalem XeonとShanghai Opteronのローカルメモリ性能/QPI経由のリモートメモリ性能を比較している。
@IT – PCのメモリテストを行うには
メモリ診断ツール「Memtest86」の使用方法を解説した記事。
同ツールでは、L1キャッシュ、L2キャッシュ、メインメモリの別でバンド幅を測定・表示してくれる。
@IT – Linux Square – 減り続けるメモリ残量! 果たしてその原因は!?
障害解析事例の紹介記事の中で、メモリ使用状況の確認に使える各種コマンドを説明している。
freeコマンドの「-/+ buffers/cache」の値をどのように解釈するべきかの情報も参考になる。