รู้จัก Project Volta โครงการที่จะช่วยให้ Android แบตอึดกว่าเดิม

by mk
28 June 2014 - 05:49

ที่งาน Google I/O 2014 เราได้เห็นชื่อ "โครงการ" ที่สามของ Android ถัดจาก Project Butter ที่ช่วยให้ลื่นไหลขึ้น (Android 4.1) และ Project Svelte ที่ช่วยให้กินแรมน้อยลง (Android 4.4)

รอบนี้กูเกิลโชว์ Project Volta ที่บอกว่ามันจะช่วยให้ Android ใช้แบตเตอรี่อย่างมีประสิทธิภาพกว่าเดิม แต่กลับพูดถึงมันบนเวที keynote น้อยมาก รายละเอียดของโครงการนี้ จริงๆ แล้วอยู่ในเซสชันเฉพาะ Introduction to Project Volta ครับ

เท่าที่ผมนั่งนับดู Project Volta ประกอบด้วยโครงการย่อยทั้งหมด 3 ส่วน เริ่มจากอย่างแรกคือฟีเจอร์ Battery Saver ของ Android L ที่คุยว่าจะเพิ่มอายุการใช้งานแบตได้สูงสุด 90 นาทีจากปกติ อันนี้ผมยังหารายละเอียดไม่เจอ แต่รูปแบบน่าจะคล้ายๆ Battery Saving Mode ของ Galaxy S5/HTC M8 คือปิดการใช้งานฟีเจอร์บางอย่างที่ไม่จำเป็นออกไป

ส่วนโครงการย่อยที่เหลืออีก 2 ส่วนถูกพูดถึงในเซสชัน Project Volta โดยโครงการทั้งสองตัวเน้นไปที่ "แอพ" ไม่ใช่ตัวระบบปฏิบัติการ ซึ่งกูเกิลใช้วิธีออกเครื่องมือช่วยให้นักพัฒนาแอพสามารถเก็บข้อมูลการใช้แบตเตอรี่ได้ดีกว่าเดิม

  1. Lazy First ให้แอพทำงานเท่าที่จำเป็น โดยออก JobScheduler API หรือตัวช่วยเรียกทำงาน (job scheduler) ให้แอพเรียกใช้
  2. Battery Historian เครื่องมือช่วยวิเคราะห์การใช้งานแบตเตอรี่

Lazy First และ JobScheduler API

เริ่มจากส่วน Lazy First ก่อนครับ ทีมงานกูเกิลมานั่งวิเคราะห์พฤติกรรมการใช้งานแบตเตอรี่อย่างละเอียด และพบว่าส่วนที่กินแบตเยอะๆ มีด้วยกัน 3 อย่างคือซีพียู เครือข่าย และหน้าจอ

ตัวอย่างการทำงานของ Nexus 5 เวลาส่งข้อมูลผ่านเครือข่าย LTE จะเห็นกราฟสีเขียวพุ่งขึ้นในช่วงแรกที่ส่งข้อมูล แต่หลังจากนั้นจะยังติดต่อกับเครือข่ายอีกช่วงหนึ่งแม้ไม่ได้ส่งข้อมูลแล้ว (เส้นสีแดง) ซึ่งตรงนี้กูเกิลมองว่าเปลืองพลังงานโดยใช่เหตุ

คำถามของกูเกิลจึงเป็นว่า ถ้าเราสามารถรอได้ (lazy) ไม่จำเป็นต้องรีบส่งข้อมูล ก็ย่อมทำให้ระบบโดยรวมกินพลังงานน้อยลง

ปัญหาคือการสั่งงานให้แอพ "รอ" เพื่อทำงานบางอย่างเท่าที่จำเป็นนั้นไม่ใช่เรื่องง่าย นักพัฒนาส่วนใหญ่จึงเขียนโปรแกรมไม่ซับซ้อนมาก สั่งให้ทำอะไรทันทีเลย (ซึ่งเขียนง่าย ตรงไปตรงมา แต่อาจไม่ดีในแง่พลังงาน เช่น เกิดปัญหา wakelock) กูเกิลเลยแก้ปัญหาโดยออกตัวจัดคิวงาน (job scheduler) มาให้ใน Android L

ในแง่การเขียนโปรแกรมก็แค่สร้างคลาส JobInfo มาครอบฟังก์ชันการทำงานปกติไว้อีกที กำหนดเงื่อนไขเวลาที่ต้องการ ที่เหลือ job scheduler จัดให้เอง

จากแผนภาพจะเห็นโครงสร้างการทำงานครับ (ถ้าใครเคยเรียนเรื่อง JobScheduler ของระบบปฏิบัติการมา ก็แนวคิดเดียวกัน) คือแอพจะกำหนดช่วงเวลาทำงานให้ JobScheduler รับทราบ จากนั้น JobScheduler (ซึ่งเป็นส่วนหนึ่งของระบบ) จะจัดการ "งาน" (job) ให้เราเอง

เงื่อนไขการทำงานของ JobScheduler API ก็มีให้เลือกหลายแบบ เช่น ทำงานเมื่อเชื่อมต่อเครือข่ายเท่านั้น ทำงานเมื่อเสียบสายชาร์จเท่านั้น เป็นต้น

JobScheduler API มีให้ลองใช้แล้วใน Android L Preview Release รายละเอียดคร่าวๆ อ่านได้จาก Android L API Overview

Battery Historian

ฟีเจอร์ด้านการวัดอัตราการใช้งานแบตเตอรี่ แยกได้เป็นสองส่วนครับ อย่างแรกคือ batterystats เป็นคำสั่งใหม่ที่เพิ่มเข้ามาใน ADB

วิธีการเรียกใช้ก็สั่ง

$ adb shell dumpsys batterystats --charged <package-name>

เรียกดูได้ละเอียดถึงขนาดแพ็กเกจของแอพเป็นรายตัว และกำหนดเวลาได้ว่าอยากดูจากช่วงไหนถึงช่วงไหน

ตัวอย่างจากภาพด้านล่าง บ่งบอกกรณี B กับ C ว่ามีอัตราการส่งแพ็กเกจจำนวนใกล้เคียงกัน แต่ใช้ระยะเวลาการส่งต่างกันมาก (42 นาทีกับ 2 นาที) ดังนั้นประสิทธิภาพในการใช้พลังงานของ B จึงต่ำกว่า C ซึ่งนักพัฒนาแอพก็ต้องมาดูรายละเอียดว่าเป็นความตั้งใจหรือความผิดพลาดกันแน่

แต่ batterystats จะสื่อสารกับเราด้วยล็อกไฟล์ที่อ่านยาก ดังนั้นกูเกิลเลยแถมเครื่องมือให้อีกตัวชื่อ Battery Historian ที่ช่วยแปลง (visualize) ล็อกมาเป็นกราฟสวยงาม

โปรแกรม Battery Historian (historian.par) จะแถมมากับ Android SDK ด้วย แต่สามารถดาวน์โหลดแยกเองได้จาก GitHub (เป็น Python)

ทั้งหมดนี้คือรายละเอียดของ Project Volta ครับ ใครสนใจข้อมูลเพิ่มเติมสามารถดูได้จากวิดีโอด้านล่าง

ในภาพรวมแล้ว Project Volta ค่อนข้างต่างไปจาก Butter/Svelte ที่เน้นการปรับปรุงตัวระบบปฏิบัติการโดยตรง (กูเกิลควบคุมได้หมด) เพราะปัญหาเรื่องแบตเตอรี่เกิดจากแอพมากกว่า (ทั้งแอพกูเกิลเองและแอพของนักพัฒนาภายนอก) ทำให้ Volta เน้นไปที่การสร้างเครื่องมือให้นักพัฒนาแอพสามารถตรวจเช็คปัญหาแบตเตอรี่ได้ง่ายขึ้น เราจึงต้องรอนักพัฒนาทั้งหลายนำเครื่องมือเหล่านี้ไปใช้ปรับปรุงแก้ปัญหาแอพของตัวเองอีกพักใหญ่ๆ จึงจะเห็นผลว่า Project Volta ดีแค่ไหนกันครับ

Blognone Jobs Premium