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
Đăng nhận xét