< Orange Pi > Sysbench เครื่องมือ benchmark ของ Embedded Linux
ในระบบ Linux Embedded นั้นมี Single Board Computer ให้เลือกใช้อย่างหลากหลายมากๆ แบบที่ทางฝั่ง PC ไม่สามารถเทียบเคียงได้เลย ถึงแม้ว่า CPU นั้นจะยังคงอยู่บนสถาปัตยกรรม ARM RISC เช่นกัน
แต่ด้วยความที่มีผู้ผลิตหลายเจ้า ซึ่งแต่ละเจ้านั้น ก็มีเทคโนโลยีบางอย่างของตนเอง ที่พร้อมจะใส่เข้ามาใน CPU ของตนเองเพื่อทำให้ CPU ของตนเองนั้นมีความพิเศษมากกว่าคู่แข่ง และ CPU แบบ ARM นี้ไม่ได้ใช้ BIOS เป็นส่วนในการติดต่อกับฮาร์ดแวร์ต่างๆ เหมือนกับ PC นั่นยิ่งทำให้ แต่ละเจ้ายิ่งมีความแตกต่างกันมากขึ้นไปอีก เพราะนอกจากฟังค์ชั่นพิเศษที่ทางผู้ผลิตจะเพิ่มเข้ามาเองแล้ว ยังมีระบบที่ใช้ในการติดต่อกับระบบอื่นๆ ตามมาตรฐานของตนเองอีกด้วย
ดังนั้นแล้วแม้ว่า Image ของ OS จะเป็น Kernel เดียวกัน OS ตระกูลเดียวกันแต่ก็ต้องมีการเปลี่ยนแปลง ปรับแต่งให้เหมาะกับ CPU ของแต่ละค่ายเอง ซึ่งการปรับแต่งนี้ก็มีผลต่อความเร็วในการทำงานของบอร์ดเช่นกัน
เพื่อให้เราสามารถเปรียบเทียบความแตกต่างนี้ จำเป็นที่จะต้องใช้เครื่องมือในการทดสอบการทำงานของบอร์ด หรือที่เราเรียกว่า Benchmark tool ซึ่งในตอนนี้เราจะแนะนำ sysbench ซึ่งเป็นเครื่องมือทดสอบ ที่สามารถรันได้บน Linux หลายๆตัวทำให้เราประเมินศักยภาพของบอร์ดเทียบกับบอร์ดได้อีกหลายรุ่น โดยในวันนี้บอร์ดที่จะเอามาเทียบคือ Raspberry Pi 2
ติดตั้ง Sysbench
ก่อนอื่นเราต้องติดตั้ง sysbench ลงบน Orange Pi ของเราก่อนด้วยคำสั่ง
1 | sudo apt-get install sysbench |
หากบางเครื่องที่ sysbench ถูกติดตั้งไว้แล้ว จะแสดงข้อความดังภาพ
แต่หากยังไม่ได้รับการติดตั้ง ระบบจะให้ยืนยันการติดตั้งดังภาพ
และเมื่อเรายืนยันด้วยการตอบ y ระบบก็จะเริ่มติดตั้งดังภาพ
เมื่อทำการติดตั้งเรียบร้อยแล้ว ก็จะมาถึงการใช้งานโปรแกรมนี้กัน
สำหรับ sysbench นั้นมีการทดสอบที่น่าใช้งานอยู่หลายฟังค์ชั่นทีเดียวไม่ว่าจะเป็นการทดสอบความเร็ว CPU RAM และ Flash Memory
นอกจากนั้นยังมีฟังค์ชั่นที่ทดสอบตัวระบบอีกด้วย ไม่ว่าจะเป็นทดสอบความเร็วของ Databased หรือการจัดการไฟล์ต่างๆของระบบ เช่น Mutex ซึ่งทั้งหมดค่อนข้างยาว แต่จะพยายามทยอยเอาลงนะครับ
คำสั่งทดสอบ CPU, Threads และ RAM
การทดสอบ CPU (ที่เรากำลังจะทำเป็นตัวอย่าง) ใช้คำสั่ง
1 | sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run |
คำสั่งนี้บอกว่า เราจะทดสอบ CPU ด้วยวิธีการหาจำนวนเฉพาะที่อยู่ระหว่าง 2 ถึง 20000 โดยใช้ 2 เธรดส์ในการทำงานเมื่อการทดสอบเสร็จสิ้น ระบบจะบอกเราว่าใช้เวลาในการทดสอบไปนานแค่ไหน เวลาในการทำงานแต่ละรอบนั้นน้อยที่สุดเท่าไหร่ มากที่สุดเท่าไหร่ และมีค่าเฉลี่ยเท่าไหร่ นี่คือข้อมูลที่จะเอาไปเปรียบเทียบ
การทดสอบ เธรดส์ ใช้คำสั่ง
1 | sysbench --test=threads --thread-locks=1 --max-time=20s run |
คำสั่งนี้บอกว่าเราจะทดสอบการจัดการเธรดส์ โดยมีการล็อก และปลดล็อกทีละ 1 เธรดส์ ในเวลา 20 วินาที เมื่อทำการทดสอบเสร็จสิ้น ระบบจะบอกเราว่า ในเวลา 20 วินาที ที่เรากำหนดให้ ระบบสามารถทำงานได้กี่ครั้ง และค่าเวลาที่น้อยที่สุด มากที่สุด และค่าเฉลี่ย ในการทำงาน 1000 เธรดส์ นั้นใช้เวลามากแค่ไหน ดังนั้นในส่วนนี้ จำเป็นจะต้องเอาเวลามาหารด้วย 1000 เพื่อหาเวลาต่อเธรดส์เอง
การทดสอบ RAM ใช้คำสั่ง
1 | sysbench --test=memory --num-threads=4 run |
Sysbench จะทำการจองหน่วยความจำ และอ่าน – เขียน หน่วยความจำส่วนนั้นทีละ Pointer โดยขนาดจะขึ้นอยู่กับชนิดของโปรเซสเซอร์ว่าเป็น 32บิท หรือ 64บิท ไปจนกว่าจะครบตามจำนวนหน่วยความจำที่จองไว้ เพื่อวัดความเร็วในการงานของระบบหน่วยความจำหลักของระบบ
การทดสอบสถานะ Orange Pi One กับ Raspberry Pi 2
เรามาเริ่มกันที่ตัวอย่างที่จะทดสอบกันในตอนนี้คือการทดสอบประสิทธิภาพของ CPU
โดยการทดสอบนี้เราจะเปรียบเทียบประสิทธิภาพจาก Single Board Computer 2 บอร์ด
คือ Raspberry Pi 2 (ที่มี Heatsink เพราะซื้อมาใส่นานแล้ว) กับ Orange Pi One ในกล่อง
แต่ไหนๆก็จะทดสอบแล้ว เราคงอยากเห็นว่าในขณะที่แต่ละบอร์ดนั้นวิ่งเต็มความเร็วนั้น อุณหภูมิเป็นอย่างไรบ้าง เราจึงติดตั้ง Monitoring (โปรแกรมที่เคยติดตั้งไปก่อนหน้านี้ ในหัวข้อ Armbian Monitor ครับ) ไว้บนทั้งสองบอร์ดด้วย โดยสามารถติดตามได้ผ่าน Web Browser ไปด้วยได้
เรามาเริ่มกันเลย
โดยก่อนอื่นเราต้องเริ่มวางแผนว่าเราจะดูอะไรบ้าง และจะให้ทั้งสองบอร์ดทำอะไรบ้าง
อันดับแรกเราจะวัดความเร็วในการประมวลผลหาเลขจำนวนเฉพาะที่น้อยกว่า 100,000 ใช้เธรดส์จำนวน 4 เธรดส์ ในการทำงานเท่าๆกัน โดยใช้คำสั่ง
1 | sysbench --test=cpu --cpu-max-prime=100000 --num-threads=4 run |
และดูอุณหภูมิของ CPU เป็นรอบๆ รอบละ 5 นาที จนบอร์ดทำงานเสร็จ เพื่อดูอุณหภูมิเป็นระยะ
เริ่มที่เปิดหน้าเว็บ เข้าไปดูอุณหภูมิ และการทำงานของ Orange Pi One ก่อนเลย
จะเห็นชื่อของบอร์ด Orange Pi One อยู่ และชื่อโปรแกรมจะเป็น OPI-Monitor
นี่คือสถานะระดับการใช้งานหน่วยความจำต่างๆ และอุณหภูมิ
และนี่คืออุณหภูมิ และการทำงานของ Raspberry Pi 2
จะสังเกตว่าทั้งสองบอร์ดนั้น เบื้องต้นมีความแตกต่างกันอยู่ไม่น้อยเลย
แม้ว่า CPU จะมี 4 แกนทั้งคู่ สำหรับ RAM นั้น Raspberry Pi 2 มีมากกว่าที่เกือบ 1 GB แต่ Orange Pi One นั้นมีเพียง 512 MB เท่านั้น นอกจากนั้นแล้ว แม้ว่า Raspberry Pi 2 จะถูกลงโปรแกรมไว้เหมือนๆกับ Orange Pi One นั้น แต่ ระบบปฏิบัติการ Raspbian นั้นกลับใช้ RAM ในการทำงานน้อยกว่า Armbian ของ Orange Pi One อยู่พอสมควร
ในขณะที่ การใช้พื้นที่บน ROM บน SD Card ที่มีขนาดเท่ากัน และรุ่นเดียวกันนั้น Orange Pi One กลับใช้น้อยกว่าค่อนข้างมากทีเดียว
ส่วนเรื่องของอุณหภูมินั้น ก็ดูจะไม่ค่อยยุติธรรมเท่าไหร่นัก เนื่องจาก Raspberry Pi 2 นั้น มีการติดตั้ง Heatsink สำหรับระบายความร้อนลงไปด้วย แต่ Orange Pi One นั้น ไม่มี Heatsink (เพราะเพิ่งซื้อมาใหม่เลยยังไม่ได้ติด) อาจจะทำให้อุณหภูมินั้นค่อนข้างแตกต่างกันอย่างมาก แต่ก็จะได้รู้ด้วยว่า ตลอดการทดสอบโดยไม่มีส่วนระบายความร้อนนั้น มันจะผ่านไปได้ไหม และผลที่ได้จะเป็นเช่นไร
สุดท้าย ถ้าสังเกตจะพบว่า ระบบปฏิบัติการของทั้งสองบอร์ดนั้น ใช้ Linux Kernel คนละรุ่นกัน แต่เป็น Long-term ทั้งคู่ โดย Armbian ของ Orange Pi One นั้นใช้ Kernel รุ่น 3.4.11 ในขณะที่ Raspbian ของ Raspberry Pi 2 นั้นใช้ Kernel รุ่น 4.4.13
แต่ทั้งหมดนี้ คงไม่สามารถใช้เป็นข้อแก้ตัวใดๆต่อผลที่จะออกมาหลังการทดสอบ
ดังนั้นเรามาเริ่มการทดสอบตามเงื่อนไขกันเลยดีกว่า โดยใช้คำสั่ง
1 | sysbench --test=cpu --cpu-max-prime=100000 --num-threads=4 run |
กับทั้งสองบอร์ด แม้เวลาจะเหลื่อมกันก็ไม่เป็นไรครับ เพราะว่าระบบจะเป็นตัวจับเวลาการทำงานให้เราเอง
สำหรับ Raspberry Pi 2
สำหรับ Orange Pi One
อุณหภูมิเมื่อผ่านไป 5 นาที
อุณหภูมิของ Raspberry Pi 2
อุณหภูมิของ Orange Pi One
5 นาทีผ่านไป จะเห็นว่า CPU Load นั้นแม้จะคนละสี แต่ตัวเลขนั้นใกล้เคียงกัน
ที่ต่างกันอย่างชัดเจน เห็นจะเป็นอุณหภูมิ ที่ Raspberry Pi 2 นั้น มีอุณหภูมิอยู่ที่ 45 องศา ในขณะที่ Orange Pi One สูงถึง 77 องศา ซึ่งต่างกันอย่างชัดเจน และในขณะเดียวกันนั้น ความเร็ว CPU ก็มีความแตกต่างกันด้วย แม้จะใช้แรงดันไฟเท่ากันก็ตาม โดย Raspberry Pi 2 นั้น วิ่งเต็มความเร็วที่ 900 MHz ในขณะที่ Orange Pi One วิ่งที่ 1.2GHz ที่แรงดันประมาณ 1.3V เท่าๆกัน Orange Pi One จะทำงานจนเสร็จไหมนะ??
และอีก 5 นาทีผ่านไป การทำงานยังไม่เสร็จสิ้น
Raspberry Pi 2
Orange Pi One
ตอนนี้ Load ของ CPU เริ่มจะเห็นความแตกต่างกันมากขึ้น ความร้อนของ Orange Pi One เริ่มแตะระดับที่ต้องลดการทำงานของ CPU ลงมา 1 ระดับ (มันคือสถานะ Cooling State มีใช้ในไฟล์ที่ควบคุมการทำงานของระบบ ใน Armbian) เพื่อให้สามารถลดแรงดันไฟฟ้าที่ใช้กับ CPU จาก 1.2GHz ลดลงมาต่ำกว่า 900MHz และลดแรงดันไฟสำหรับ CPU จาก 1.3V ไปที่ 1.1V ได้ และยังทำงานอย่างมีเสถียรภาพอยู่
ในขณะที่ Raspberry Pi 2 นั้นอุณหภูมิสูงขึ้นเพียง 3 องศาเท่านั้น และไม่มีปัญหาอะไรเลย
อีก 10 นาทีถัดมา
Raspberry Pi 2
Orange Pi One
ในตอนนี้ Load ของ CPU ยังคงเต็มที่ ทำงานเต็มกำลังมาตอลด 10 นาทีที่ผ่านมา
ส่วนอุณหภูมิของ Orange Pi One นั้น ยังคงสูงมากเช่นเดิม ในขณะที่อุณหภูมิของ Raspberry Pi 2 นั้น ใกล้จะแตะ 50 องศาแล้ว
อีก 10 นาทีถัดมา
Raspberry Pi 2
Orange Pi One
25 นาทีกับการทำงานเต็มที่ของ CPU อุณหภูมิของ Raspberry Pi 2 นั้น แค่ใกล้เคียงกับ 50 องศาเท่านั้นในขณะที่ Orange Pi One ก็ทำงานอยู่ระหว่าง 75 – 80 องศาแล้ว โดยสลับไปมาระหว่าง Cooling State 0(ปกติ) และ 1(ลดลง 1 ระดับ) อยู่ตลอดเวลา
ประมาณ อีก 5 นาทีถัดมา Raspberry Pi 2 จึงทำงานเสร็จสิ้น
ที่อุณหภูมิ
ตามมาด้วย Orange Pi One
ที่อุณหภูมิ
ทั้งสองบอร์ดใช้เวลาทำงานนานประมาณ 30 นาที โดย Raspberry Pi 2 ใช้เวลาไปทั้งหมด 1841.6030 วินาที หรือประมาณ 30 นาที กับ 42 วินาที ส่วน Orange Pi One ใช้เวลาทั้งหมด 1951.7942 วินาที หรือประมาณ 32 นาที 30 วินาที
ห่างกันประมาณ 110 วินาที แต่หากดูข้อมูลอื่นร่วมด้วย จะเห็นความแตกต่างที่มากกว่า 110 วินาทีนี้ เช่น
ความแตกต่างของเวลาในการทำงานในแต่ละรอบของการหาเลขจำนวนเฉพาะนี้ ซึ่งสามารถดูได้จากค่าเวลาใน Per-Request Statistics ซึ่งความกว้างของเวลาในการทำงานแต่ละรอบของ Raspberry Pi 2 นั้น อยู่ในระยะประมาณ 80ms (732.38ms – 812.27ms) และมีค่าเวลาเฉลี่ยของเวลาส่วนใหญ่อยู่ที่ 753.82ms (คิดที่ 95%) ซึ่งมีระยะความกว้างน้อยมากหากเทียบกับ Orange Pi One ที่ทำงานทั้งหมดใช้เวลามากกว่า Raspberry Pi 2 เพียง 110 วินาที ต่างกันไม่ถึง 6% แต่เมื่อเราดูเวลาใน Per-Request Statistics แล้ว จะเห็นว่า ความกว้างของค่าเวลาที่น้อยที่สุดและมากที่สุดนั้น ห่างกันถึง 655ms (585.30ms – 1240.42ms) และมีค่าเวลาเฉลี่ยของเวลาส่วนใหญ่อยู่ที่ 876.58ms (คิดที่ 95%) ห่างจากเวลาของ Raspberry Pi 2 อยู่ถึง 120ms ซึ่งมากเอาการเลยทีเดียว เมื่อเทียบกับเวลาเฉลี่ยที่ 876.58ms
ข้อสรุป
แม้ว่าผลจากตัวเลขที่ได้จากการทดสอบนั้น จะบ่งบอกว่า Raspberry Pi 2 นั้นทำงานได้มีเสถียรภาพกว่ามาก แต่ทั้งนี้ทั้งนั้น เงื่อนไขสำคัญน่าจะมาจากอุณหภูมิ ที่ Raspberry Pi 2 นั้น มีความร้อนน้อยกว่ามาก ทำให้สามารถทำงานได้อย่างเต็มที่ ส่วน Orange Pi One นั้น เวลาที่ได้ค่อนข้างจะแกว่ง และเวลาเฉลี่ยก็สูงกว่า Raspberry Pi 2 อย่างมากน่าจะเป็นเพราะว่า Raspberry Pi 2 ทำงานที่ความถี่นาฬิกาค่อนข้างคงที่ตลอดเวลาการทำงาน 30 นาทีนี้ ดังนั้นค่าเวลาทางสถิติจึงค่อนข้างใกล้เคียงกัน ต่างจาก Orange Pi One ที่อุณหภูมิค่อนข้างสูงมากตลอดการทำงาน ระบบมีการ สลับลดระดับการทำงานลงอยู่บ่อยครั้ง ทำให้สัญญาณนาฬิกาเปลี่ยนแปลงอยู่เสมอ ค่าเวลาทางสถิติที่ได้ จึงค่อนข้างห่างกัน
และความร้อนระดับนี้หากต้องเปิดไว้ทำงานตลอดสัปดาห์ 24ชั่วโมงต่อวัน มันจะทำงานได้นานแค่ไหน
และความน่าสนใจอีกอย่าง ก็อยู่ที่ว่า หากใส่ Heatsink ให้กับ Orange Pi One มันจะเร็วขึ้นแค่ไหน และจะสามารถลดความร้อนลงได้มากแค่ไหน รวมถึงค่าเวลาต่างๆ จะลดช่องว่างลงมาได้เท่าไหร่ ในทางกลับกัน เราจะสามารถเร่งสัญญาณนาฬิกาของ Raspberry Pi 2 ให้ทำงานเร็วขึ้น มาที่ 1.0GHz หรือ 1.1GHz ความร้อนจะมากขึ้นแค่ไหน และมันยังจะสามารถทำงานได้อย่างมีเสถียรภาพเช่นเดิมหรือไม่
ถ้าหากได้ลองแล้ว จะเอามาลงให้ได้อ่านกันนะครับ แต่ตอนหน้า คาดว่าราวๆ 2 ตอน เราจะยังอยู่กับการทดสอบ เพราะ sysbench ยังคงมีอะไรที่น่าสนใจ ให้นำมาใช้กันได้อีก ทั้งการทดสอบระบบ Databased หรือไฟล์ต่างๆ และคำสั่งต่างๆที่ใช้ในการทดสอบ
References
https://www.howtoforge.com/how-to-benchmark-your-system-cpu-file-io-mysql-with-sysbench
https://wiki.gentoo.org/wiki/Sysbench
http://imysql.com/wp-content/uploads/2014/10/sysbench-manual.pdf