2,635 瀏覽數

LMbench – bw_mem & bw_mmap_rd & bw_file_rd

LMbench 是用來測試系統效能的工具.關於安裝與測試種類請參考 http://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 參數,大於時會顯示 out of range!),可以透過 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_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 請參考 http://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

發表迴響