Nếu điện thoại của bạn là một con người, có lẽ đó sẽ là người bạn có thành tích quá cao và không thể ngồi yên. Kiểu người khăng khăng rằng họ đang thư giãn trong khi bí mật làm việc vặt, trả lời tin nhắn và kiểm tra thời tiết cùng một lúc.
Bên trong thiết bị Android của bạn, điều gì đó tương tự đang diễn ra mọi lúc. Một giây trước, bộ xử lý sẽ truyền phát danh sách phát của bạn qua Bluetooth, giây tiếp theo nó sẽ xử lý thông báo, theo dõi vị trí của bạn hoặc đồng bộ hóa dữ liệu ở chế độ nền. Bằng cách nào đó, nó quản lý được tất cả những điều này mà không làm rách quần jean của bạn hoặc cầu xin bộ sạc trước bữa trưa.
Bí mật đằng sau sức chịu đựng siêu phàm này nằm ở một khu bảo tồn nhỏ bên trong silicon được gọi là Đảo Năng lượng Thấp, thường được viết tắt là LPI. Hãy coi nó như một góc thiền cho bộ xử lý của bạn. Khi không có việc gì khẩn cấp phải làm, các bộ phận của con chip sẽ lặng lẽ rút vào không gian này để nghỉ ngơi, trong khi một số thành phần thiết yếu vẫn hoạt động để theo dõi thế giới.
Hãy tưởng tượng CPU của bạn như một quán cà phê đông đúc. Các nhân viên pha chế chính là những người có năng suất cao, làm việc khắp nơi để chuẩn bị đồ uống espresso ưa thích cho các ứng dụng đòi hỏi khắt khe như trò chơi hoặc trình chỉnh sửa video. Các lõi hiệu suất nhỏ hơn xử lý các lệnh nhẹ hơn như thông báo hoặc tác vụ nền. Bây giờ hãy hình dung một chiếc máy pha cà phê nhỏ giọt lẻ loi kêu vo vo trong góc sau giờ đóng cửa. Nó giữ cho những thứ cần thiết hoạt động mà không sử dụng nhiều năng lượng. Cỗ máy khiêm tốn đó chính là Đảo năng lượng thấp của bạn.
Khi Android nhận ra rằng không có ai chạm vào màn hình, không có hoạt động tính toán nặng nào đang diễn ra và không có khóa đánh thức quan trọng nào được kích hoạt, nó sẽ cho phép thiết bị chìm vào giấc ngủ nửa vời nhẹ nhàng này. Hệ thống không hoàn toàn vô thức vì ai đó vẫn cần nghe báo động, hoạt động mạng hoặc gói Bluetooth. Nó giống như một con mèo đang ngủ trưa với một bên tai co giật để tìm âm thanh.
Thiết kế này cho phép các thiết bị hiện đại tiết kiệm năng lượng trong khi vẫn phản hồi nhanh. Trong các hệ thống cũ hơn, đi ngủ có nghĩa là tắt mọi thứ và sau đó thức dậy một cách đau đớn vì một sự kiện duy nhất. Điều đó giống như việc quán cà phê tắt điện mỗi khi không có khách, rồi đợi máy khởi động khi có đơn hàng tiếp theo. Đảo năng lượng thấp tránh sự lãng phí đó bằng cách chỉ giữ lại những thứ thiết yếu.
Vì vậy, lần tới khi điện thoại của bạn sáng lên ngay lập tức sau nhiều giờ nằm yên, hãy nhớ rằng sâu bên trong bộ xử lý của bạn, một vài bóng bán dẫn yên tĩnh đang canh giữ các cổng. Họ không hoàn toàn tỉnh táo hoặc hoàn toàn ngủ quên mà đang trôi nổi bình yên ở giữa. Đó chính là Đảo năng lượng thấp, người hùng tiềm ẩn về độ bền pin của Android.
Trong bài viết này, chúng ta sẽ vén bức màn về người anh hùng đó. Bạn sẽ thấy LPI hoạt động như thế nào, không chỉ là một ngóc ngách buồn ngủ cho CPU mà còn là một chiến lược quản lý năng lượng hoàn chỉnh được lồng ghép vào kiến trúc của Android. Chúng ta cũng sẽ khám phá cách Bluetooth tiếp tục trò chuyện lặng lẽ bên trong hòn đảo mà không đánh thức các lõi lớn, cách Power HAL và kernel điều phối mỗi chu kỳ ngủ và thức cũng như cách phần sụn đóng vai trò là người bảo vệ ban đêm không mệt mỏi.
Bạn sẽ nhận được các đoạn mã AOSP thực, nhật ký kernel thực và lời khuyên thiết thực về cách viết mã Bluetooth hợp tác với hòn đảo thay vì lao vào ầm ĩ.
Cuối cùng, bạn sẽ hiểu lý do tại sao điện thoại của bạn có tuổi thọ cao như vậy và cách góc silicon ẩn này giúp mọi thứ hoạt động với độ chính xác bình tĩnh.
Mục lục
-
Đảo năng lượng thấp (LPI) trong Android Bluetooth là gì?
-
Dàn nhạc im lặng:Cách LPI hoạt động với Power HAL &Kernel
-
Gỡ lỗi và xác minh Đảo năng lượng thấp trong Bluetooth
-
Dạy Bluetooth để ngủ trưa thông minh hơn
-
Kết luận:Thiên tài thầm lặng bên trong điện thoại của bạn
Bluetooth là một con bướm xã hội. Ngay cả khi màn hình tối, nó vẫn tiếp tục thì thầm với tai nghe, đồng hồ thông minh hoặc dàn âm thanh trên ô tô của bạn, trao đổi các gói dữ liệu khiến cuộc sống trở nên liền mạch. Vấn đề là cuộc trò chuyện liên tục sẽ tiêu tốn năng lượng. Đánh thức toàn bộ điện thoại vài giây một lần chỉ để gửi một vài byte cũng giống như bật đèn pha của sân vận động để tìm chìa khóa của bạn.
Đây là nơi Đảo Quyền lực Thấp lại trở thành anh hùng. Bên trong điện thoại Android hiện đại, giao tiếp Bluetooth được xử lý bởi bộ điều khiển Bluetooth chuyên dụng , một bộ vi xử lý nhỏ trong cùng hệ thống trên chip với CPU chính. Bộ điều khiển này có bộ nhớ riêng và miền năng lượng riêng. Nó có thể hoạt động một phần trong khi các lõi CPU lớn nghỉ ngơi, duy trì kết nối và xử lý lưu lượng vô tuyến mà hầu như không cần sự trợ giúp từ bộ xử lý chính.
Khi Trình quản lý nguồn của Android quyết định hệ thống có thể ngủ hay không, nó sẽ gửi tín hiệu qua Bluetooth HAL và trình điều khiển của nhà cung cấp để cho bộ điều khiển biết rằng phía máy chủ đang chuyển sang trạng thái năng lượng thấp. Sau đó, bộ điều khiển sẽ tự mình thực hiện các tác vụ nhẹ, chẳng hạn như duy trì kết nối, lên lịch cho các khoảng thời gian đánh hơi và xử lý các thao tác bắt tay mã hóa. Kết quả là mang lại trải nghiệm liền mạch trong đó tai nghe của bạn vẫn được ghép nối và phản hồi nhanh trong khi phần còn lại của điện thoại lặng lẽ tiết kiệm pin.
Một cái nhìn đơn giản bên trong dịch vụ Bluetooth của AOSP cho thấy sự hợp tác này đang hoạt động:
// 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);
}
Các hàm này đại diện cho một phần nhỏ của cuộc trò chuyện lớn hơn nhiều giữa Android và bộ điều khiển. Ngăn xếp máy chủ lặng lẽ tạm dừng trong khi bộ điều khiển tiếp tục theo dõi. Trên nhiều nền tảng của nhà cung cấp chip, trạng thái này được gọi là Chế độ ngủ của bộ điều khiển hoặc Chế độ báo lại . Bộ điều khiển Bluetooth chỉ có thể đánh thức máy chủ khi có điều gì đó có ý nghĩa xảy ra, chẳng hạn như có cuộc gọi đến hoặc nhấn nút từ tai nghe của bạn.
Nó hoạt động giống như một nhân viên bảo vệ ban đêm tuần tra một tòa nhà sau khi mọi người đã về nhà. Đèn tắt, không khí tĩnh lặng, nhưng có người luôn cảnh giác. Nếu có chuyện gì xảy ra, người bảo vệ sẽ rung chuông và những người còn lại sẽ thức dậy. Đó là cách Bluetooth trên điện thoại của bạn tiếp tục hoạt động ngay cả khi màn hình tối và các lõi CPU đang nằm bên trong Đảo năng lượng thấp.
Sự cộng tác giữa phần cứng, chương trình cơ sở và tính năng quản lý năng lượng của Android giúp bạn có thể nghe nhạc, nhận thông báo trên đồng hồ thông minh hoặc tiếp tục phát lại ngay lập tức mà không làm hao pin. Đó là hiệu quả thầm lặng ở mức tốt nhất, sự cân bằng giữa nhận thức và nghỉ ngơi tạo nên vẻ đẹp của thiết kế Android hiện đại.
Dàn nhạc im lặng:Đảo năng lượng thấp hoạt động như thế nào với Android Power HAL và hạt nhân
Nếu bạn có thể nhìn lén dưới lớp vỏ của Android khi điện thoại đang ở chế độ ngủ, bạn sẽ thấy thứ gì đó trông rất giống một dàn nhạc được định thời gian hoàn hảo. Mọi nhạc cụ đều biết khi nào nên chơi nhẹ nhàng, khi nào nên nghỉ và khi nào nên chơi lại mà không bị lỡ nhịp.
Đảo Quyền lực Thấp không phải là nghệ sĩ biểu diễn solo trong chương trình này. Nó giống phần nhịp điệu nhẹ nhàng hơn, được điều phối bởi một bộ dây dẫn vô hình sống bên trong Power HAL , hạt nhân , và chương trình cơ sở .
Hãy bắt đầu với Power HAL hoặc Lớp trừu tượng phần cứng. Trong Android, Power HAL đóng vai trò là người trung gian giữa khung hệ thống và trình điều khiển hạt nhân cấp thấp. Bất cứ khi nào Android quyết định có thể giảm mức tiêu thụ điện năng, nó sẽ thông báo quyết định này thông qua giao diện HAL. Power HAL trao đổi với bộ phận triển khai của nhà cung cấp chipset để quyết định phần nào của phần cứng có thể chuyển sang chế độ ngủ an toàn. Nó không chỉ điều khiển các cụm CPU mà còn cả GPU, đường dẫn hiển thị và các bộ điều khiển ngoại vi như Bluetooth và Wi-Fi.
Nói một cách đơn giản, trình quản lý năng lượng của Android sẽ nói những điều như "Này HAL, hiện tại chúng tôi đang rảnh, chúng ta có thể chợp mắt một chút được không?" Sau đó, Power HAL sẽ kiểm tra kernel và phần cứng để xem ai có đủ khả năng để ngủ. Nếu bộ điều khiển Bluetooth xác nhận rằng nó có thể tự mình xử lý giao tiếp đang diễn ra thì Power HAL sẽ báo hiệu cho kernel bắt đầu tắt các bộ phận của bộ xử lý chính.
hạt nhân đến lượt mình, quản lý quá trình chuyển đổi này thông qua các miền quyền lực của mình và kiểm soát đồng hồ hệ thống. Mỗi khối phần cứng trong chip thuộc về một miền năng lượng cụ thể. Nhân biết miền nào có thể tắt hoàn toàn và miền nào phải hoạt động một phần.
Bộ điều khiển Bluetooth thường thuộc miền hỗ trợ chế độ lưu giữ , nghĩa là một số bộ nhớ và logic của nó chỉ được cấp nguồn vừa đủ để duy trì trạng thái.
Một quy trình thông thường trông giống như thế này bên trong nhật ký kernel khi thiết bị bắt đầu chuyển sang chế độ 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
Trong phần trao đổi ngắn này, bạn có thể thấy cách trình quản lý năng lượng của Android điều phối toàn bộ quá trình đánh thức giấc ngủ. Trình điều khiển Bluetooth báo cáo rằng nó đang chuyển sang chế độ ngủ của bộ điều khiển, hạt nhân xác nhận rằng tất cả các thiết bị đã bị treo và sau đó đánh thức mọi thứ khi xảy ra gián đoạn.
Ở cấp độ phần cứng, hành vi này phụ thuộc vào đảo điện áp và miền đồng hồ được xác định bởi nhà sản xuất SoC. Thuật ngữ “hòn đảo” ở đây không mang tính ẩn dụ – nó đại diện theo nghĩa đen cho một vùng cách ly về điện trên chip có thể được cấp nguồn độc lập. Khi hạt nhân đặt CPU chính ở chế độ ngủ, nguồn điện của hòn đảo đó sẽ bị giảm hoặc tắt, trong khi một hòn đảo khác chứa bộ điều khiển Bluetooth tiếp tục hoạt động bằng một bộ dao động độc lập nhỏ.
Trong khi đó, chương trình cơ sở chạy trên bộ điều khiển Bluetooth thực hiện công việc dọn dẹp nhẹ nhàng. Nó quản lý các sự kiện đã lên lịch như khoảng thời gian kết nối, chuyển tiếp tốc độ phụ và thời gian chờ giám sát liên kết. Nó thậm chí có thể giải mã hoặc mã hóa lại các gói mà không làm phiền bộ xử lý máy chủ. Điều này cho phép Android duy trì kết nối Bluetooth trực tiếp trong khi tiêu thụ một phần năng lượng mà nó thường sử dụng.
Khi xảy ra một sự kiện đòi hỏi sự chú ý ở mức độ cao hơn, chẳng hạn như người dùng nhấn nút trên tai nghe, bộ điều khiển sẽ phát ra tín hiệu đánh thức máy chủ qua UART hoặc vận chuyển bộ nhớ dùng chung. Hạt nhân nhận được ngắt này, khôi phục đồng hồ CPU và tiếp tục trình quản lý nguồn của Android. Ngăn xếp máy chủ sẽ kích hoạt lại, xử lý sự kiện và sau đó điều khiển lại một cách khéo léo sau khi nó ở trạng thái rảnh trở lại.
Sự chuyển đổi giữa Power HAL, kernel và firmware này nghe có vẻ phức tạp nhưng nó là một trong những thiết kế tao nhã nhất bên trong Android. Mỗi lớp đóng vai trò chính xác của nó. Power HAL đàm phán các chính sách, kernel thực thi chúng và phần sụn lặng lẽ thực thi chúng trong nền. Cùng nhau, chúng đảm bảo rằng điện thoại của bạn sẽ luôn hoạt động ngay lập tức ngay cả sau nhiều giờ nghỉ ngơi.
Lần tiếp theo khi tai nghe của bạn kết nối lại ngay lập tức sau khi điện thoại của bạn đã nằm yên trong túi, hãy biết rằng toàn bộ chuỗi phần mềm và silicon đã phối hợp hoàn hảo để biến điều đó thành hiện thực. Đảo Năng lượng Thấp không chỉ tiết kiệm năng lượng – nó còn chỉ huy một dàn nhạc im lặng dưới tầm tay bạn.
Gỡ lỗi và xác minh Đảo năng lượng thấp trong Bluetooth
Nếu bạn đã từng quan sát một con mèo đang ngủ co giật tai và tự hỏi liệu nó có đang mơ hay không thì đó gần như giống với quá trình gỡ lỗi Đảo Nguồn điện Thấp trên Android. Thiết bị có thể trông tĩnh lặng, nhưng sâu bên trong nhật ký, những gợn sóng nhỏ của sự sống hiện lên cứ sau vài giây. Các kỹ sư thích sự hỗn loạn yên tĩnh này vì nó cho họ biết hệ thống đang cân bằng hoàn hảo giữa nghỉ ngơi và sẵn sàng.
Khi Bluetooth bước vào giai đoạn năng lượng thấp, Android sẽ để lại một loạt manh mối. Bạn có thể thấy chúng trong cả hai logcat và dmesg hạt nhân đầu ra. Những nhật ký này giúp xác nhận xem bộ điều khiển Bluetooth có thực sự đang chuyển sang trạng thái năng lượng thấp hay không trong khi CPU chủ quay về trạng thái yên tĩnh.
Một cách đơn giản để xem qua quá trình này là chạy:
adb logcat -b all | grep -i "btif_pm"
Bạn có thể thấy điều gì đó như thế này:
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
Mỗi dòng kể một phần câu chuyện. Thông báo đầu tiên xác nhận rằng ngăn xếp Bluetooth của Android đã yêu cầu chuyển sang trạng thái năng lượng thấp. Thông báo thứ hai cho thấy các luồng phía máy chủ đã tạm dừng và thông báo cuối cùng cho thấy bộ điều khiển đã đánh thức lại máy chủ.
Để xem điều gì đang xảy ra bên dưới, bạn có thể kiểm tra nhật ký kernel:
adb shell dmesg | grep -i bluetooth
Bạn có thể tìm thấy các mục như:
[ 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
Những dòng này xác nhận rằng trình điều khiển Bluetooth và hệ thống quản lý nguồn đang hợp tác chính xác. Bộ điều khiển chuyển sang chế độ ngủ, hạt nhân tạm dừng các cụm CPU và mọi thứ sẽ hoạt động trở lại khi có tín hiệu đánh thức từ bộ điều khiển Bluetooth.
Nếu bạn thấy máy chủ thức dậy quá thường xuyên, điều đó thường có nghĩa là một số thành phần không tuân theo ranh giới giấc ngủ. Thủ phạm phổ biến bao gồm khóa chế độ thức hoạt động sai, ứng dụng ồn ào yêu cầu quét liên tục hoặc bộ hẹn giờ không bao giờ hết hạn. Trong những trường hợp như vậy, PowerStats HAL của Android và Số liệu thống kê pin khuôn khổ có thể giúp theo dõi ai đang ngăn cản giấc ngủ sâu.
Bạn có thể kiểm tra số liệu thống kê tổng thể về năng lượng thấp bằng cách sử dụng:
adb shell dumpsys batterystats | grep "bluetooth"
Điều này cho biết hệ thống con Bluetooth duy trì hoạt động trong bao lâu so với thời gian hệ thống ở chế độ năng lượng thấp. Lý tưởng nhất là các con số sẽ cho thấy rằng Bluetooth hầu như không hoạt động ngoại trừ những khoảng thời gian hoạt động ngắn.
Các kỹ sư làm việc với hệ thống thường sử dụng các công cụ theo dõi chuyên dụng như systrace , ftrace , hoặc perfetto để hình dung sự chuyển đổi quyền lực. Dấu vết nguồn hiển thị nhịp điệu:một đường phẳng dài tượng trưng cho giấc ngủ, bị gián đoạn bởi các hoạt động tăng vọt khi bộ điều khiển đánh thức máy chủ để tham gia một sự kiện có ý nghĩa. Nếu mức tăng đột biến đó quá thường xuyên thì bạn biết rằng hệ thống đang hoạt động không hiệu quả tại Đảo Nguồn điện thấp.
Đây là một đoạn trích từ đoạn trích Perfetto điển hình:
bluetooth_host_state: IDLE → SUSPENDED
bluetooth_controller_state: ACTIVE → SLEEP
kernel_cpu_cluster_0: ACTIVE → RETENTION
kernel_cpu_cluster_1: ACTIVE → POWER_OFF
Trình tự đơn giản này kể một câu chuyện mạnh mẽ. Ngăn xếp máy chủ bị treo, bộ điều khiển ở chế độ ngủ và các cụm CPU tắt nguồn một cách duyên dáng. Khi sự kiện tiếp theo xảy ra, quá trình chuyển đổi sẽ đảo ngược và thiết bị sẽ hoạt động gần như ngay lập tức.
Đằng sau hậu trường, phần sụn của nhà cung cấp đóng một vai trò quan trọng trong việc khiến phép thuật này trở nên dễ dàng. Phần sụn của bộ điều khiển Bluetooth duy trì các khe thời gian, khoảng thời gian đánh hơi và khóa mã hóa lớp liên kết, tất cả trong khi chạy với nguồn điện vài miliwatt. Nó có hiệu quả đáng kinh ngạc. Bộ điều khiển thông thường có thể duy trì kết nối ACL đang hoạt động với mức tiêu thụ điện năng dưới một miliwatt, ngay cả khi các lõi CPU chính đã tắt nguồn hoàn toàn.
Việc gỡ lỗi hệ thống này có cảm giác hơi giống việc xem chim. Bạn phải kiên nhẫn, im lặng và quan sát. Hầu hết thời gian, không có gì kịch tính xảy ra trong nhật ký. Nhưng cuối cùng khi bạn đạt được chu kỳ ngủ-thức hoàn hảo, bạn sẽ có cảm giác như đang chứng kiến thiên nhiên hòa hợp. Đó là vẻ đẹp của Đảo năng lượng thấp của Android khi hoạt động với Bluetooth.
Vì vậy, khi tai nghe của bạn kết nối lại sau nửa giây hoặc đồng hồ thông minh của bạn đồng bộ hóa dữ liệu một cách im lặng trong khi điện thoại của bạn nằm trên bàn, hãy nhớ đến dàn nhạc yên tĩnh đằng sau hậu trường này. Đó không phải là sức mạnh mạnh mẽ mà là khả năng quản lý năng lượng thông minh giúp trải nghiệm trở nên mượt mà. Đảo năng lượng thấp là người thợ vô hình mang đến cho Android Bluetooth của bạn độ chính xác ổn định, tiết kiệm pin mỗi lần một gói buồn ngủ.
Dạy Bluetooth để ngủ trưa thông minh hơn
Nếu Đảo năng lượng thấp là nơi tập yoga cho bộ xử lý của bạn thì công việc của bạn với tư cách là nhà phát triển sẽ là đảm bảo mã Bluetooth của bạn không hiển thị cùng với bộ trống. Bạn rất dễ vô tình giữ cho hệ thống luôn hoạt động khi không cần thiết. Một lần khóa chế độ thức bất cẩn, bộ hẹn giờ định kỳ hoặc yêu cầu quét không ngừng có thể ngăn phần cứng chuyển sang trạng thái yên tĩnh và tiết kiệm điện.
Mục tiêu tối ưu hóa cho Low Power Island không phải là làm cho logic Bluetooth của bạn hoạt động kém hơn. Đó là làm cho nó hoạt động một cách khôn ngoan , để cho bộ điều khiển xử lý các trao đổi nền nhỏ trong khi CPU chính ở chế độ ngủ yên. Trình điều khiển của nhà cung cấp và ngăn xếp Bluetooth của Android đã xử lý hầu hết các công việc nặng nhọc nhưng các nhà phát triển có thể tạo ra sự khác biệt lớn bằng cách viết mã tiết kiệm năng lượng và tôn trọng các ranh giới đó.
Quy tắc đầu tiên rất đơn giản:quét có trách nhiệm . Quét liên tục là nhân vật phản diện số một trong cấu hình nguồn Bluetooth. Mỗi lần quét sẽ đánh thức radio, bộ điều khiển và thường là bộ xử lý máy chủ. Nếu ứng dụng của bạn liên tục gọi BluetoothLeScanner.startScan() nếu không có điều kiện dừng rõ ràng, cứ sau vài giây bạn sẽ chiếu đèn pin vào Đảo Nguồn điện Thấp một cách hiệu quả.
Thay vào đó, hãy quét hàng loạt và sử dụng các bộ lọc. ScanSettings.SCAN_MODE_LOW_POWER của hệ thống chế độ được thiết kế đặc biệt để cho phép quét phối hợp với quá trình chuyển đổi LPI.
Sau đây là ví dụ từ AOSP cho thấy cách bạn có thể kích hoạt quá trình quét theo cách tiết kiệm điện năng:
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
.setReportDelay(5000) // batch results every 5 seconds
.build();
bluetoothLeScanner.startScan(filters, settings, scanCallback);
Bằng cách gộp các kết quả và để phần cứng xử lý việc quét nội bộ, bạn giảm đáng kể số lần đánh thức máy chủ. Bộ điều khiển Bluetooth có thể tự thu thập quảng cáo, chỉ đánh thức CPU vài giây một lần để cung cấp kết quả.
Quy tắc thứ hai là để ngăn xếp ngủ . Nhiều nhà phát triển vô tình chặn các luồng Bluetooth bằng cách giữ khóa đánh thức hoặc chạy các lệnh gọi lại không cần thiết. Ngăn xếp Bluetooth của Android duy trì đồng bộ hóa nội bộ thông qua các vòng lặp tin nhắn có thể tạm dừng một cách an toàn trong thời gian rảnh.
Tránh các hoạt động kéo dài trong lệnh gọi lại, chẳng hạn như BluetoothGattCallback.onCharacteristicChanged() . Thay vào đó, hãy giảm tải công việc cho những người thực thi nền tôn trọng chính sách Ngủ trưa và Chờ ứng dụng của Android.
Một cách tối ưu hóa khác nằm ở việc sử dụng khoảng thời gian kết nối và độ trễ một cách khôn ngoan . Kết nối BLE cho phép bạn định cấu hình tần suất các thiết bị trao đổi gói. Khoảng thời gian ngắn hơn sẽ cải thiện khả năng phản hồi nhưng lại đốt cháy năng lượng. Khoảng thời gian dài hơn mang lại nhiều cơ hội hơn cho người điều khiển nghỉ ngơi giữa các sự kiện. Nếu trường hợp sử dụng của bạn cho phép, hãy chọn khoảng thời gian kết nối cao hơn và giá trị độ trễ ngoại vi khi khởi tạo kết nối.
// Example: Requesting a higher connection interval in GATT
bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER);
Dưới mui xe, điều này yêu cầu bộ điều khiển Bluetooth kéo dài khoảng thời gian đánh hơi, cho phép cả hai đầu của liên kết dành nhiều thời gian hơn ở chế độ năng lượng thấp. Kết quả là thời lượng pin dài hơn mà hầu như không có tác động rõ rệt đến trải nghiệm người dùng khi cập nhật trong nền hoặc đọc cảm biến.
Ở cấp độ hệ thống, các kỹ sư điều chỉnh hành vi của nền tảng cũng có thể điều chỉnh các tham số trong cấu hình Power HAL và kernel. /sys/power thư mục chứa các điều chỉnh để duy trì CPU và ngưỡng đánh thức bộ điều khiển. Các công cụ như perfetto, systrace và btsnooz.py có thể trực quan hóa các sự kiện nguồn Bluetooth, giúp xác minh rằng chu kỳ giấc ngủ đang diễn ra như mong đợi.
Ví dụ:dấu vết hiển thị quá nhiều lần đánh thức mỗi giây có thể trông như thế này:
bluetooth_host_state: SUSPENDED → ACTIVE
reason: controller wake (LL control packet)
interval: 150 ms
Nếu bạn thấy hàng chục lần đánh thức như vậy trong một thời gian ngắn, điều đó có thể cho thấy khoảng thời gian kết nối quá mạnh hoặc thông báo GATT liên tục từ thiết bị ngoại vi. Việc điều chỉnh các thông số đó có thể giảm khoảng thời gian đánh thức xuống còn vài giây thay vì mili giây, cải thiện đáng kể hiệu quả sử dụng năng lượng.
Quy tắc thứ ba và có lẽ là quan trọng nhất là biết khi nào nên buông bỏ . Khi ứng dụng của bạn kết thúc thao tác Bluetooth, hãy luôn đóng kết nối GATT, dừng quét và giải phóng các tham chiếu. Nhiều nhà phát triển quên bước này, để lại các kết nối ma hoặc quá trình quét chạy ngầm trong nền. Mỗi cách đều giống như việc để cửa sổ mở trong mùa đông:máy sưởi hoạt động mạnh hơn và tuổi thọ pin bị giảm.
Cuối cùng, hãy nhớ rằng không phải mọi sự kiện Bluetooth đều xứng đáng được người tổ chức đánh thức. Bộ điều khiển hiện đại có thể tự mình xử lý việc làm mới mã hóa, hết thời gian giám sát và lọc quảng cáo. Tin tưởng vào phần cứng. Đảo năng lượng thấp và ngăn xếp Bluetooth của Android được thiết kế để ủy quyền một cách thông minh. Ứng dụng của bạn càng ít can thiệp thì điệu nhảy càng trở nên mượt mà hơn.
Tối ưu hóa cho Đảo năng lượng thấp không phải là tắt các tính năng. Đó là về việc xây dựng sự hài hòa giữa các lớp. Khung, nhân và phần mềm điều khiển của Android đã giao tiếp với nhau như những nhạc sĩ dày dặn kinh nghiệm trong một dàn nhạc. Mã của bạn là một công cụ khác trong nhóm đó. Chơi nhẹ nhàng, chừa chỗ cho sự im lặng và để phần còn lại của hệ thống thở.
Khi bạn làm đúng, người dùng của bạn sẽ không bao giờ nhận thấy điều gì. Tai nghe của họ sẽ kết nối lại ngay lập tức, thiết bị theo dõi thể dục của họ sẽ đồng bộ hóa một cách lặng lẽ và điện thoại của họ sẽ hoạt động thêm vài giờ mỗi ngày. Đằng sau hậu trường, nhịp điệu ngủ và thức thanh thản vẫn tiếp tục, được hỗ trợ bởi sự cân bằng tinh tế mà Low Power Island mang đến cho Android Bluetooth.
Kết luận:Thiên tài thầm lặng bên trong điện thoại của bạn
Nếu điện thoại của bạn là một nhạc sĩ, Low Power Island sẽ là máy đếm nhịp im lặng, giữ thời gian, giữ nhịp và đảm bảo giai điệu không bao giờ bị lỡ nhịp. Nó không đòi hỏi sự chú ý hay khoe khoang về công việc của mình. Nó chỉ đơn giản tồn tại ở chế độ nền, tiết kiệm năng lượng theo cách mà hầu hết mọi người không bao giờ nhận ra.
Trong suốt hành trình này, chúng ta đã thấy Đảo Năng lượng Thấp đóng vai trò là điểm gặp gỡ giữa phần cứng và phần mềm, nơi sự im lặng trở thành chiến lược. Chúng tôi bắt đầu với ý tưởng rằng CPU của bạn, giống như một người bạn không ngừng nghỉ, cần một nơi để thở. Sau đó, chúng tôi thấy cách Bluetooth, loại radio mang tính xã hội nhất, học cách thì thầm thay vì hét lên khi phần còn lại của hệ thống chuyển sang chế độ ngủ. Cùng nhau, chúng tạo thành một trong những cơ chế tinh tế nhưng mạnh mẽ nhất trong thiết kế của Android.
Bộ điều khiển Bluetooth trở thành người bảo vệ ban đêm của thành phố silicon. Trong khi các lõi CPU lớn hoạt động bình thường sau các cánh cổng đóng kín thì bộ điều khiển sẽ tuần tra một cách lặng lẽ, duy trì kết nối, lắng nghe tín hiệu và chỉ rung chuông khi có điều gì đó thực sự quan trọng xảy ra. Đó là một hành động hợp tác nhỏ nhưng quan trọng mang lại vẻ sang trọng cho các thiết bị Android hiện đại.
Đằng sau hậu trường, Power HAL đàm phán các chính sách, hạt nhân thực thi chúng và phần sụn thực thi chúng với độ chính xác cao. Họ chuyển động như một dàn nhạc, lúc sôi động, lúc im lặng, nhưng luôn hòa hợp. Và khi điện thoại của bạn bật ngay lập tức để phát nhạc, nhận cuộc gọi hoặc kết nối lại tai nghe, thì sự mượt mà đó không phải là điều may mắn. Đảo Quyền lực Thấp đang thực hiện chính xác những gì nó được xây dựng:làm cho việc quản lý quyền lực trở nên vô hình.
Đối với các nhà phát triển, việc hiểu hệ thống này không chỉ là một sự tò mò. Đó là một lời nhắc nhở rằng tối ưu hóa thực sự không phải lúc nào cũng đến từ sức mạnh vũ phu hoặc mã nhanh hơn. Đôi khi nó đến từ sự kiềm chế, từ việc biết khi nào nên buông bỏ, khi nào nên nghỉ ngơi và khi nào nên để hệ thống thực hiện phép thuật thầm lặng của nó. Mỗi quyết định nhỏ, quét hàng loạt, điều chỉnh khoảng thời gian kết nối, tôn trọng ranh giới giấc ngủ đều góp phần tạo nên một câu chuyện cân bằng lớn hơn.
Lần tiếp theo khi điện thoại của bạn sử dụng tính năng phát trực tuyến, điều hướng và thông báo qua Bluetooth suốt cả ngày mà không hề nao núng, hãy dành một chút thời gian để đánh giá cao những gì đang diễn ra bên dưới màn hình kính đó. Bên trong, một thành phố của các bóng bán dẫn đang ngủ nhưng vẫn tỉnh táo, bình tĩnh nhưng tỉnh táo, phối hợp với nhau một cách đồng bộ hoàn hảo. Đảo năng lượng thấp không chỉ là một thủ thuật kỹ thuật. Đó là một triết lý:ngay cả trong thế giới máy móc, hòa bình và kiên nhẫn có thể mạnh mẽ hơn sự chuyển động liên tục.
Và nếu bạn nghĩ về điều đó, thì đó là một bài học đáng lưu giữ, cho cả điện thoại và con người.
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu