sysbench วัดความแรงของ CPU

หลังจากที่คอมไพล์และติดตั้งโปรแกรม sysbench (คอมไพล์ sysbench บน Fedora 10) แล้ว ตอนนี้เราจะลองใช้ sysbench เพื่อทดสอบประสิทธิภาพความเร็วของ CPU (CPU Benchmark)

วิธีการใช้คำสั่ง sysbench ต้องระบุออปชั่น test ว่าเราจะทดสอบอะไร อาจระบุออปชั่นต่างๆ เพิ่มเติม เป็นค่าตัวแปรผันแปรที่ใช้ในการทดสอบ ค่าเหล่านี้จะมีค่าดีฟอลต์อยู่แล้ว ดูได้จากการรันคำสั่ง sysbench แบบไม่มีออปชั่น หรือดูจากผลลัพธ์ในการัน

การทดสอบในบทความนี้ เป็นการทดสอบ (test) CPU ให้คำนวณหาค่าจำนวนเฉพาะ (prime number)  ตั้งแต่ 1 ไปจนถึงตัวเลขมากสุดเท่ากับค่าตัวแปร cpu-max-prime ในที่นี้จะระบุ 20000 แล้วตามด้วยออปชั่น run เพื่อสั่งเริ่มการคำนวณ

โดยในแต่การทดสอบจะมีการเปลี่ยนแปลงจำนวน CPU และจำนวน Threads ที่ใช้ (num-threads) ในการคำนวณ เพื่อเปรียบเทียบผลลัพธ์ด้วย

คำเตือน!!! ไม่ควรรันโปรแกรม sysbench บนเครื่องที่ใช้งานจริง (production) เพราะจะมีผลกระทบกับเครื่องมาก และผลลัพธ์ที่ได้ก็ไม่ใช่ผลลัพธ์ที่ถูกต้อง

หมายเหตุ ตัวอย่างในบทความนี้ ทดสอบใน VMware Server ที่รันบน Windows XP เพื่อจะจำลองจำนวน CPU และการระบุจำนวน threads ที่ใช้

1. Benchmark  1 CPU – 1 Thread

การทดสอบ 1, 2 จะคอนฟิกจำนวน CPU ในคอนฟิก VMware Server เท่ากับ 1

VMware Settings 1 CPU

ตรวจสอบสเปคของ CPU ได้จากไฟล์ /proc/cpuinfo

[root@fc10-dev ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Duo CPU     @ 2.53GHz
stepping        : 8
cpu MHz         : 2526.986
cache size      : 6144 KB
...

แนะนำให้เปิดสองหน้าจอ หน้าจอหนึ่งรันคำสั่ง top ทิ้งไว้เพื่อแสดงการใช้ CPU ของเครื่อง ระหว่างการรัน sysbench ในอีกหน้าจอ

หมายเหตุ

  • เมื่อรันคำสั่ง top โดยดีฟอลต์จะแสดงค่าการใช้ CPU โดยสุรปรวมทั้งหมด
  • ถ้าต้องการแสดงค่าการใช้ CPU แยกแต่ละตัว ให้กด 1 ในคำสั่ง top
  • ถ้าต้องการออกจากคำสั่ง top ให้กดปุ่ม q หรือ [Ctrl-C]

รันคำสั่ง sysbench เพื่อเริ่มการทดสอบ 1. Benchmark 1 CPU – 1 Thread

[root@fc10-dev ~]# sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
    total time:                          25.7770s
    total number of events:              10000
    total time taken by event execution: 25.7745
    per-request statistics:
         min:                                  2.39ms
         avg:                                  2.58ms
         max:                                  6.08ms
         approx.  95 percentile:               2.68ms
Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   25.7745/0.00
[root@fc10-dev ~]#

ผลลัพธ์ในการรันทดสอบครั้งที่ 1 เวลาที่ใช้ในการคำนวณค่า “total time”

Test execution summary:
    total time:                          25.7770s

แปลว่าต้องใช้เวลาประมาณ 25 วินาทีกว่าๆ ในการหาจำนวนเฉพาะระหว่าง 1 ถึง 200000

การใช้ CPU จากคำสั่ง top ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 1

[root@fc10-dev ~]# top
top - 18:17:57 up 9 min,  2 users,  load average: 0.18, 0.21, 0.11
Tasks:  80 total,   2 running,  78 sleeping,   0 stopped,   0 zombie
Cpu0  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508292k total,   100896k used,   407396k free,     5180k buffers
Swap:  1068312k total,        0k used,  1068312k free,    37588k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2053 root      20   0 46936 2080 1532 S 99.9  0.4   0:05.65 sysbench
    1 root      20   0  4080  892  636 S  0.0  0.2   0:02.08 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

การใช้ CPU จาก Windows Task Manager รันบน Windows XP (Host OS) ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 1

Windows Task Manager - 1 CPU - 1 Thread

 

2. Benchmark  1 CPU – 2 Threads

การทดสอบครั้งที่สองยังคงใช้แค่ 1 CPU แต่จะเปลี่ยนค่าตัวแปรของคำสั่ง sysbench ให้สร้าง 2 threads เพื่อใช้ในการคำนวณ โดยต้องระบุออปชั่น –num-threads=2

รันคำสั่ง sysbench เพื่อเริ่มการทดสอบ 2. Benchmark 1 CPU – 2 Thread

[root@fc10-dev ~]# sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 2
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
    total time:                          25.8331s
    total number of events:              10000
    total time taken by event execution: 51.6430
    per-request statistics:
         min:                                  2.39ms
         avg:                                  5.16ms
         max:                                 33.79ms
         approx.  95 percentile:              13.36ms
Threads fairness:
    events (avg/stddev):           5000.0000/2.00
    execution time (avg/stddev):   25.8215/0.00
[root@fc10-dev ~]#

เวลาที่ใช้ในการคำนวน (total time) ครั้งที่ 2 ใกล้เคียงกับการทดสอบครั้งที่ 1

การใช้ CPU จากคำสั่ง top ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 2

[root@fc10-dev ~]# top
top - 18:20:16 up 11 min,  2 users,  load average: 0.36, 0.23, 0.13
Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
Cpu0  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508292k total,   101028k used,   407264k free,     5340k buffers
Swap:  1068312k total,        0k used,  1068312k free,    37588k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2055 root      20   0 46968 2116 1532 S 99.9  0.4   0:06.34 sysbench
    1 root      20   0  4080  892  636 S  0.0  0.2   0:02.08 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

การใช้ CPU จาก Windows Task Manager รันบน Windows XP (Host OS) ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 2

Windows Task Manager - 1 CPU - 2 Threads

3. Benchmark  2 CPU – 1 Thread

การทดสอบครั้งที่ 3, 4 จะเปลี่ยนจำนวน CPU ในคอนฟิก VMware Server เป็น 2 CPU

VMware Settings 2 CPU

ตรวจสอบสเปคของ CPU ได้จากไฟล์ /proc/cpuinfo

[root@fc10-dev ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Duo CPU     @ 2.53GHz
stepping        : 8
cpu MHz         : 2526.985
cache size      : 6144 KB
...
processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Duo CPU     @ 2.53GHz
stepping        : 8
cpu MHz         : 2526.985
cache size      : 6144 KB
...

การทดสอบครั้งที่ 3 มี 2 CPU แล้ว แต่จะรันทดสอบโดยใช้แค่ 1 thread ก่อน

รันคำสั่ง sysbench เพื่อเริ่มการทดสอบ 3. Benchmark 2 CPU – 1 Thread

[root@fc10-dev ~]# sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
    total time:                          26.2995s
    total number of events:              10000
    total time taken by event execution: 26.2713
    per-request statistics:
         min:                                  2.40ms
         avg:                                  2.63ms
         max:                                 14.51ms
         approx.  95 percentile:               2.96ms
Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   26.2713/0.00
[root@fc10-dev ~]#

ผลลัพธ์ที่ได้จากรันทดสอบครั้งที่ 3 เวลาที่ใช้ในการคำนวณค่า “total time” ก็ยังคงใกล้เคียงกับครั้งที่ 1, 2

การใช้ CPU จากคำสั่ง top ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 3 จะเห็นว่ามีการใช้แค่ CPU เดียวเท่านั้น  CPU อีกตัว 100.0%id คือไม่ได้ถูกใช้เลย

[root@fc10-dev ~]# top
top - 18:31:55 up 3 min,  2 users,  load average: 0.18, 0.13, 0.05
Tasks:  93 total,   2 running,  91 sleeping,   0 stopped,   0 zombie
Cpu0  : 79.0%us, 21.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508196k total,   114384k used,   393812k free,     5008k buffers
Swap:  1068312k total,        0k used,  1068312k free,    39524k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2163 root      20   0 47828 2076 1528 S 99.9  0.4   0:08.95 sysbench
    1 root      20   0  4080  896  636 S  0.0  0.2   0:01.44 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

การใช้ CPU จาก Windows Task Manager รันบน Windows XP (Host OS) ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 3 กราฟที่แสดง มีการใช้ CPU เพียงแค่ตัวเดียวเท่านั้น ซึ่งตรงกับผลัพธ์จากคำสั่ง top

Windows Task Manager - 2 CPU - 1 Thread

 

4. Benchmark 2 CPU – 2 Threads

การทดสอบครั้งที่ 4 เครื่องมี 2 CPU แต่จะเปลี่ยนค่าตัวแปรของคำสั่ง sysbench ให้สร้าง 2 threads เพื่อใช้ในการคำนวณ –num-threads=2

รันคำสั่ง sysbench เพื่อเริ่มการทดสอบ 4. Benchmark 2 CPU – 2 Threads

[root@fc10-dev ~]# sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 2
Doing CPU performance benchmark
Threads started!
Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
    total time:                          13.4928s
    total number of events:              10000
    total time taken by event execution: 26.9476
    per-request statistics:
         min:                                  2.52ms
         avg:                                  2.69ms
         max:                                 17.48ms
         approx.  95 percentile:               2.93ms
Threads fairness:
    events (avg/stddev):           5000.0000/16.00
    execution time (avg/stddev):   13.4738/0.00
[root@fc10-dev ~]#

ผลลัพธ์ในการรันทดสอบครั้งที่ 4 เวลาที่ใช้ในการคำนวณค่า “total time” มีค่าน้อยกว่าค่าที่ได้จากครั้งที่ 1,2 และ 3 เกือบครึ่ง หมายความว่าการใช้คอนฟิกแบบนี้ 2 CPU และใช้ 2 threads สามารถคำนวณค่าจำนวนเฉพาะได้เร็วกว่านั่นเอง

การใช้ CPU จากคำสั่ง top ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 4 แสดงให้เห็นว่ามีการใช้ CPU ทั้ง 2 ตัว พร้อมกัน (0.0%id)

[root@fc10-dev ~]# top
top - 18:33:44 up 5 min,  2 users,  load average: 0.53, 0.23, 0.10
Tasks:  93 total,   2 running,  91 sleeping,   0 stopped,   0 zombie
Cpu0  : 80.1%us, 19.9%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 93.6%us,  6.4%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508196k total,   114640k used,   393556k free,     5152k buffers
Swap:  1068312k total,        0k used,  1068312k free,    39524k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2165 root      20   0 46968 2096 1532 S 199.4  0.4   0:23.56 sysbench
    1 root      20   0  4080  896  636 S  0.0  0.2   0:01.44 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

การใช้ CPU จาก Windows Task Manager รันบน Windows XP (Host OS) ระหว่างการรันคำสั่ง sysbench ในทดสอบครั้งที่ 4 กราฟแสดงให้เห็นว่ามีการใช้ CPU ทั้ง 2 ตัว

Windows Task Manager - 2 CPU - 2 Thread

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.