Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาใช้งาน Benchmark ในภาษา Go กัน

$
0
0

เห็นในกลุ่มภาษา Go Thailand ที่ Facebook นั้นมีการใช้งาน Benchmark สำหรับวัดประสิทธิภาพการทำงานของ code ที่เขียนด้วยภาษา Go จึงทำการสรุปวิธีการใช้งานไว้นิดหน่อย ซึ่งมันง่ายมาก ๆ เพราะว่า เป็น package ที่มีมาในภาษา Go อยู่แล้ว มาเริ่มกัน

อย่างแรกเลย Benchmark จะอยู่ใน package testing นั่นเอง

ช่วยวัดประสิทธิภาพการทำงาน code ที่เขียนด้วยภาษา Go ทั้งความเร็ว ทั้งการใช้งาน resource ต่าง ๆ การใช้งานเป็นดังนี้ เราจะเขียนไว้ในไฟล์ test นั่นเอง ชื่อ function สำหรับการทดสอบ Benchmark นั้น จะขึ้นต้นด้วยคำว่า Benchmark ตามด้วยตัวอักษรใหญ่ของชื่อ testcase ตัวอย่างเช่น [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="sample_test.go"] คำอธิบาย เขียนเหมือนกับชุดการทดสอบปกติเลย แต่มีข้อแตกต่างนิดหน่อยดังนี้
  • ชื่อขึ้นต้นด้วยคำว่า Benchmark
  • parameter ของ function จะเป็น testing.B
  • ทำการ run หลาย ๆ ครั้ง โดยที่ค่า b.N จะเพิ่มขึ้นเรื่อย ๆ จนกว่าผลการทำงานจะมีค่าที่เสถียร
  • function ที่ต้องทำการทดสอบต้องอยู่ใน loop ลักษณะนี้เท่านั้น
การ run ก็ไม่ยากเลย ดังนี้ ซึ่งต้องส่ง flag -bench เข้ามาในการทดสอบ สำหรับ run ทุก test case นั่นหมายความสามารถสามารถใส่ชื่อ test case ที่ต้องการ run ได้อีกนะ [code] $go test -bench=. [/code] หรือใส่ flag -run สำหรับชุดการทดสอบที่ต้องการเท่านั้น เช่น [code] $go test -run=XXXXXXX -bench=. [/code]

ยกตัวอย่างจากโจทย์ของกลุ่มภาษา Go ดังนี้

เลยนำมาทำ benchmark ตามที่พี่อูทำไว้บ้าง ได้ผลการทำงานดังนี้ [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="run.text"] คำอธิบายจากผลการทดสอบ พบว่าแต่ละ test case ที่วัดผลมีเวลาการทำงานที่ต่างกัน คือ 1,297 และ 168 nanosecond ยิ่งตัวเลขต่ำยิ่งเร็ว ส่วนเลข 1,000,000 และ 10,000,000 จำนวนสูงสุดที่ run ใน 1 วินาที (ค่า duration ซึ่งเปลี่ยนได้ผ่าน flag -benchtime)

ถ้าอยากรู้ว่าแต่ละ function ใช้ memory ไปเท่าไร ?

ทำได้ดังนี้ เพิ่ม flag -benchmem เข้าไป ดังนี้ [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="run2.text"] จะเห็นว่า BenchmarkChonlasith ในแต่ละรอบนั้นใช้ memory เฉลี่ยไป 208 byte มีการ allocate หรือจองไป 8 เป็นค่าที่มีประโยชน์สำหรับการปรับปรุง code ต่อไป เพื่อให้ลดการใช้งาน memory ลง ดังชุด code ที่ 2 นั่นเอง โดยที่ source code เอาไว้ที่ Github::Benchmark with Go อย่า optimize code เยอะจนอ่านกันไม่รู้เรื่องนะ Make it work Make it right Make it fast
แล้วยังสามารถนำไปวิเคราะห์การใช้งาน CPU/RAM หรือทำพวก profiling ได้อีกนะ
ขอให้สนุกกับการเขียน code

Viewing all articles
Browse latest Browse all 1997

Trending Articles