1. 程式人生 > >GraphicsMagick效能測試(二)

GraphicsMagick效能測試(二)

測試目的:

---------------------------------------------------------
瞭解GraphicsMagick啟用與禁用多執行緒(openmp),對GraphicsMagick效能的影響

編譯引數使用  --disable-openmp表示禁用,未使用表示開啟。

GM版本:

---------------------------------------------------------
GraphicsMagick-1.3.17

測試環境硬體配置:

---------------------------------------------------------
OS:Red Hat Enterprise Linux Server release 5.6 (Tikanga)
CPU: Intel(R) Xeon(TM) CPU 2.80GHz  4核心 (很一般的CPU,都不如筆記本的I5CPU 2410 雙核4執行緒)
記憶體:8G

測試邏輯:

---------------------------------------------------------
一張1024*768畫素的JPG圖片,大小140KB,使用GM生成一個100x100的縮圖
一張3264x2448畫素的JPG圖片,大小2.6M,使用GM生成一個100x100的縮圖

測試命令:

---------------------------------------------------------
  使用gm自帶的測試命令:gm benchmark -iterations 100 -stepthreads 1  +原命令語句
  -iterations 100  次數
  -rawcsv  打印出測試結果,是csv格式的文字 ,標題: threads,iterations,user_time秒,elapsed_time秒
  -stepthreads 1 執行緒增長步長,1表示每次加1個執行緒,一直加到OMP_NUM_THREADS環境變數的值 ,必須設定OMP_NUM_THREADS環境變數才可以真正使用起多執行緒(openmp)。本測試只想測試單執行緒就未設定 OMP_NUM_THREADS。
  -duration 持續時間(秒)

OMP_NUM_THREADS環境變數

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

OMP_NUM_THREADS環境變數,表示GM可使用的執行緒數。必須設定OMP_NUM_THREADS環境變數才可以真正使用起多執行緒(openmp)。


臨時設定環境變數: (我是4核心的CPU)
export OMP_NUM_THREADS=4

永久設定環境變數:
編輯檔案 vi /etc/profile
1、最後面加入:export OMP_NUM_THREADS=4
2、執行命令使其馬上生效: # source /etc/profile

測試1: 1-4併發,每併發執行100次(小圖片)一張1024*768畫素的JPG圖片,大小140KB

---------------------------------------------------------
啟用多執行緒
編譯引數:./configure --enable-shared --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font

gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/1024x768.jpg /tmp/100x100.jpg

測試結果:
Results: 1 threads 100 iter 18.46s user 18.47s total 5.414 iter/s 5.417 iter/cpu 1.00 speedup 1.000 karp-flatt    (處理一張圖片耗時184ms
Results: 2 threads 100 iter 22.25s user 11.13s total 8.985 iter/s 4.494 iter/cpu 1.66 speedup 0.205 karp-flatt    (處理一張圖片耗時111ms
Results: 3 threads 100 iter 36.84s user 12.29s total 8.137 iter/s 2.714 iter/cpu 1.50 speedup 0.498 karp-flatt   (處理一張圖片耗時122ms
Results: 4 threads 100 iter 47.31s user 11.87s total 8.425 iter/s 2.114 iter/cpu 1.56 speedup 0.524 karp-flatt   (處理一張圖片耗時118ms
結果解讀:
        4 threads:4個執行緒
        100 iter:每執行緒執行100次
        47.31s user:不知道
        11.87s total:本次耗時    (同使用-rawcsv引數輸出的總時間)
        8.425 iter/s:處理8.425次/s
        2.114 iter/cpu:處理2.114次/cpu
        1.56 speedup:加快了1.56
        0.524 karp-flatt:不知道

系統負載:
 (1執行緒)20:51:11 up 6 days, 14:04,  5 users,  load average: 0.28, 0.36, 0.34
 (2執行緒)20:51:26 up 6 days, 14:04,  5 users,  load average: 0.74, 0.46, 0.37
 (3執行緒)20:51:36 up 6 days, 14:04,  5 users,  load average: 1.25, 0.57, 0.41
 (4執行緒)20:51:47 up 6 days, 14:05,  5 users,  load average: 1.67, 0.69, 0.45
 
CPU使用率(4核):
 (1執行緒)25%
 (2執行緒)50%
 (3執行緒)75%
 (4執行緒)99%

測試2: 1-4併發,每併發執行100次(大圖片)一張3264x2448畫素的JPG圖片,大小2.6M

---------------------------------------------------------
啟用多執行緒
編譯引數:./configure --enable-shared --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/3264x2448.jpg /tmp/100x100.jpg
測試結果:
Results: 1 threads 100 iter 205.42s user 205.45s total 0.487 iter/s 0.487 iter/cpu 1.00 speedup 1.000 karp-flatt   (處理一張圖片耗時2054ms
Results: 2 threads 100 iter 247.33s user 124.87s total 0.801 iter/s 0.404 iter/cpu 1.65 speedup 0.216 karp-flatt   (處理一張圖片耗時1248ms
Results: 3 threads 100 iter 371.59s user 125.78s total 0.795 iter/s 0.269 iter/cpu 1.63 speedup 0.418 karp-flatt  (處理一張圖片耗時1257ms
Results: 4 threads 100 iter 470.94s user 125.02s total 0.800 iter/s 0.212 iter/cpu 1.64 speedup 0.478 karp-flatt  (處理一張圖片耗時1250ms

系統負載:
 (1執行緒)21:31:00 up 6 days, 14:44,  5 users,  load average: 0.99, 0.84, 0.64
 (2執行緒)21:37:10 up 6 days, 14:50,  5 users,  load average: 1.87, 1.24, 0.84
 (3執行緒)21:38:36 up 6 days, 14:51,  5 users,  load average: 2.67, 1.65, 1.02
 (4執行緒)21:41:35 up 6 days, 14:54,  5 users,  load average: 3.85, 2.58, 1.48
 
CPU使用率(4核):
 (1執行緒)25%
 (2執行緒)49.5%
 (3執行緒)74.5%
 (4執行緒)99%


測試3: 1併發,每併發執行100次(小圖片)一張1024*768畫素的JPG圖片,大小140KB
-----------------------------------------------------

禁用多執行緒
編譯引數: ./configure --enable-shared --disable-openmp --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/1024x768.jpg /tmp/100x100.jpg

測試結果:
Results: 1 threads 100 iter 18.65s user 18.65s total 5.362 iter/s 5.362 iter/cpu 1.00 speedup 1.000 karp-flatt   (處理一張圖片耗時186ms)

系統負載:
 (1執行緒) 21:15:52 up 6 days, 14:29,  5 users,  load average: 0.48, 0.53, 0.45

CPU使用率(4核): (1執行緒)
21時15分59秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
21時16分00秒       all     25.00      0.00      0.00      0.50      0.00     74.50
21時16分01秒       all     25.00      0.00      0.25      0.00      0.00     74.75


測試4: 1併發,每併發執行100次(大圖片)一張3264x2448畫素的JPG圖片,大小2.6M
-----------------------------------------------------

禁用多執行緒
編譯引數: ./configure --enable-shared --disable-openmp --with-quantum-depth=8 --with-windows-font-dir=/usr/share/fonts/ms_font


gm benchmark -iterations 100 -stepthreads 1 convert -resize 100x100 -quality 90 +profile "*" /tmp/3264x2448.jpg /tmp/100x100.jpg
測試結果:
Results: 1 threads 100 iter 204.13s user 204.15s total 0.490 iter/s 0.490 iter/cpu 1.00 speedup 1.000 karp-flatt   (處理一張圖片耗時2040ms)

系統負載:
 21:21:00 up 6 days, 14:34,  5 users,  load average: 0.91, 0.57, 0.46
 
CPU使用率(4核): (1執行緒)
 21時20分54秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
 21時20分55秒       all     24.00      0.00      1.00      0.00      0.00     75.00
 21時20分56秒       all     25.00      0.00      0.25      0.00      0.00     74.75

結論:

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

對於核心CPU,建議開啟GM 的多執行緒,效能提升大約40%。

如果你的伺服器共有16核CPU (2路、4核8執行緒),也建議設定OMP_NUM_THREADS=4,執行緒再多後效能也沒有什麼提升了。