หากโทรศัพท์ของคุณเป็นคน ก็อาจเป็นเพื่อนที่ประสบความสำเร็จจนไม่สามารถนั่งนิ่งได้ ประเภทที่ยืนกรานว่ากำลังพักผ่อนและแอบทำธุระ ตอบข้อความ เช็คสภาพอากาศไปพร้อมๆ กัน
ภายในอุปกรณ์ Android ของคุณ มีบางสิ่งที่คล้ายกันมากเกิดขึ้นทุกขณะ วินาทีที่โปรเซสเซอร์กำลังสตรีมเพลย์ลิสต์ของคุณผ่าน Bluetooth วินาทีถัดไปคือการประมวลผลการแจ้งเตือน ติดตามตำแหน่งของคุณ หรือการซิงค์ข้อมูลในเบื้องหลัง มันสามารถจัดการทั้งหมดนี้ได้โดยไม่ต้องละลายในกางเกงยีนส์ของคุณหรือขอที่ชาร์จก่อนอาหารกลางวัน
ความลับเบื้องหลังความแข็งแกร่งเหนือมนุษย์นี้อยู่ในสถานที่ศักดิ์สิทธิ์เล็กๆ ภายในซิลิคอนที่เรียกว่าเกาะพลังงานต่ำ ซึ่งมักเรียกโดยย่อว่า LPI คิดว่านี่เป็นมุมนั่งสมาธิสำหรับผู้ประมวลผลของคุณ เมื่อไม่มีอะไรเร่งด่วนที่ต้องทำ บางส่วนของชิปจะถอยกลับเข้ามาในพื้นที่นี้อย่างเงียบๆ เพื่อพักผ่อน ในขณะที่ส่วนประกอบสำคัญบางส่วนจะตื่นตัวเพื่อจับตาดูโลก
ลองนึกภาพ CPU ของคุณเป็นร้านกาแฟที่มีผู้คนพลุกพล่าน บาริสต้าหลักเป็นแกนหลักที่มีประสิทธิภาพสูง เร่งรีบเพื่อเตรียมเครื่องดื่มเอสเพรสโซแฟนซีสำหรับแอปที่มีความต้องการสูง เช่น เกมหรือโปรแกรมตัดต่อวิดีโอ แกนประสิทธิภาพที่เล็กกว่ารองรับคำสั่งที่เบากว่า เช่น การแจ้งเตือนหรืองานเบื้องหลัง ลองนึกภาพเครื่องชงกาแฟแบบหยดที่โดดเดี่ยวส่งเสียงฮัมอยู่ที่มุมหลังเวลาปิดทำการ ช่วยให้สิ่งสำคัญต่างๆ ทำงานโดยไม่ใช้พลังงานมากนัก เครื่องจักรอันต่ำต้อยนั่นคือเกาะพลังงานต่ำของคุณ
เมื่อ Android ตระหนักว่าไม่มีใครแตะหน้าจอ ไม่มีการประมวลผลอย่างหนัก และไม่มีการทำงานล็อกปลุกที่สำคัญ อุปกรณ์จะปล่อยให้อุปกรณ์เข้าสู่โหมดสลีปครึ่งหนึ่งอย่างนุ่มนวล ระบบไม่ได้หมดสติไปโดยสิ้นเชิง เนื่องจากยังมีบางคนต้องการฟังเสียงเตือน กิจกรรมเครือข่าย หรือแพ็กเก็ตบลูทูธ มันเหมือนกับแมวงีบหลับโดยที่หูข้างหนึ่งกระตุกเพื่อหาเสียงมากกว่า
การออกแบบนี้ช่วยให้อุปกรณ์สมัยใหม่สามารถประหยัดพลังงานในขณะที่ยังคงตอบสนองได้ดี ในระบบเก่า การเข้าสู่โหมดสลีปหมายถึงการปิดทุกอย่างลง และต้องตื่นขึ้นมาพบกับเหตุการณ์เดียวอย่างเจ็บปวด นั่นก็คงเหมือนกับการปิดไฟร้านกาแฟทุกครั้งที่ไม่มีลูกค้า แล้วรอเครื่องอุ่นเครื่องเมื่อออเดอร์ต่อไปมาถึง Low Power Island หลีกเลี่ยงการสิ้นเปลืองโดยการรักษาเฉพาะสิ่งที่จำเป็นให้คงอยู่
ดังนั้น ครั้งถัดไปที่โทรศัพท์ของคุณสว่างขึ้นทันทีหลังจากนอนนิ่งๆ เป็นเวลาหลายชั่วโมง โปรดจำไว้ว่าลึกๆ ภายในโปรเซสเซอร์ของคุณ มีทรานซิสเตอร์ที่เงียบๆ สองสามตัวคอยเฝ้าประตูอยู่ พวกเขาไม่ได้ตื่นเต็มที่หรือหลับเต็มที่ แต่ลอยอยู่ตรงกลางอย่างสงบ นั่นคือ Low Power Island ฮีโร่ที่ซ่อนอยู่ในด้านความทนทานแบตเตอรี่ของ Android
ในบทความนี้ เราจะมาเปิดม่านเกี่ยวกับฮีโร่ตัวนั้น คุณจะเห็นว่า LPI ทำงานอย่างไร ไม่ใช่แค่มุมง่วงของ CPU แต่เป็นกลยุทธ์การจัดการพลังงานเต็มรูปแบบที่ถักทอเข้ากับสถาปัตยกรรมของ Android นอกจากนี้ เรายังจะสำรวจด้วยว่า Bluetooth ยังคงพูดคุยอย่างเงียบๆ ภายในเกาะโดยไม่ปลุกแกนหลักขนาดใหญ่ได้อย่างไร Power HAL และเคอร์เนลควบคุมทุกวงจรการงีบหลับและตื่น และวิธีที่เฟิร์มแวร์มีบทบาทเป็นยามราตรีที่ไม่รู้จักเหน็ดเหนื่อย
คุณจะได้รับตัวอย่าง AOSP จริง บันทึกเคอร์เนลจริง และคำแนะนำเชิงปฏิบัติเกี่ยวกับการเขียนโค้ด Bluetooth ที่ทำงานร่วมกับเกาะแทนที่จะส่งเสียงดัง
ในตอนท้าย คุณจะเข้าใจว่าทำไมโทรศัพท์ของคุณถึงใช้งานได้ยาวนาน และวิธีที่ซิลิคอนที่ซ่อนไว้นี้ช่วยให้ทุกอย่างทำงานได้อย่างแม่นยำ
สารบัญ
-
Low Power Island (LPI) ใน Android Bluetooth คืออะไร
-
The Silent Orchestra:LPI ทำงานอย่างไรกับ Power HAL &Kernel
-
การดีบักและการตรวจสอบเกาะพลังงานต่ำใน Bluetooth
-
การสอนบลูทูธให้ Nap อย่างชาญฉลาดยิ่งขึ้น
-
บทสรุป:อัจฉริยะอันเงียบสงบในโทรศัพท์ของคุณ
บลูทูธเป็นผีเสื้อสังคม แม้ว่าหน้าจอจะมืด แต่ก็ยังกระซิบกับหูฟังเอียร์บัด สมาร์ทวอทช์ หรือเครื่องเสียงรถยนต์ของคุณ เพื่อแลกเปลี่ยนแพ็คเก็ตข้อมูลที่ทำให้ชีวิตรู้สึกราบรื่น ปัญหาคือการสนทนาอย่างต่อเนื่องสิ้นเปลืองพลังงาน การปลุกโทรศัพท์ทั้งเครื่องทุกๆ สองสามวินาทีเพื่อส่งไบต์ไม่กี่ไบต์ก็เหมือนกับการเปิดไฟสปอร์ตไลท์ในสนามกีฬาเพื่อค้นหากุญแจของคุณ
นี่คือจุดที่ Low Power Island กลายเป็นฮีโร่อีกครั้ง ภายในโทรศัพท์ Android รุ่นใหม่ การสื่อสารบลูทูธได้รับการจัดการโดยตัวควบคุมบลูทูธโดยเฉพาะ ซึ่งเป็นไมโครโปรเซสเซอร์ขนาดเล็กภายในระบบบนชิปเดียวกันกับซีพียูหลัก คอนโทรลเลอร์นี้มีหน่วยความจำของตัวเองและโดเมนพลังงานของตัวเอง มันสามารถทำงานบางส่วนในขณะที่คอร์ CPU ขนาดใหญ่พักอยู่ โดยรักษาการเชื่อมต่อและจัดการการรับส่งข้อมูลทางวิทยุโดยแทบไม่ได้รับความช่วยเหลือจากโปรเซสเซอร์หลักเลย
เมื่อ ตัวจัดการพลังงาน ของ Android ตัดสินใจว่าระบบสามารถเข้าสู่โหมดสลีปได้ โดยจะส่งสัญญาณผ่าน Bluetooth HAL และไดรเวอร์ของผู้จำหน่ายเพื่อแจ้งให้คอนโทรลเลอร์ทราบว่าฝั่งโฮสต์กำลังเข้าสู่สถานะพลังงานต่ำ จากนั้นคอนโทรลเลอร์จะเข้าควบคุมงานเล็กๆ น้อยๆ ด้วยตัวเอง เช่น การรักษาการเชื่อมต่อให้คงอยู่ การกำหนดเวลาช่วงการดมกลิ่น และการจัดการการแฮนด์เชคการเข้ารหัส ผลลัพธ์ที่ได้คือประสบการณ์ที่ราบรื่นโดยที่เอียร์บัดของคุณยังคงจับคู่และตอบสนองในขณะที่ส่วนที่เหลือของโทรศัพท์ของคุณประหยัดพลังงานอย่างเงียบๆ
การดูบริการ Bluetooth ของ AOSP แบบเรียบง่ายแสดงให้เห็นการทำงานร่วมกันนี้:
// From system/bt/service/btif/src/btif_core.cc
void btif_pm_enter_low_power_mode() {
LOG_INFO("%s: entering low power mode", __func__);
// Notify controller to enter sleep mode
BTA_dm_pm_btm_status_evt(BTA_DM_PM_BTM_STATUS_IDLE);
// Suspend host stack threads
btif_thread_suspend();
}
void btif_pm_exit_low_power_mode() {
LOG_INFO("%s: exiting low power mode", __func__);
// Resume host stack threads
btif_thread_resume();
// Notify controller that the host is active again
BTA_dm_pm_btm_status_evt(BTA_DM_PM_BTM_STATUS_ACTIVE);
}
ฟังก์ชันเหล่านี้เป็นเพียงส่วนเล็กๆ ของการสนทนาที่ใหญ่กว่ามากระหว่าง Android และคอนโทรลเลอร์ สแต็กของโฮสต์จะหยุดชั่วคราวอย่างเงียบๆ ในขณะที่ตัวควบคุมเฝ้าดู บนแพลตฟอร์มของผู้จำหน่ายชิปหลายแห่ง สถานะนี้เรียกว่า คอนโทรลเลอร์สลีป หรือ โหมดเลื่อน . ตัวควบคุมบลูทูธสามารถปลุกโฮสต์เฉพาะเมื่อมีเหตุการณ์สำคัญเกิดขึ้นเท่านั้น เช่น มีสายเรียกเข้าหรือการกดปุ่มจากชุดหูฟังของคุณ
มันทำงานเหมือนเจ้าหน้าที่รักษาความปลอดภัยยามค่ำคืนที่ลาดตระเวนอาคารหลังจากที่ทุกคนกลับบ้านแล้ว ไฟดับ อากาศยังคงนิ่ง แต่มีคนตื่นตัวอยู่เสมอ หากมีสิ่งใดเกิดขึ้น เจ้าหน้าที่จะกดกริ่ง และลูกเรือที่เหลือจะตื่น นั่นคือวิธีที่ Bluetooth ในโทรศัพท์ของคุณทำงานต่อไปแม้ในขณะที่จอแสดงผลมืดและแกน CPU พักอยู่ใน Low Power Island
การทำงานร่วมกันระหว่างฮาร์ดแวร์ เฟิร์มแวร์ และการจัดการพลังงานของ Android ทำให้คุณสามารถฟังเพลง รับการแจ้งเตือนของสมาร์ทวอทช์ หรือเล่นต่อได้ทันทีโดยไม่ต้องเปลืองแบตเตอรี่ ประสิทธิภาพความเงียบที่ดีที่สุด สมดุลระหว่างการรับรู้และการพักผ่อนที่กำหนดความงดงามของการออกแบบ Android สมัยใหม่
The Silent Orchestra:วิธีการทำงานของเกาะพลังงานต่ำกับ Android Power HAL และเคอร์เนล
หากคุณสามารถแอบดูใต้ฝากระโปรงของ Android ในขณะที่โทรศัพท์ของคุณอยู่ในโหมดสลีป คุณจะเห็นบางสิ่งที่ดูเหมือนวงออเคสตราที่กำหนดเวลาได้อย่างสมบูรณ์แบบ เครื่องดนตรีทุกชนิดรู้ว่าเมื่อใดควรเล่นเบา ๆ เมื่อใดควรพัก และเมื่อใดควรกลับเข้ามาโดยไม่พลาดจังหวะ
Low Power Island ไม่ใช่นักแสดงเดี่ยวในรายการนี้ มันเหมือนกับท่อนจังหวะที่นุ่มนวลซึ่งประสานกันโดยชุดตัวนำที่มองไม่เห็นซึ่งอยู่ภายใน Power HAL , เคอร์เนล และเฟิร์มแวร์ .
เริ่มจาก Power HAL กันก่อน หรือ Hardware Abstraction Layer ใน Android Power HAL ทำหน้าที่เป็นตัวกลางระหว่างเฟรมเวิร์กระบบและไดรเวอร์เคอร์เนลระดับต่ำ เมื่อใดก็ตามที่ Android ตัดสินใจว่าสามารถลดการใช้พลังงานลงได้ Android จะสื่อสารการตัดสินใจนี้ผ่านอินเทอร์เฟซ HAL Power HAL พูดคุยกับการใช้งานของผู้จำหน่ายชิปเซ็ตเพื่อตัดสินใจว่าส่วนใดของฮาร์ดแวร์ที่สามารถเข้าสู่โหมดสลีปได้อย่างปลอดภัย โดยไม่เพียงควบคุมคลัสเตอร์ CPU เท่านั้น แต่ยังควบคุม GPU, ไปป์ไลน์การแสดงผล และตัวควบคุมอุปกรณ์ต่อพ่วง เช่น บลูทูธ และ Wi-Fi
ในแง่ที่เรียบง่าย ตัวจัดการพลังงานของ Android พูดประมาณว่า "เฮ้ HAL ตอนนี้เราไม่ได้ใช้งานแล้ว ของีบหลับสักหน่อยได้ไหม" จากนั้น Power HAL จะตรวจสอบกับเคอร์เนลและฮาร์ดแวร์เพื่อดูว่าใครสามารถนอนหลับได้ หากตัวควบคุมบลูทูธยืนยันว่าสามารถจัดการการสื่อสารที่กำลังดำเนินอยู่เพียงอย่างเดียวได้ Power HAL จะส่งสัญญาณให้เคอร์เนลเริ่มปิดการทำงานของโปรเซสเซอร์หลักบางส่วน
เคอร์เนล ในทางกลับกัน จัดการการเปลี่ยนแปลงนี้ผ่านทาง โดเมนพลังงาน และ การเฝ้าดูนาฬิกา ระบบ บล็อกฮาร์ดแวร์แต่ละบล็อกในชิปเป็นของโดเมนพลังงานเฉพาะ เคอร์เนลรู้ว่าโดเมนใดที่สามารถปิดได้ทั้งหมดและโดเมนใดต้องยังคงใช้งานอยู่บางส่วน
ตัวควบคุมบลูทูธมักจะเป็นของโดเมนที่รองรับโหมดการเก็บรักษา ซึ่งหมายความว่าหน่วยความจำและตรรกะบางส่วนยังคงทำงานอยู่เพียงพอที่จะรักษาสถานะไว้
โฟลว์ทั่วไปจะมีลักษณะดังนี้ภายในบันทึกเคอร์เนลเมื่ออุปกรณ์เริ่มเข้าสู่โหมด LPI:
PM: suspend entry (deep)
controller-bluetooth 0001:00:00.0: entering controller sleep
PM: suspend devices complete
PM: suspend exit
controller-bluetooth 0001:10:00.0: waking host
ในการแลกเปลี่ยนสั้นๆ นี้ คุณจะสามารถดูได้ว่าตัวจัดการพลังงานของ Android จัดการกระบวนการ sleep-wake ทั้งหมดอย่างไร ไดรเวอร์บลูทูธรายงานว่าคอนโทรลเลอร์กำลังเข้าสู่โหมดสลีป เคอร์เนลยืนยันว่าอุปกรณ์ทั้งหมดถูกระงับ จากนั้นจะปลุกทุกอย่างอีกครั้งในภายหลังเมื่อมีการขัดจังหวะ
ในระดับฮาร์ดแวร์ ลักษณะการทำงานนี้ขึ้นอยู่กับ เกาะแรงดันไฟฟ้า และ โดเมนนาฬิกา กำหนดโดยผู้ผลิต SoC คำว่า "เกาะ" ไม่ได้เป็นคำเปรียบเทียบในที่นี้ แต่หมายถึงบริเวณที่แยกทางไฟฟ้าบนชิปซึ่งสามารถขับเคลื่อนได้อย่างอิสระ เมื่อเคอร์เนลทำให้ CPU หลักเข้าสู่โหมดสลีป พลังงานที่ไปยังเกาะนั้นจะลดลงหรือปิดลง ในขณะที่เกาะอื่นที่มีตัวควบคุม Bluetooth ยังคงทำงานโดยใช้ออสซิลเลเตอร์อิสระขนาดเล็ก
ในขณะเดียวกัน เฟิร์มแวร์ ที่ทำงานบนตัวควบคุม Bluetooth จะช่วยดูแลทำความสะอาดแบบเบา ๆ โดยจะจัดการเหตุการณ์ที่กำหนดเวลาไว้ เช่น ช่วงเวลาการเชื่อมต่อ การดมกลิ่นการเปลี่ยนอัตราย่อย และการหมดเวลาการควบคุมดูแลลิงก์ มันสามารถถอดรหัสหรือเข้ารหัสแพ็กเก็ตอีกครั้งได้โดยไม่รบกวนโปรเซสเซอร์โฮสต์ ซึ่งช่วยให้ Android สามารถรักษาการเชื่อมต่อบลูทูธแบบสดไว้ได้ในขณะที่ใช้พลังงานเพียงเล็กน้อยจากปกติ
เมื่อมีเหตุการณ์ที่ต้องการความสนใจในระดับที่สูงกว่าเกิดขึ้น เช่น ผู้ใช้กดปุ่มบนชุดหูฟัง ตัวควบคุมจะส่งสัญญาณปลุกโฮสต์ ผ่าน UART หรือการขนส่งหน่วยความจำแบบแบ่งใช้ เคอร์เนลได้รับการขัดจังหวะนี้ กู้คืนนาฬิกา CPU และดำเนินการจัดการพลังงานของ Android ต่อ สแต็กโฮสต์จะเปิดใช้งานอีกครั้ง ประมวลผลเหตุการณ์ จากนั้นส่งการควบคุมกลับอย่างสง่างามเมื่อไม่ได้ใช้งานอีกครั้ง
การเต้นรำระหว่าง Power HAL, เคอร์เนล และเฟิร์มแวร์นี้อาจฟังดูซับซ้อน แต่เป็นหนึ่งในการออกแบบที่หรูหราที่สุดใน Android แต่ละเลเยอร์มีบทบาทอย่างแม่นยำ Power HAL จะเจรจาต่อรองนโยบาย เคอร์เนลบังคับใช้ และเฟิร์มแวร์จะดำเนินการนโยบายเหล่านั้นอย่างเงียบๆ ในเบื้องหลัง เมื่อรวมกันแล้ว จะช่วยให้แน่ใจว่าโทรศัพท์ของคุณจะรู้สึกตื่นขึ้นทันทีแม้หลังจากพักผ่อนไปหลายชั่วโมง
ครั้งถัดไปที่หูฟังเอียร์บัดของคุณเชื่อมต่อใหม่โดยไม่ชักช้าหลังจากที่โทรศัพท์ถูกล้วงกระเป๋าของคุณ โปรดทราบว่าซอฟต์แวร์และซิลิคอนทั้งสายร่วมมือกันอย่างไม่มีที่ติเพื่อให้สิ่งนี้เกิดขึ้น Low Power Island ไม่เพียงแต่ประหยัดพลังงานเท่านั้น แต่ยังควบคุมวงออเคสตราเงียบๆ ไว้ใต้ปลายนิ้วของคุณ
การดีบักและการตรวจสอบเกาะพลังงานต่ำใน Bluetooth
หากคุณเคยเห็นแมวนอนหลับกระตุกหูและสงสัยว่ามันกำลังฝันอยู่หรือเปล่า นั่นก็เหมือนกับการดีบัก Low Power Island บน Android อุปกรณ์อาจปรากฏอยู่นิ่ง แต่ลึกเข้าไปในบันทึก ระลอกคลื่นแห่งชีวิตเล็กๆ ปรากฏขึ้นทุกๆ สองสามวินาที วิศวกรชอบความวุ่นวายที่เงียบสงบนี้ เพราะมันบอกพวกเขาว่าระบบมีความสมดุลอย่างสมบูรณ์แบบระหว่างการพักผ่อนและความพร้อม
เมื่อบลูทูธเข้าสู่ช่วงพลังงานต่ำ Android จะทิ้งร่องรอยร่องรอยไว้เบื้องหลัง คุณสามารถดูได้ทั้งใน logcat และ เคอร์เนล dmesg เอาท์พุท บันทึกเหล่านี้ช่วยยืนยันว่าตัวควบคุมบลูทูธกำลังเข้าสู่สถานะพลังงานต่ำจริงหรือไม่ ในขณะที่ CPU โฮสต์ถอยกลับไปยังเกาะแห่งความสงบ
วิธีง่ายๆ ในการดูกระบวนการนี้คือเรียกใช้:
adb logcat -b all | grep -i "btif_pm"
คุณอาจเห็นสิ่งนี้:
08-05 12:23:44.732 1712 1725 I bt_btif_pm: entering low power mode
08-05 12:23:44.733 1712 1725 I bt_btif_pm: controller idle, suspending host threads
08-05 12:23:46.008 1712 1725 I bt_btif_pm: exiting low power mode
แต่ละบรรทัดบอกเล่าเรื่องราวบางส่วน ข้อความแรกยืนยันว่าสแต็ค Bluetooth ของ Android ได้ร้องขอให้เข้าสู่สถานะพลังงานต่ำ ข้อความที่สองแสดงว่าเธรดฝั่งโฮสต์หยุดชั่วคราว และข้อความสุดท้ายแสดงว่าตัวควบคุมได้ปลุกโฮสต์อีกครั้ง
หากต้องการดูว่าเกิดอะไรขึ้นข้างใต้ คุณสามารถตรวจสอบบันทึกเคอร์เนลได้:
adb shell dmesg | grep -i bluetooth
คุณอาจพบรายการเช่น:
[ 1423.347102] controller-bluetooth 0001:00:00.0: entering controller sleep
[ 1423.347117] PM: suspend entry (deep)
[ 1425.105993] controller-bluetooth 0001:00:00.0: host wake received
[ 1425.106005] PM: resume complete
บรรทัดเหล่านี้ยืนยันว่าไดรเวอร์ Bluetooth และระบบจัดการพลังงานทำงานร่วมกันอย่างถูกต้อง ตัวควบคุมเข้าสู่โหมดสลีป เคอร์เนลระงับคลัสเตอร์ CPU และทุกอย่างกลับมาทำงานอีกครั้งเมื่อมีสัญญาณปลุกจากตัวควบคุม Bluetooth เข้ามา
หากคุณเคยเห็นเจ้าของที่พักตื่นบ่อยเกินไป มักจะหมายความว่าส่วนประกอบบางอย่างไม่เคารพขอบเขตการนอนหลับ ผู้ร้ายที่พบบ่อย ได้แก่ Wake Lock ที่ทำงานผิดปกติ แอพที่มีเสียงดังร้องขอการสแกนอย่างต่อเนื่อง หรือตัวจับเวลาที่ไม่มีวันหมดอายุ ในกรณีเช่นนี้ PowerStats HAL ของ Android และ สถิติแบตเตอรี่ กรอบงานสามารถช่วยติดตามผู้ที่ป้องกันการนอนหลับลึกได้
คุณสามารถตรวจสอบสถิติการใช้พลังงานต่ำโดยรวมได้โดยใช้:
adb shell dumpsys batterystats | grep "bluetooth"
ข้อมูลนี้จะแสดงระยะเวลาที่ระบบย่อย Bluetooth ยังคงทำงานอยู่ เทียบกับระยะเวลาที่ระบบอยู่ในโหมดพลังงานต่ำ ตามหลักการแล้ว ตัวเลขควรแสดงว่าบลูทูธส่วนใหญ่ไม่มีการใช้งาน ยกเว้นช่วงปลุกสั้นๆ
วิศวกรที่ทำงานเกี่ยวกับการนำระบบมักจะใช้เครื่องมือติดตามแบบพิเศษ เช่น 09 , 13รหัส> หรือ 25 เพื่อให้เห็นภาพการเปลี่ยนแปลงของอำนาจ การติดตามพลังงานจะแสดงจังหวะ:เส้นแบนยาวแสดงถึงการนอนหลับ ซึ่งถูกขัดจังหวะด้วยกิจกรรมที่เพิ่มสูงขึ้นอย่างรวดเร็วเมื่อตัวควบคุมปลุกโฮสต์สำหรับเหตุการณ์ที่มีความหมาย หากการพุ่งสูงขึ้นบ่อยเกินไป คุณจะรู้ว่าระบบไม่สามารถเข้าสู่เกาะพลังงานต่ำได้อย่างมีประสิทธิภาพ
นี่คือข้อความที่ตัดตอนมาจากตัวอย่างการติดตาม Perfetto ทั่วไป:
bluetooth_host_state: IDLE → SUSPENDED
bluetooth_controller_state: ACTIVE → SLEEP
kernel_cpu_cluster_0: ACTIVE → RETENTION
kernel_cpu_cluster_1: ACTIVE → POWER_OFF
ลำดับเหตุการณ์ที่เรียบง่ายนี้บอกเล่าเรื่องราวอันทรงพลัง สแต็กโฮสต์ถูกระงับ คอนโทรลเลอร์เข้าสู่โหมดสลีป และคลัสเตอร์ CPU ปิดทำงานอย่างสวยงาม เมื่อเหตุการณ์ถัดไปเกิดขึ้น การเปลี่ยนภาพจะย้อนกลับ และอุปกรณ์จะเริ่มทำงานเกือบจะในทันที
เบื้องหลัง เฟิร์มแวร์ของผู้จำหน่ายมีบทบาทสำคัญในการทำให้รูปลักษณ์มหัศจรรย์นี้เป็นเรื่องง่าย เฟิร์มแวร์ตัวควบคุม Bluetooth จะรักษาช่วงเวลา ช่วงเวลาการดมกลิ่น และคีย์การเข้ารหัสเลเยอร์ลิงก์ ทั้งหมดนี้ทำงานโดยใช้พลังงานเพียงไม่กี่มิลลิวัตต์ มันมีประสิทธิภาพอย่างน่าอัศจรรย์ คอนโทรลเลอร์ทั่วไปสามารถรักษาการเชื่อมต่อ ACL ที่ใช้งานอยู่โดยใช้พลังงานต่ำกว่าหนึ่งมิลลิวัตต์ แม้ว่าคอร์ CPU หลักจะปิดทำงานโดยสิ้นเชิงก็ตาม
การดีบักระบบนี้ให้ความรู้สึกเหมือนกับการดูนก คุณต้องอดทน เงียบ และช่างสังเกต โดยส่วนใหญ่แล้วไม่มีอะไรเกิดขึ้นอย่างมากในบันทึก แต่เมื่อคุณเข้าสู่วงจรการหลับ-ตื่นที่สมบูรณ์แบบในที่สุด คุณจะรู้สึกเหมือนได้ชมธรรมชาติอย่างกลมกลืน นั่นคือความงดงามของ Low Power Island ของ Android ที่ทำงานร่วมกับ Bluetooth
ดังนั้นเมื่อหูฟังเอียร์บัดของคุณเชื่อมต่ออีกครั้งในครึ่งวินาทีหรือสมาร์ทวอทช์ของคุณซิงค์ข้อมูลอย่างเงียบ ๆ ในขณะที่โทรศัพท์ของคุณวางอยู่บนโต๊ะ อย่าลืมนึกถึงวงออร์เคสตราอันเงียบสงบนี้เบื้องหลัง ไม่ใช่พลังที่ดุร้าย แต่เป็นการจัดการพลังงานอัจฉริยะที่ทำให้ประสบการณ์รู้สึกราบรื่น Low Power Island เป็นช่างฝีมือที่มองไม่เห็นซึ่งทำให้บลูทูธ Android ของคุณมีความแม่นยำอย่างสงบ ช่วยประหยัดแบตเตอรี่ครั้งละหนึ่งแพ็คเก็ตที่ง่วงนอน
การสอนบลูทูธให้ Nap อย่างชาญฉลาดยิ่งขึ้น
หาก Low Power Island เป็นสถานที่ฝึกโยคะสำหรับโปรเซสเซอร์ของคุณ งานของคุณในฐานะนักพัฒนาคือการทำให้แน่ใจว่ารหัส Bluetooth ของคุณจะไม่แสดงพร้อมกับชุดกลอง เป็นเรื่องง่ายที่จะทำให้ระบบตื่นโดยไม่ได้ตั้งใจเมื่อคุณไม่จำเป็นต้องทำ การล็อกปลุกโดยไม่ระมัดระวังเพียงครั้งเดียว ตัวจับเวลาที่เกิดซ้ำ หรือคำขอสแกนที่ไม่มีที่สิ้นสุดสามารถป้องกันไม่ให้ฮาร์ดแวร์เข้าสู่สถานะที่สงบและประหยัดพลังงาน
เป้าหมายของการเพิ่มประสิทธิภาพสำหรับ Low Power Island ไม่ใช่เพื่อให้ตรรกะ Bluetooth ของคุณทำงานน้อยลง เพื่อให้ทำงานอย่างชาญฉลาด เพื่อให้คอนโทรลเลอร์จัดการการแลกเปลี่ยนพื้นหลังเล็กๆ ในขณะที่ CPU หลักเข้าสู่โหมดสลีปอย่างสงบ ไดรเวอร์ Bluetooth Stack และผู้จำหน่ายของ Android จัดการกับงานหนักส่วนใหญ่อยู่แล้ว แต่นักพัฒนาสามารถสร้างความแตกต่างครั้งใหญ่ได้ด้วยการเขียนโค้ดที่คำนึงถึงพลังงานโดยคำนึงถึงขอบเขตเหล่านั้น
กฎข้อแรกนั้นง่ายมาก:สแกนอย่างมีความรับผิดชอบ . การสแกนอย่างต่อเนื่องเป็นตัวร้ายอันดับหนึ่งในโปรไฟล์พลังงาน Bluetooth การสแกนแต่ละครั้งจะปลุกวิทยุ ตัวควบคุม และบ่อยครั้งที่ตัวประมวลผลโฮสต์ หากแอปของคุณเรียก 38 อย่างต่อเนื่อง หากไม่มีเงื่อนไขการหยุดที่ชัดเจน คุณจะส่องไฟฉายไปที่เกาะพลังงานต่ำทุกๆ สองสามวินาทีได้อย่างมีประสิทธิภาพ
ให้ทำการสแกนเป็นชุดและใช้ตัวกรองแทน 45 ของระบบ โหมดได้รับการออกแบบมาโดยเฉพาะเพื่อให้สามารถสแกนที่ทำงานร่วมกับการเปลี่ยน LPI ได้
นี่คือตัวอย่างจาก AOSP ที่แสดงวิธีที่คุณสามารถทริกเกอร์การสแกนด้วยวิธีที่ประหยัดพลังงาน:
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
.setReportDelay(5000) // batch results every 5 seconds
.build();
bluetoothLeScanner.startScan(filters, settings, scanCallback);
การรวมผลลัพธ์เป็นชุดและปล่อยให้ฮาร์ดแวร์สแกนภายใน คุณจะลดการปลุกโฮสต์ได้อย่างมาก ตัวควบคุมบลูทูธสามารถรวบรวมโฆษณาได้ด้วยตัวเอง โดยปลุก CPU เพียงหนึ่งครั้งทุกๆ สองสามวินาทีเพื่อให้ได้ผลลัพธ์
กฎข้อที่สองคือ ปล่อยให้สแต็กเข้าสู่โหมดสลีป . นักพัฒนาหลายรายบล็อกเธรด Bluetooth โดยไม่รู้ตัวโดยกด Wake Lock ค้างไว้หรือเรียกใช้การโทรกลับที่ไม่จำเป็น สแตก Bluetooth ของ Android รักษาการซิงโครไนซ์ภายในผ่านลูปข้อความที่สามารถหยุดชั่วคราวได้อย่างปลอดภัยในช่วงที่ไม่มีการใช้งาน
หลีกเลี่ยงการดำเนินการที่ใช้เวลานานในการเรียกกลับ เช่น 58 . ให้ถ่ายโอนงานไปยังผู้ดำเนินการเบื้องหลังที่เคารพนโยบาย Doze และ App Standby ของ Android แทน
การเพิ่มประสิทธิภาพอีกอย่างหนึ่งอยู่ที่ การใช้ช่วงเวลาการเชื่อมต่อและเวลาในการตอบสนองอย่างชาญฉลาด . การเชื่อมต่อ BLE ช่วยให้คุณกำหนดความถี่ที่อุปกรณ์จะแลกเปลี่ยนแพ็กเก็ตได้ ช่วงเวลาที่สั้นลงจะช่วยเพิ่มการตอบสนองแต่จะเผาผลาญพลังงาน ช่วงเวลาที่นานขึ้นจะทำให้ผู้ควบคุมมีโอกาสพักระหว่างเหตุการณ์มากขึ้น หากกรณีการใช้งานของคุณอนุญาต ให้เลือกช่วงเวลาการเชื่อมต่อที่สูงขึ้นและค่าเวลาแฝงของอุปกรณ์ต่อพ่วงเมื่อเริ่มต้นการเชื่อมต่อ
// Example: Requesting a higher connection interval in GATT
bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER);
ภายใต้ประทุน สิ่งนี้จะบอกให้คอนโทรลเลอร์ Bluetooth เพิ่มช่วงเวลาการสูดดมให้ยาวขึ้น เพื่อให้ปลายทั้งสองข้างของลิงค์ใช้เวลาในโหมดพลังงานต่ำมากขึ้น ผลลัพธ์ที่ได้คืออายุการใช้งานแบตเตอรี่ที่ยาวนานขึ้นโดยแทบไม่มีผลกระทบต่อประสบการณ์ของผู้ใช้ในการอัปเดตในเบื้องหลังหรือการอ่านเซ็นเซอร์
ในระดับระบบ วิศวกรปรับแต่งพฤติกรรมของแพลตฟอร์มสามารถปรับพารามิเตอร์ใน Power HAL และการกำหนดค่าเคอร์เนลได้ 65รหัส> ไดเร็กทอรีประกอบด้วยการปรับแต่งสำหรับการเก็บรักษา CPU และเกณฑ์การปลุกคอนโทรลเลอร์ เครื่องมือเช่น perfetto, systrace และ btsnooz.py สามารถมองเห็นเหตุการณ์พลังงานของ Bluetooth ได้ ซึ่งช่วยตรวจสอบได้ว่าวงจรการนอนหลับเกิดขึ้นตามที่คาดไว้
ตัวอย่างเช่น การติดตามที่แสดงการปลุกระบบต่อวินาทีมากเกินไปอาจมีลักษณะดังนี้:
bluetooth_host_state: SUSPENDED → ACTIVE
reason: controller wake (LL control packet)
interval: 150 ms
หากคุณเห็นการปลุกหลายครั้งในช่วงเวลาสั้นๆ อาจบ่งบอกถึงช่วงเวลาการเชื่อมต่อที่ลุกลามมากเกินไปหรือการแจ้งเตือน GATT อย่างต่อเนื่องจากอุปกรณ์ต่อพ่วง การปรับพารามิเตอร์เหล่านั้นสามารถลดช่วงเวลาการปลุกลงไปเป็นวินาทีแทนที่จะเป็นมิลลิวินาที ซึ่งช่วยปรับปรุงประสิทธิภาพการใช้พลังงานได้อย่างมาก
กฎข้อที่สามและอาจสำคัญที่สุดคือ รู้ว่าเมื่อใดควรปล่อยวาง . เมื่อแอปของคุณใช้งาน Bluetooth เสร็จสิ้น ให้ปิดการเชื่อมต่อ GATT หยุดการสแกน และปล่อยการอ้างอิงเสมอ นักพัฒนาหลายคนลืมขั้นตอนนี้ โดยปล่อยให้การเชื่อมต่อแบบโกสต์หรือการสแกนทำงานอย่างเงียบๆ ในพื้นหลัง แต่ละคนก็เหมือนกับการเปิดหน้าต่างทิ้งไว้ในฤดูหนาว:เครื่องทำความร้อนทำงานหนักขึ้น และอายุการใช้งานแบตเตอรี่ก็ยาวนานขึ้น
สุดท้ายนี้ โปรดจำไว้ว่าไม่ใช่ทุกกิจกรรม Bluetooth ที่สมควรได้รับการปลุกจากโฮสต์ ตัวควบคุมสมัยใหม่สามารถจัดการการรีเฟรชการเข้ารหัส การหมดเวลาการควบคุมดูแล และการกรองโฆษณาได้ด้วยตัวเองทั้งหมด เชื่อถือฮาร์ดแวร์ Low Power Island และ Bluetooth Stack ของ Android ได้รับการออกแบบมาเพื่อมอบหมายอย่างชาญฉลาด ยิ่งแอปของคุณถูกรบกวนน้อยลง การเต้นรำก็จะยิ่งราบรื่นขึ้น
การเพิ่มประสิทธิภาพสำหรับ Low Power Island ไม่ได้เกี่ยวกับการปิดใช้งานคุณลักษณะต่างๆ มันเกี่ยวกับการสร้างความสามัคคีระหว่างเลเยอร์ เฟรมเวิร์ก เคอร์เนล และเฟิร์มแวร์คอนโทรลเลอร์ของ Android สื่อสารกันเหมือนนักดนตรีผู้ช่ำชองในวงออเคสตราแล้ว รหัสของคุณเป็นอีกเครื่องมือหนึ่งในชุดนั้น เล่นเบาๆ เว้นห้องให้เงียบ และปล่อยให้ระบบที่เหลือได้หายใจ
เมื่อคุณทำถูกต้อง ผู้ใช้ของคุณจะไม่มีวันสังเกตเห็นสิ่งใดเลย หูฟังจะเชื่อมต่อใหม่ทันที ตัวติดตามฟิตเนสจะซิงค์อย่างเงียบๆ และโทรศัพท์จะใช้งานได้เพิ่มอีกสองสามชั่วโมงในแต่ละวัน เบื้องหลัง จังหวะการนอนหลับและตื่นอันเงียบสงบยังคงดำเนินต่อไป ขับเคลื่อนโดยความสมดุลอันงดงามที่ Low Power Island นำมาสู่ Android Bluetooth
บทสรุป:อัจฉริยะอันเงียบสงบในโทรศัพท์ของคุณ
หากโทรศัพท์ของคุณเป็นนักดนตรี Low Power Island จะเป็นเครื่องเมตรอนอมแบบเงียบ ช่วยรักษาเวลา รักษาจังหวะ และทำให้แน่ใจว่าทำนองเพลงจะไม่ข้ามจังหวะ ไม่ต้องการความสนใจหรือโอ้อวดเกี่ยวกับงานของตน มันมีอยู่อยู่เบื้องหลัง ช่วยประหยัดพลังงานในแบบที่คนส่วนใหญ่ไม่เคยรู้มาก่อน
ตลอดการเดินทางครั้งนี้ เราได้เห็นว่า Low Power Island ทำหน้าที่เป็นจุดบรรจบระหว่างฮาร์ดแวร์และซอฟต์แวร์ โดยที่ความเงียบกลายเป็นกลยุทธ์ เราเริ่มต้นด้วยแนวคิดที่ว่า CPU ของคุณก็เหมือนกับเพื่อนที่กระสับกระส่าย ต้องการพื้นที่สำหรับหายใจ จากนั้นเราเห็นว่า Bluetooth ซึ่งเป็นวิทยุที่เข้าสังคมมากที่สุดในบรรดาวิทยุทั้งหมด เรียนรู้ที่จะกระซิบแทนที่จะตะโกนเมื่อส่วนที่เหลือของระบบเข้าสู่โหมดสลีป เมื่อรวมกันแล้วจะก่อให้เกิดกลไกที่ละเอียดอ่อนและทรงพลังที่สุดอย่างหนึ่งในการออกแบบของ Android
ตัวควบคุมบลูทูธกลายเป็นยามราตรีของเมืองซิลิคอน ในขณะที่แกน CPU ขนาดใหญ่นอนหลับสนิทหลังประตูปิด ตัวควบคุมจะลาดตระเวนอย่างเงียบ ๆ ทำให้การเชื่อมต่อคงอยู่ ฟังสัญญาณ และส่งเสียงกริ่งเฉพาะเมื่อมีบางสิ่งที่สำคัญจริงๆ เกิดขึ้นเท่านั้น เป็นความร่วมมือเล็กๆ น้อยๆ แต่สำคัญที่ทำให้อุปกรณ์ Android สมัยใหม่มีความสง่างาม
เบื้องหลัง Power HAL จะเจรจานโยบาย เคอร์เนลบังคับใช้นโยบาย และเฟิร์มแวร์ดำเนินการนโยบายเหล่านั้นด้วยความแม่นยำในการผ่าตัด พวกเขาเคลื่อนไหวเหมือนวงออเคสตรา บางครั้งก็มีชีวิตชีวา บางครั้งก็เงียบ แต่มีความกลมกลืนกันอยู่เสมอ และเมื่อโทรศัพท์ของคุณตื่นขึ้นมาทันทีเพื่อเล่นเพลง รับสาย หรือเชื่อมต่อหูฟังเอียร์บัดใหม่ ความราบรื่นนั้นก็ไม่ใช่โชคลาภ Low Power Island ทำหน้าที่ตามที่มันถูกสร้างขึ้นมาเพื่อ:ทำให้การจัดการพลังงานรู้สึกว่าไม่มีใครมองเห็น
สำหรับนักพัฒนา การทำความเข้าใจระบบนี้ไม่ใช่แค่การฝึกความอยากรู้อยากเห็นเท่านั้น เป็นการเตือนใจว่าการเพิ่มประสิทธิภาพที่แท้จริงไม่ได้มาจากการใช้กำลังดุร้ายหรือโค้ดที่เร็วกว่าเสมอไป บางครั้งมันมาจากความยับยั้งชั่งใจ จากการรู้ว่าเมื่อใดควรปล่อยวาง เมื่อใดควรพัก และเมื่อใดควรปล่อยให้ระบบทำเวทมนตร์อันเงียบสงบ การตัดสินใจเล็กๆ น้อยๆ แต่ละครั้ง การสแกนเป็นชุด การปรับช่วงเวลาการเชื่อมต่อ การคำนึงถึงขอบเขตการนอนหลับ ล้วนมีส่วนทำให้เกิดเรื่องราวแห่งความสมดุลที่ยิ่งใหญ่ขึ้น
ครั้งถัดไปที่โทรศัพท์ของคุณใช้งานสตรีมมิ่ง Bluetooth การนำทาง และการแจ้งเตือนตลอดทั้งวันโดยไม่สะดุด ใช้เวลาสักครู่เพื่อชื่นชมสิ่งที่เกิดขึ้นใต้หน้าจอกระจกนั้น ภายในเมืองแห่งทรานซิสเตอร์หลับใหลแต่ตื่นตัว สงบแต่ตื่นตัว ทำงานร่วมกันในการประสานกันอย่างลงตัว Low Power Island ไม่ใช่แค่กลอุบายทางวิศวกรรมเท่านั้น เป็นปรัชญา:แม้แต่ในโลกของเครื่องจักร ความสงบและความอดทนก็สามารถมีพลังมากกว่าการเคลื่อนไหวอย่างต่อเนื่อง
และถ้าคุณลองคิดดู นั่นเป็นบทเรียนที่คุ้มค่าสำหรับทั้งโทรศัพท์และมนุษย์
เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น