< Orange Pi > Sysbench เครื่องมือ benchmark ของ Embedded Linux [2]
ในบทความ “Sysbench เครื่องมือ benchmark ของ Embedded Linux” เราได้แนะนำ และทดลองใช้งาน โปรแกรม Sysbench โดยการวัดประสิทธิภาพของ CPU รวมถึงการแนะนำฟังค์ชั่นอื่นๆของ Sysbench ไปบ้างแล้ว ในคราวนี้ เราจะมาแนะนำฟังค์ชั่นเพิ่มเติมอีก 2 ฟังค์ชั่น นั่นคือการทดสอบประสิทธิภาพการทำงานในระบบฐานข้อมูล และการทำงานในด้านการอ่านเขียนข้อมูลลงบน Flash Memory
ก่อนที่จะสามารถทดสอบระบบฐานข้อมูล ได้นั้น เราต้องติดตั้ง ระบบจัดการฐานข้อมูล เสียก่อน โดยในที่นี้ผมเลือกที่จะติดตั้ง MariaDB แทนที่จะเป็น MySQL ซึ่ง MariaDB สามารถใช้แทน MySQL ได้อย่างไม่มีปัญหาด้านความเข้ากันได้ของระบบ หากยังไม่ได้ติดตั้ง MariaDB ก็สามารถติดตั้งตามบทความในหัวข้อ “< Orange Pi > แมวน้ำก็มา! Armbian ก็รองรับ MariaDB นะ” ก่อนที่จะเริ่มการทดสอบได้ครับ
ก่อนอื่นเลยการทดสอบระบบฐานข้อมูลนั้น เราจำเป็นที่จะต้องสร้างตัวฐานข้อมูลก่อนโดยในตัวอย่างการใช้งานฐานข้อมูล MariaDB ในบทความ “< Orange Pi > แมวน้ำก็มา! Armbian ก็รองรับ MariaDB นะ” ซึ่งในบทความนั้นเราได้สร้างฐานข้อมูลไว้อันหนึ่งชื่อ “dbtest” และเราจะใช้ฐานข้อมูลนั้นแหละครับ ในการทดสอบ
จากนั้นเรายังต้องเตรียมข้อมูลตารางในฐานข้อมูล สำหรับการทดสอบอีกด้วย แต่ Sysbench นั้น มีคำสั่งสำหรับเตรียมข้อมูลชุดนี้อยู่แล้ว
1 | sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=dbtest --mysql-user=root --mysql-password=yourrootsqlpassword --db-driver=mysql prepare |
โดย yourrootsqlpassword ให้แทนด้วยรหัสผ่านของฐานข้อมูล ที่เราได้ตั้งไว้เมื่อตอนติดตั้งฐานข้อมูล
โดยคำสั่งชุดนี้ sysbench จะสร้างตารางที่มีข้อมูลที่ชื่อ sbtest โดยในตารางนั้นมีทั้งหมด 1 ล้านเรกคอร์ด โดยกำหนดจาก –oltp-table-size=1000000 สำหรับใช้ในการทดสอบ
เมื่อสร้างฐานข้อมูลแล้ว สร้างตารางแล้ว และมีชุดข้อมูลแล้ว ก็สามารถเริ่มการทดสอบได้
1 | sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=dbtest --mysql-user=root --mysql-password=yourrootsqlpassword --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run |
โดยการทดสอบนี้จะใช้ขนาดตารางเท่ากับที่เราตั้งไว้ในตอนเตรียมตัวจากคำสั่ง –oltp-table-size=1000000 กำหนดจำนวนการขอแบบไม่จำกัด จำกัดเวลาในการทำงานไว้ที่ 60 วินาที และกำหนดจำนวนเธรดส์ไว้ที่ 8 เธรดส์
รอสักพักใหญ่ๆ จนกว่าการทดสอบจะเสร็จสิ้นลง
จากรายงานผลการทดสอบนั้น จะแสดงจำนวน queries ซึ่งรวมแล้วได้ 183,472 ครั้ง ในเวลา 60.0124 วินาที
มีจำนวน Transactions ทั้งหมด 11,467 ครั้ง เฉลี่ยแล้วประมาณ 191.08 ครั้งต่อวินาที
มีการร้องขอเพื่ออ่าน/เขียนทั้งหมด 160,538 ครั้ง เฉลี่ยประมาณ 2,675.08 ครั้งต่อวินาที
โดยรวมแล้วถือว่าไม่มากเท่าไหร่ หากเทียบกับการเป็น Server ข้อมูล
หลังจากที่ดูข้อมูลทุกอย่างแล้ว เราจำเป็นต้องเก็บกวาดข้อมูลที่ Sysbench สร้างขึ้นด้วย เนื่องจากเราคงไม่สามารถนำมันไปใช้งานอะไรได้อีก
1 | sysbench --test=oltp --mysql-db=dbtest --mysql-user=root --mysql-password=yourrootsqlpassword --db-driver=mysql cleanup |
จากการทดสอบนี้ เราคงจะเห็นว่าเราสร้างจำนวนข้อมูลมาเยอะมาก แต่ถูกใช้จริงเพียงเล็กน้อย เนื่องจากเราตั้งเวลาไว้น้อยเกินกว่าที่มันจะทำงานได้เสร็จ ซึ่งการตั้งค่าตรงนี้ คงต้องขึ้นกับเงื่อนไขว่า เราต้องการดูสิ่งใดจากการทดสอบนี้หรือเรายอมรับการทำงานที่ยาวนานได้มากแค่ไหนด้วยครับ
ต่อมาเราจะมาดูกันว่า หากเราจะทดสอบการอ่าน/เขียนข้อมูล ลงบนหน่วยความจำ Flash Memory นั้นจะทดสอบอย่างไร และทำอะไรกับการทดสอบได้บ้าง
ก่อนอื่นเลยเราต้องให้ระบบเตรียมไฟล์ทดสอบด้วยคำสั่ง
1 | sysbench --test=fileio --file-total-size=2G prepare |
เราสามารถกำหนดขนาดไฟล์ที่จะใช้ทดสอบผ่านคำสั่ง –file-total-size=2G ซึ่งในที่นี้กำหนดไว้ที่ 2GB สำหรับขนาดที่เหมาะสมของไฟล์ที่จะใช้ทดสอบนี้ แนะนำว่าควรจะมีขนาดใหญ่กว่า RAM เพื่อลดผลกระทบจากการใช้ RAM เป็นแคชไฟล์ในการทำงาน ซึ่งอาจจะทำให้การทดสอบบน เครื่องที่มี RAM ไม่เท่ากัน อาจจะทำให้ได้ผลที่ต่างกันมากกว่า ความเร็วของ Flash Memory ตามที่ควรจะเป็น
โดยคำสั่งชุดนี้ จะไปสร้างไฟล์ ขนาด 16MB จำนวน 128ไฟล์ ในโฟล์เดอร์ home/usr0
หลังจากที่เตรียมไฟล์เสร็จแล้ว เรามาเริ่มทดสอบกันเลยด้วยคำสั่ง
1 | sysbench --test=fileio --file-total-size=2G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run |
หลังจากสั่งทดสอบแล้วระบบก็จะแจ้งรายละเอียดต่างๆให้เราทราบ จากนั้นเราก็รอ…
จนกว่าระบบจะทดสอบเสร็จสิ้น
ผลที่ได้ก็จะแจ้งว่าระบบทำอะไรไปบ้าง เช่นมีการอ่านเขียนกี่ไฟล์ ใช้เวลานานแค่ไหน ส่วนที่น่าสนใจจะอยู่ที่ Total transferred ที่บอกว่าการอ่าน/เขียนข้อมูลทั้งหมดมีขนาดเท่าไหร่ ภายในเวลาที่ทำงาน (total time)
ในการทดสอบนี้ได้ผลออกมาว่า มีการอ่าน/เขียนไฟล์ทั้งหมด 23.438MB โดยเป็นการอ่านไฟล์ 14.062MB และเขียนไฟล์ 9.375MB ภายในเวลา 306.0977 วินาที และความเร็วเฉลี่ยในการอ่าน/เขียนไฟล์ที่ 78.406KB/s ต่อวินาที ซึ่งนับว่าเป็นที่น่าพอใจในความเร็วนี้
เมื่อจบการทดสอบแล้ว เราก็จัดการทำความสะอาดไฟล์ที่สร้างขึ้นมาเพื่อทดสอบให้เสร็จสิ้นเนื่องจากคงนำไปใช้อะไรต่อไม่ได้แล้วด้วยคำสั่ง
1 | sysbench --test=fileio --file-total-size=2G cleanup |
ไฟล์ที่ถูกสร้างไว้ใน home/usr0 เพื่อใช้สำหรับทดสอบนั้นก็จะถูกล้างออกไปหมดจด
เป็นอันจบสิ้นพิธีการทดสอบ
คราวหน้าจะพูดถึงการตั้งค่าต่างๆในการทดสอบ เพื่อให้สามารถตั้งค่าทดสอบต่างๆได้เหมาะสมมากขึ้น
ปล. ผมยังสงสัยเรื่องหน่วย ของหน่วยความจำ หรือขนาดไฟล์ ที่ใช้ในการทดสอบพอสมควรนะครับ เนื่องจากว่าอักษรที่ใช้ในการรายงานผลการทดสอบนั้น ใช้ตัว b ซึ่งควรจะหมายถึงหน่วยเป็น bits แต่ในข้อมูลจากที่อื่น หรือแม้แต่ตู่มือของ Sysbench เอง กลับใช้ B ในการบ่งบอกหน่วยซึ่งมีหน่วยเป็น Bytes ที่สำคัญ ในไฟล์ที่ถูกสร้างขึ้นมาเพื่อใช้ในการทดสอบนั้น ตัว OS เองก็แสดงออกมาในหน่วยของ Byte ตามปกติ และมีขนาดที่เท่ากับสิ่งที่เราได้กำหนดไว้ เพียงแต่สัญลักษณ์ที่ Sysbench รายงานมาให้เรานั้นใช้ b เท่านั้นเอง ดังนั้นผมจึงเปลี่ยนอักษรเป็น B ตามที่ควรจะเป็นครับ