Chuyển đến nội dung chính

Sự thật về Kernel và Tuổi thọ pin



Khi nói về kernel của Android, một số lượng không nhỏ các chủ đề thảo luận là về tuổi thọ pin. Đã có nhiều quan điểm về mối quan hệ giữa kernel và tuổi thọ pin. Phần lớn cho rằng chính kernel là thủ phạm chính ảnh hưởng đến tuổi thọ pin. Số còn lại lại chắc chắn khẳng định sử dụng kernel thì tuổi thọ pin cũng chẳng có gì thay đổi. Sự thật lại nằm ở giữa.
Trước khi chúng ta tìm hiểu sự thật của vấn đề, Tôi cần làm rõ một số điều sau:
Thứ nhất, kernel không làm hao pin. Người dùng nhiều lần cài kernel sau đó phản ánh là kernel đã gây hao pin rất nhiều (và có thể có ảnh hưởng nào đó khiến dẫn tới quan điểm kernel là thứ vứt đi và các nhà phát triển đã bỏ công vô ích). Để minh chứng, họ chụp ảnh màn hình từ ứng dụng theo dõi pin thể hiện kernel là nguồn gây hao pin chủ yếu. Điều này rất sai lầm. Trên thiết bị Android, kernel chỉ cung cấp cơ chể đánh thức điện thoại, gọi là wakelock. Các tiến trình chạy trên thiết bị (vd: ứng dụng và dịch vụ) có thể yêu cầu kernel cơ chế wakelock và kernel sẽ cho phép điều này. Do đó, về mặt kỹ thuật thì kernel giữ điện thoại thức nhưng chỉ khi ứng dụng hoặc dịch vụ có yêu cầu. Nếu có thì các các ứng dụng và dịch vụ có vấn đề và là nguyên nhân gây hao pin chứ không phải là kernel.
Nhưng cũng không thể nói là kernel không gây hao pin. Nó hoạt động và sử dụng bộ nhớ nhưng lượng bộ nhớ được chiếm dụng cực kì thấp so với ứng dụng và dịch vụ hệ thống Android. Cũng có một số trường hợp phần cứng đặc thù như tính năng sweep2wake trên Nexus 5 yêu cầu tấm màn LCD luôn phải cấp nguồn mới có thể hoạt động. Điều này khiến pin hao hơn nếu thiết bị ở chế độ chờ bình thường nhưng vẫn không gây hao pin quá nhiều. Trên Nexus 5, sweep2wake chỉ làm tụt ở mức 2% mỗi giờ khi tắt màn hình. Không quá đáng kể nhưng ít hơn nhiều so với khi sử dụng điện thoại khi bật màn hình. Do vấn đề này, đã có tin đồn cho rằng sweep2wake và doubletap2wake là nguyên nhân gây hao pin. Chỉ trên Nexus 5 điều đó mới hoàn toàn đúng. Còn trên phần lớn thiết bị, việc hao pin do sweep2wake là không đáng kể, thường ở khoản 0 đến 0.5% mỗi giờ và sẽ không mất quá 5% trong một ngày sử dụng thiết bị. Một điều hoàn toàn có thể chấp nhận được để đổi lấy sự thuận tiện trong sử dụng.
Điều thứ hai tôi muốn làm rõ thuộc về việc đo lường. Chúng ta đo tuổi thọ pin bằng cách nào ? Tôi thì thích nhìn số % pin mỗi giờ. Nhiều ứng dụng theo dõi pin có thể cung cấp cho bạn các thống kê nhưng bạn phải chú ý và đặt điểm thời gian nếu muốn nhận ra các chỉ số và hiểu rõ việc sử dụng pin. Nếu bạn muốn đo và so sánh, hãy chắc chắn bạn thực hiện trong cùng một điều kiện. Và bạn phải thực hiện ở khoản thời gian hợp lí, có nghĩa là theo dõi qua các ngày chứ không phải qua các giờ. Nếu bạn có thói quen sử dụng các ứng dụng như nhau mỗi ngày, điều này rất tốt để thực hiện kiểm tra và so sánh. Việc theo dõi pin trong ứng dụng EX Kernel Manager tự động cung cấp hai chỉ số tôi sẽ nói đó là: hao pin khi máy ở trạng thái chờ (idle drain) và hao pin khi sử dụng (active drain).
Hao pin khi máy ở trạng thái chờ xảy ra khi màn hình tắt. Trong giai đoạn màn hình tắt, điện thoại hầu hết ở trong giai đoạn “ngủ sâu” (deep sleep). Đôi luc nó được đánh thức do một số tác vụ chạy nền như đồng bộ email hay kiểm tra các bản cập nhật. Điều này cũng như hệ thống, ứng dụng và dịch vụ yêu cầu kernel đánh thức khi thực hiện các tác vụ. Nếu tất cả hoạt động hoàn chỉnh, khi hoàn thành thiết bị lại quay về trạng thái “ngủ”. hao pin khi máy ở trạng thái nên được đo trong vài giờ để có thông số chính xác. Thời điểm rất tốt để đo là qua đêm khi bạn không sử dụng thiết bị (nếu bạn không phải là nhà phát triển và thực sự đi ngủ). Trên hầu hết thiết bị, hao pin khi máy ở trạng thái chờ nằm ở khoản 0.2% đến 0.8% một giờ nếu để thiết lập mặc định theo nhà sản xuất (vd: không bật chế độ tiết kiệm pin) sử dụng kết nối Wifi bình thường. Ở một số thiết bị, việc tối ưu kernel có thể sai lệch thông số một chút. Nhưng cũng chỉ rất là nhỏ, thường ở mức 0.1% đến 0.3% tối ưu hơn so với mặc định. Điều này không gây khác biệt lớn gì đến tuổi thọ pin. Như đã nêu ở trên, đôi lúc tính năng phần cứng như sweep2wake có thể gây hao pin cùng một khoản như nhau. Do đó như chúng ta thấy, kernel giúp cải thiện một chút lượng pin ở đây. Một tác nhân khác ảnh hưởng đến việc hao pin khi máy ở trạng thái chờ là các kết nối mạng của bạn, đặc biệt là kết nối mạng di động. Tín hiệu yếu thường gây hao pin. Nhưng nó không gây hao pin nhiều trong trạng thái chờ và sẽ rất khác biệt khi bạn sử dụng kết nối dữ liệu. Tôi nên bổ sung là nhiều biện pháp tiết kiệm pin cũng khiến xảy ra một ít khác biệt trong trường hợp này. Cứ hao pin khi máy ở trạng thái chờ dưới 1% mỗi giờ thì bạn đừng lo lắng gì cả. Nếu việc hao pin lớn hơn 1% mỗi giờ, hãy kiểm tra các ứng dụng và dịch vụ. Đôi lúc xảy ra việc hao pin do thiết bị nhận các gói cập nhật.
Hao pin khi sử dụng xảy ra khi màn hình bật. Đó là khi bạn sử dụng thiết bị. Hao pin khi sử dụng dễ nhiên là nhiều hơn so với hao pin khi máy ở trạng thái chờ. Khi điện thoại bật, màn hình bật và thực hiện các tác vụ sử dụng CPU, GPU, bộ nhớ, modem, wifi, bộ nhớ nandflash .v.v. hao pin khi sử dụng thì có khác biệt tùy theo thiết bị. Phần lớn chúng ta hay nghe về thuật ngữ “thời gian bật màn hình” (screen-on time). Hao pin khi sử dụng đo theo % mỗi giờ có thể dễ dàng được hiểu thông qua thời gian bật màn hình. Hao pin khi sử dụng mức 12.5% mỗi giờ là rất tốt và tương ứng với 8 giờ bật màn hình liên tục. Hao pin 25% mỗi giờ thì bạn sẽ có 4 giờ liên tục bật màn hình. Hãy xem nó được tính như thế nào ?
Thời gian bật màn hình (giờ) = 100/ hao pin khi sử dụng (% mỗi giờ)
Điều này không tính một lượng nhỏ pin được dùng khi tắt màn hình. Tiêu thụ pin trong chế độ chờ khoảng 0.6% mỗi giờ, bạn sẽ mất khoảng 6% trong 10 giờ đồng hồ hoặc khoảng 14% trong giai đoạn 24 giờ đồng hồ. Bạn có thể trừ từ mức 100 trong công thức ở trên.
Giờ chúng ta hãy quay lại với sự thật của vấn đề. Điều gì ảnh hưởng đến hao pin khi sử dụng ? Rất nhiều thứ. Kết nối mạng (đặc biệt là sóng di động) sẽ gây ra khác biệt. Sóng kém có nghĩa điện thoại sẽ tăng công suất để nhận và chuyển dữ liệu. Loại ứng dụng bạn đang sử dụng cũng sẽ gây ra sự khác biệt. Rõ ràng là chơi game nặng về đồ họa sẽ sử dụng nhiều pin hơn đọc email. Sử dụng camera, đặc biệt bật flash, sẽ hao pin nhiều hơn với gửi tin nhắn. Vấn đề là bạn đã làm gì với thiết bị thì nó cũng sẽ ảnh hưởng đến tuổi thọ pin. Ví dụ như thay đổi trình duyệt web cũng có thể ảnh hưởng đáng kể đến tuổi thọ pin, có thể là ảnh hưởng lớn hơn cả kernel và các tùy biến tiết kiệm pin được đăng đầy rẫy trên internet. Kết luận: hao pin khi sử dụng có khác nhau tùy theo người dùng cho dù trên cùng một thiết bị
Tuy nhiên có một phần của kernel có ảnh hưởng đến việc hao pin khi sử dụng và do đó có tác động đến thời gian bật màn hình. Đó là điều chỉnh CPU (CPU governor). Đây là lí do tại sao các nhà phát triển kernel lại mất nhiều thời gian cho việc tùy biến điều chỉnh CPU. Đó là về xung nhịp sử dụng, bạn có thể đo được qua ứng dụng CPU Times. CPU governor kiểm soát việc chia tỉ lệ xung nhịp sử dụng dựa theo việc vận hành hệ thống. Khi không có nhiều tác vụ, CPU sẽ ở tần số xung nhịp thấp nhất khi đó sử dụng ít năng lượng nhất. Khi có nhiều tác vụ, CPU sẽ điều chỉnh tần số xung nhịp để các tác vụ được hoàn thành nhanh hơn và người dùng có thể tận hưởng trải nghiệm mượt mà. Một cơ chế điều chỉnh CPU tốt là phải nhanh chóng phản hồi lại các thay đổi khi hệ thống được vận hành để hạn chế sự chậm trễ nhưng cũng nhanh chóng quay về tần số xung nhịp thấp nhất để tiết kiệm năng lượng.
Đã có một ý tưởng được gọi là “chạy đua đến trạng thái chờ” (race to idle) đó là cơ chế điều chỉnh CPU sẽ ngay lập tức đưa lên mức tần số xung nhịp cao nhất để nhanh chóng hoàn thành tác vụ và kết quả là CPU sẽ sớm được đưa về trạng thái năng lượng thấp nhất. Logic này nhìn chung nghe có vẻ hợp lí nhưng các vi xử lí hiện đại thì thời gian giữa việc sử dụng xung nhịp cao nhất so với một xung nhịp nào đó để hoàn thành tác vụ là không đáng kể. Có thể nói, nó chỉ có thể gây hao tổn năng lượng để đưa lên mức xung nhịp cao nhất trong khi mức xung nhịp thấp nhất có thể hoàn thành tác vụ trong cùng một thời gian và trở về trạng thái chờ. Xung nhịp cao nhất sẽ sử dụng nhiều năng lượng hơn xung nhịp vừa phải và cũng có thể là tiết kiệm thật nếu điều này lặp đi lặp lại hàng hàng ngàn hay hàng triệu lần mỗi ngày. Mẹo là tìm xung nhịp vừa đủ nhanh để tạo cảm giác vừa đủ mạnh đối với người dùng mà không cần đưa lên xung nhịp cao nhất. Tôi có thể viết một bài khác về cơ chế điều chỉnh CPU, nhưng giờ tôi vẫn để ngỏ. Có thể nói rằng cơ chế điều chỉnh CPU khác nhau sẽ vận hành khác nhau và có tính chất sử dụng pin khác nhau. Do đó, kernel thực sự không có tác động đến tuổi thọ pin.
Cũng có một góc độ khác của kernel cũng tác động đến tuổi thọ pin. Đầu tiên trong số đó là phân chia CPU (task scheduling) đặc biệt khi tác vụ được phân chua cho một hoặc nhiều hơn nhân CPU. Điều này có nghĩa CPU sẽ bị đánh thức để thực hiện tác vụ hoặc tác vụ được đóng gói vào cùng một nhân. Tác nhân khác là hotpluging. Khi bật hoặc tắt nhân CPU cũng gây tốn năng lượng. Trên nhiều thiết bị, bạn sẽ nghe về mpdecision, một dạng nhị phân gần như kernel source từ Qualcomm điều khiển hotplugging và thường kèm tính năng “touchboost” giành quyền kiểm soát CPU governor. Nhiều kernel đã vô hiệu hóa mpdecision và bổ sung hotplugging driver. Riêng thử nghiệm của tôi đã phát hiện ra mpdecision và touchboost không có tác động nhiều đến tuổi thọ pin và tôi bật tính năng này trong hầu hết các kernel do mình viết. Trong một số thiết bị như Nexus 6 và HTC One M9 thì không có hotplugging khi sử dụng bình thường. Tất cả nhân CPU đều được bật. Không thể nói là task scheduling, hotplugging và touchboost không có tác động đến tuổi thọ pin. Rõ ràng là có ảnh hưởng. Chỉ là không có khác biệt quá lớn. Nếu chúng ta nghĩ tác động của việc tối ưu này trong định nghĩa về hao pin khi sử dụng (% theo giờ), sự thay đổi sẽ rát nhỏ có thể ít hơn 1% mỗi giờ và được đo bằng phút thời gian bật màn hình cả ngày. Tôi nghĩ tác động của việc tối ưu sẽ rõ rãng hơn trên các thiết bị đời cũ có hiệu năng nguồn điện ít và sở hữu pin dung lượng thấp.
Tôi sẽ đề cập nhanh ngay một chủ đề cũng được thảo luận nhiều khi bàn về tuổi thọ pin: hạ điện áp (undervolting). Một lần nữa, hạ điện áp có thể tạo ra sự khác biệt trên các thiết bị đời cũ. Thiết bị ra mắt các năm ngoái hay hai năm trước sẽ có hiệu năng đáng kể hơn, một số còn có cả chế độ tự điều chỉnh và định mức điện áp. Tôi nhớ khi làm việc với các thiết bị sử dụng chipset msm8960 sử dụng cùng điện áp trên tất cả xung nhịp CPU. Trong trường hợp như vậy, hạ điện áp có thể hoàn toàn tọa sự khác biệt. Các thiết bị mới đây chạy với mức điện áp thấp hơn nhiều và các con chip có dung sai chặc chẽ hơn, để lại rất ít cơ hội để hạ điện áp và giảm tác động đến pin của việc hạ điện áp. Trên một số thiết bị tôi thường để hạ điện áp tự động nhưng chỉ với xung nhịp thấp nhất là xung nhịp hay thường được sử dụng.
Điều tôi cần nói trong bài viết này là, điểm chính là kernel có làm cho tuổi thọ pin khác biệt nhưng việc khác biệt không quá lớn nhưng mọi người nghĩ. Từ quan điểm kernel, CPU governer sẽ có tác động lớn nhất đến tuổi thọ pin. Người sử dụng ám ảnh nhiều thứ về việc không có thay đổi lớn đến tuối thọ pin. Cuối cùng, nếu bạn muốn đánh giá tuổi thọ pin, hãy sử dụng phương pháp tiếp cận khoa học. Sử dụng cùng một điều kiện khi tiến hành so sánh, đo đạc cẩn thận và phải trải qua thời gian.
Bài dịch từ: http://elementalx.org/the-truth-about-kernels-and-battery-life/ (tác giả: Flar2)

Nhận xét

Bài đăng phổ biến từ blog này

Làm sao để cân chỉnh lại pin trên thiết bị HTC

Đây là cách chính thức được Đội ngũ kĩ thuật HTC khuyến cáo thực hiện. Cuối cùng thì chúng ta cũng đã có cách khác so với cách cũ "huyền thoại" liên quan đến cân chỉnh lại pin bằng cách xóa file batterystats.bin tại /data/system, vì nó chẳng có tác dụng gì đối với tuổi thọ pin cả. Nếu bạn đang gặp vấn đề với tuổi thọ pin, ví dụ pin hay tụt nhanh hoặc bất thường (pin báo 18% nhưng bất ngờ khoảng 5 giây sau máy tự tắt) các dưới đây có thể giúp bạn khắc phục tình trạng này do nó xóa hoàn toàn các thống kê, chỉ số về pin và giúp sạc lại bình thường. Ít nhất thì cũng theo Đội ngũ kĩ thuật HTC nói như vậy    Quy trình đơn giản như sau: Chắc chắn là tùy chọn Fastboot được vô hiệu hóa trong phần Settings\Power Tắt máy Cắm dây sạc sử dụng sạc chuẩn HTC và để sạc khoảng hai phút hoặc lâu hơn Khi đang sạc, giữ nguyên volume-up + volume-down + power . Điện thoại sẽ bật và tắt liên tục mỗi 15 giây trong khi vẫn giữ ba nút trên. Giữ nguyên khoản...

First in Vietnam: Hạ cấp HTC 10 S-ON Android 8.0 Oreo xuống Android 7.0 thành công

XTC2Clip vô dụng với base 3.x của Android 8.0, giờ mà xài 25$ để s-off rồi hạ thì khách không chịu ! Đành quay tay vậy   .... Kết quả 2h vắt não   Android info   Bootloader sau khi hạ được thì mình tiến hành s-off lun