9 obserwujących
33 notki
41k odsłon
  199   0

Sprzęt i soft, który żyją własnym życiem (m.in. o wewnętrznych bateriach i energii)

Czy maszyny już na dobre przejęły panowanie nad światem?

Ostatnio miałem następującą sytuację – sprzęt, którego używam, tak mocno się pogubił, że nie dało się go nawet wyłączyć (teoretycznie sprawę powinno załatwić naciskanie wyłącznika przez kilkanaście sekund, tu jednak nie zadziałało). Urządzenie miało baterię, a w baterii ok. 30% energii, co oznaczało, że na jego wyłączenie musiałbym czekać pewnie z 10h (do tego poczułem wyraźne nagrzewanie się całości, która zaczęła wręcz parzyć).

I co w tej sytuacji? Producenci wielu urządzeń używają własnych śrubek. Moim szczęściem w nieszczęściu było to, że akurat byłem w pobliżu odpowiedniego śrubokręta i mogłem go użyć. A gdybym nie był przezorny i nie miał właściwego narzędzia? A gdybym był w podróży, gdzie wszystko rusza się i trzęsie? (i nie ma co marzyć o spokojnym rozkręceniu i poskładaniu delikatnej elektroniki)

Baterie „niewymienne” stały się standardem w telefonach czy laptopach. Niektórzy producenci potrafią jakoś odnaleźć się w tej sytuacji (odpowiednia kombinacja klawiszy zawsze mi działała chociażby w Samsungach i iPhonach), inni implementują małą dziurkę do chwilowego odpięcia baterii (jeżeli dobrze rozumiem, tak jest w Acerze Swift 1), a jeszcze inni… nie potrafią znaleźć rozwiązania do poważnego problemu, który sami stworzyli.

Pójdźmy dalej. Ponad pół roku temu sam widziałem iPhona, który sam sobie wciskał punkty na ekranie. Powiedziałbym, że to było raczej traumatyczne przeżycie – wyglądało to jakby ktoś się tam włamał.

Ostatnio miałem też inny dylemat. Pod Linuxem wykonałem sobie ostatnio

sudo lspci -vvv

Ta komenda w przypadku laptopa, który ostatnio testuję, pokazała maksymalne zużycie energii odpowiednio 375mA (dla czytnika kart microSD), 55mA (dla karty dźwiękowej) i 3x375mA (dla kontrolerów USB / Thunderbolt). Według uzyskanych tam informacji wszystkie wymienione urządzenia działały w trybie D0 (który jest najmniej energooszczędny), co oznaczało, że prawdopodobnie marnują cenne mA (tutaj chwila dygresji - standard PCI Express definiuje tryby D0-D3, a im większa cyferka, tym głębszy stan uśpienia).

Uzbrojony w tę wiedzę postanowiłem, że tytułem rozrywki intelektualnej popróbuję, czy w ogóle mogę coś zyskać zmieniając stany wymienionych urządzeń na D3. Zacząłem od specyfikacji „PCI Bus Power Management Interface Specification” (niestety za darmo można pobrać sobie wyłącznie Revision 1.1 ze strony Intela). Tam mogłem sobie doczytać o tym, że istnieje coś takiego jak 16 bitów Power Management Power/Status, a zmieniając ich wartości na pozycjach 0 i 1 mogę kontrolować stan.

Dalej poszło już łatwo – po wyłączeniu sterownika urządzenia (rmmod) wystarczyło spojrzeć na adres sekcji Power Management urządzenia, dodać 4 (Power/Status znajduje się w offsecie 4 względem początku sekcji), sprawdzić wpisane tam dane,  dodać do nich 3 i wysłać do urządzenia.

Szach mat!

Przekładając z polskiego na nasze:

Jeżeli lspci dla urządzenia o adresie 34:00.0 pokazywało

„Capabilities: [40] Power Management version”

to do liczby uzyskanej przez komendę

sudo setpci -s 34:0.0 0x44.W

należało dodać 3 i wydać komendę

sudo setpci -s 34:0.0 0x44.W=3

(gdzie 3 to oczywiście liczba uzyskana wcześniej po dodaniu magicznej trójki)

Poniżej gotowy skrypt, który sobie przygotowałem dla wspomnianego laptopa:

sudo systemctl stop tccd
# czytnik kart
sudo rmmod rtsx_pci_sdmmc
sudo rmmod rtsx_pci
sudo setpci -s 34:0.0 0x44.W
sudo setpci -s 34:0.0 0x44.W=3
sudo setpci -s 34:0.0 0x44.W
# karta wifi
sudo rmmod iwlmvm
sudo rmmod iwlwifi
sudo setpci -s 00:14.3 0xcc.W
sudo setpci -s 00:14.3 0xcc.W=B
sudo setpci -s 00:14.3 0xcc.W
# Thunderbolt
sudo rmmod thunderbolt
sudo setpci -s 00:0d.2 0x84.W
sudo setpci -s 00:0d.2 0x84.W=B
sudo setpci -s 00:0d.2 0x84.W
# USB
sudo rmmod xhci_pci
sudo setpci -s 00:14.0 0x74.W
sudo setpci -s 00:14.0 0x74.W=B
sudo setpci -s 00:14.0 0x74.W
sudo setpci -s 00:0d.0 0x74.W
sudo setpci -s 00:0d.0 0x74.W=B
sudo setpci -s 00:0d.0 0x74.W
# Intel ME
#1. add blocklist mei_me into
#/etc/modprobe.d/blacklist-ath_pci.conf
#2. sudo update-initramfs -u
#3. reboot
sudo setpci -s 00:16.0 0x54.W
sudo setpci -s 00:16.0 0x54.W=B
sudo setpci -s 00:16.0 0x54.W
#sudo lspci -vvv

I co się okazało?

  1. zmienić stany można było, ale tylko wtedy, gdy wyłączony jest Secure Boot (patrz mój poprzedni wpis na jego temat).
  2. w przypadku sterownika mei_me nie wystarczyło użyć rmmod
  3. laptop bez zmian pokazuje nawet do 34h, z moimi "zmianami" do 28h
  4. przypomniałem sobie o komendzie powertop, a ta pokazała, że usługa ttcd z Tuxedo Control Center też swoje zabiera

Powiedziałbym, że to rewolucja nieudana (fakt, że mogłem coś pominąć, ewentualnie zrobić źle)… ale dająca kilka lekcji z użytym Hyperbookiem L14:

  1. do rozważenia jest to, czy powinienem włączać usługę ttcd z Tuxedo Control Center
  2. nie trzeba się bawić z rejestrami PCI jak w starszych sprzętach, gdyż obecnie mamy tryby L1.2 i inne cuda wianki
  3. Linux potrafi być dosyć energooszczędny nawet na nowoczesnym sprzęcie i nie ma co mu zbytnio pomagać
  4. sprzęt Intela jest jednak nieźle rozpracowany przez firmy trzecie, i chociaż go często nie polecam, to dalej widoczne jest jedno - Ryzeny to cudeńka, ale tam problemem jest uświadczenie lapka ze wszystkim bajerkami, na którym można działać > 30h (na pewno nikt nie oferuje baterii 73Wh przy oszczędnym ekranie na 14 calach, do tego moje doświadczenia z płytami stacjonarnymi mówią, że AMD ciągle jest mocno na dorobku)

Pójdźmy jeszcze dalej – przez lata bardzo popularne w Windows były wszystkie czyściciele rejestru i narzędzia do optymalizacji systemu. Sam korzystałem z różnych takich programów, ale… do czasu. Czy ktoś rozsądny jeszcze się z nimi bawi? I czy nie jest tak, że coraz mniej orientujemy się, co się tam dzieje? Że mamy tam coraz mniej opcji konfiguracyjnych?

Lubię to! Skomentuj1 Napisz notkę Zgłoś nadużycie

Więcej na ten temat

Komentarze

Inne tematy w dziale Technologie