STREAMの使用方法 (Linuxメモリ帯域幅の計測方法)

Clock

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
    
  • マルチスレッド実行用(OpenMP)
  • $ gcc -O -fopenmp stream.c -o stream_openmp
    

STREAM 実行(メモリ帯域幅の計測)

Linux ClockRight ArrowLinux Memory
STREAMdataMemory
実行
  • シングルスレッドでの実行
  • $ ./stream
    
  • マルチスレッドでの実行(OpenMP)
  • $ ./stream_openmp
    
  • 2スレッド指定での実行(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>
CPUOS
kernel
Compiler
Option
COPYSCALEADDTRIAD
OptiPlex
GX115
<PC133>
Pentium III
800MHz
RedHat 8.0
2.4.18-14
gcc 3.2
-O
311.3311.6370.3351.2
CentOS 3.6
2.4.21-37.EL
gcc 3.2.3
-O
312.8313.3372.4353.2
Fedora Core 4
2.6.11-1.1369
gcc 4.0.0
-O
275.6311.6371.0346.8
OptiPlex
GX240
<PC133>
Pentium 4
1.7GHz
RedHat 8.0
2.4.18-14
gcc 3.2
-O
564.5559.9654.7658.9
CentOS 3.6
2.4.21-37.EL
gcc 3.2.3
-O
567.8562.6657.5662.7
Fedora Core 4
2.6.11-1.1369
gcc 4.0.0
-O
560.5555.0650.6654.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.4681.2814.0814.4
[ HT ]683.0682.8818.3818.4
Xeon 2.2GHz
512KB L2
400MHz FSB
CentOS 4.4
2.6.9-42.ELsmp
gcc 3.4.6
-O
796.5798.3919.7917.4
[ HT ]756.8756.6870.5868.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.51401.91441.71432.8
[ HT ]1417.21417.41455.91448.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.11362.21571.41581.6
[ HT ]1363.11361.11570.61580.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.62460.02940.12979.7
[ 2CPU ]2308.12288.62698.92760.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.02657.72889.82533.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.23228.73089.33088.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.63176.43558.73453.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.25688.86437.76501.5
[ HT ]5710.15696.16414.56479.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.19546.510760.910758.1
[ OpenMP ]10232.710235.511441.611482.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.95317.45818.85779.5
[ Balanced Power and Performance ]
11940.212061.012988.313054.2
[ Maximum Performance ]
11726.811880.212843.812920.0
[ OpenMP ][ Minimum Power Usage ]
10221.810172.911358.911346.9
[ Balanced Power and Performance ]
12436.112374.213869.713900.1
[ Maximum Performance ]
12381.012370.513825.713885.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」の値をどのように解釈するべきかの情報も参考になる。