LMbench 是用來測試系統效能的工具.關於安裝與測試種類請參考 https://benjr.tw/98076
測試環境為 Ubuntu 16.04 x86_64 (VMware 虛擬機) .
安裝完成的 LMbench 程式目錄位於 /usr/lib/lmbench/bin/x86_64-linux-gnu/
root@ubuntu:~# cd /usr/lib/lmbench/bin/x86_64-linux-gnu/
bw_mem
先前測試記憶體有 bw_mem_cp (memory copy) ,bw_mem_rd (memory reading and summing) , bw_mem_wr (memory writing). 現統一使用這一程式.
主要在測試 processor 與 memory 之間的傳輸速度.
Usage: bw_mem [ -P <parallelism> ] [ -W <warmups> ] [ -N <repetitions> ] size rd|wr|rdwr|cp|fwr|frd|bzero|bcopy [align]
參數使用:
- -P
: # (0~#) #+1 個 bw_mem 同時跑,可以透過 # ps -aux | grep -i bw_mem 來觀察. - -W
: 等待時間,單位?? - -N
: 測試重覆 # 次.
可供使用的測試方式.
- rd : measures the time to read data into the processor.
- wr : measures the time to write data to memory.
- rdwr : measures the time to read data into memory and then write data to the same memory location.
- cp : measures the time to copy data from one location to another.
- frd : measures the time to read data into the processor.
- fwr : measures the time to write data to memory.
- fcp : measures the time to copy data from one location to another.
- bzero : measures how fast the system can bzero memory.
- bcopy : measures how fast the system can bcopy data.
透過參數 rdwr (read data write read) 來測試 processor 與 memory 之間的傳輸速度.
root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mem -N 8 -P 4 16384 rdwr 0.016384 40576.03
測試輸出格式為 “%0.2f %.2f\n”, megabytes, megabytes_per_second .
測試結果為:
megabytes = 0.016384 ,每次處理 16384 = 0.016384M 的資料.
megabytes_per_second = 40576.03 MB/s 每秒可以處理 40576.03 MB.
bw_mmap_rd
檔案 (硬碟) 到 memory 之間產生 mapping 並測試其讀取速度.
Usage: ./bw_mmap_rd [-C] [-P <parallelism>] [-W <warmup>] [-N <repetitions>] <size> open2close | mmap_only <filename>
參數使用:
- -P
: # (0~#) #+1 個 bw_mmap_rd 同時跑,可以透過 # ps -aux | grep -i bw_mmap_rd 來觀察. - -W
: 等待時間,單位?? - -N
: 測試重覆 # 次. : 單位可以為 (k)ilobytes (* 1024) 或是 (m)egabytes (* 1024 * 1024). - open2close | mmap_only : 測試方式有兩種 open2close(檔案需要經過 open/close 的過程) 與 mmap_only(直接產生 mapping?) .
在測試之前需要建立一個檔案(需大於測試的 size 參數,大於時會顯示
root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# dd if=/dev/zero of=/root/1M bs=1M count=1
- open2close
檔案需要經過 open/close 的過程,所以指定的 size 大小會影響測試出來的效能.root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mmap_rd 1M open2close /root/1M 1.00 6751.69 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mmap_rd 256k open2close /root/1M 0.262144 5950.31 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mmap_rd 64k open2close /root/1M 0.065536 3843.20
測試輸出格式為 “%0.2f %.2f\n”, megabytes, megabytes_per_second .
結果為:
megabytes = 1.00 ,每次處理 1M 的資料.
megabytes_per_second = 6751.69 MB/s ,每次處理 1M 的資料,每秒可以處理 6751.69 MB. - mmap_only
root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mmap_rd 1M mmap_only /root/1M 1.00 12502.33 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_mmap_rd 64k mmap_only /root/1M 1.00 12521.06
測試輸出格式為 “%0.2f %.2f\n”, megabytes, megabytes_per_second .
結果為:
megabytes = 1.00 ,每次處理 1M 的資料.
megabytes_per_second = 12502.33 MB/s ,每次處理 1M 的資料,每秒可以處理 12502.33 MB.
bw_file_rd
從檔案 (硬碟) 到 memory 測試其讀取速度.
Usage: ./bw_file_rd [ -P <parallelism> ] [ -W <warmups> ] [ -N <repetitions> ] <size> open2close|io_only <filename>
參數使用:
- -P
: # (0~#) #+1 個 bw_mmap_rd 同時跑,可以透過 # ps -aux | grep -i bw_file_rd 來觀察. - -W
: 等待時間,單位?? - -N
: 測試重覆 # 次. : 單位可以為 (k)ilobytes (* 1024) 或是 (m)egabytes (* 1024 * 1024). - open2close | io_only : 測試方式有兩種 open2close(檔案需要經過 open/close 的過程) 與 io_only(直接產生 mapping?) .
在測試之前需要建立一個檔案(需大於測試的 size 參數),可以透過 dd 來建立.
root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# dd if=/dev/zero of=/root/1M bs=1M count=1
- open2close
檔案需要經過 open/close 的過程,所以指定的 size 大小會影響測試出來的效能.root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 1M open2close /root/1M 1.00 4242.76 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 256k open2close /root/1M 0.262144 4154.19 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 64k open2close /root/1M 0.065536 3797.07
測試輸出格式為 “%0.2f %.2f\n”, megabytes, megabytes_per_second .
結果為:
megabytes = 1.00 ,每次處理 1M 的資料.
megabytes_per_second = 4242.76 MB/s ,每次處理 1M 的資料,每秒可以處理 4242.76 MB. - io_only
root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 1M io_only /root/1M 1.00 4047.87 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 256k io_only /root/1M 0.262144 4284.18 root@ubuntu:/usr/lib/lmbench/bin/x86_64-linux-gnu# ./bw_file_rd 64k io_only /root/1M 0.065536 4271.50
測試輸出格式為 “%0.2f %.2f\n”, megabytes, megabytes_per_second .
結果為:
megabytes = 1.00 ,每次處理 1M 的資料.
megabytes_per_second = 4047.87 MB/s ,每次處理 1M 的資料,每秒可以處理 4047.87 MB.
NUMA
如果你的系統架構是 NUMA (Non-uniform memory access),還可以使用 #numacl 來限制要使用哪一顆處理器或是記憶體執行測試程式.關於 NUMA 請參考 https://benjr.tw/96788
進行測試時,限制 MEM (–membind=0), CPU (–cpunodebind=0) ,我的系統是虛擬機,所以看不出差別.
root@ubuntu:~# numactl --membind=0 --cpunodebind=0 ./bw_mem -N 8 -P 4 16384 rdwr 0.016384 40576.03