หลังจากที่คอมไพล์และติดตั้งโปรแกรม 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
ตรวจสอบสเปคของ 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
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
3. Benchmark 2 CPU – 1 Thread
การทดสอบครั้งที่ 3, 4 จะเปลี่ยนจำนวน CPU ในคอนฟิก VMware Server เป็น 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
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 ตัว