Późną wiosną zaktualizowałem wersję Ubuntu na laptopie do 11.04. I ... zaczęły się problemy. Pierwszym było okazyjne zamrażanie się desktopu na kilka sekund, w czasie których nie reagował na mysz ani na klawiaturę. Tu z grubsza pomógł powrót do Metacity (oznaczający pożegnanie z Unity - którego prawdę mówiąc mi nie brakuje - i z efektami Compiza - których brakuje mi dużo bardziej).
Drugim, bardziej powtarzalnym, był problem z programami odpalanymi pod Wine (w moim wypadku chodzi głównie o kilka programów szachowych z BabasChess na czele). Tu źle było niemal stale: programy działały bardzo wolno, na byle kliknięcie czy pociągnięcie myszą reagowały z opóźnieniami od pół sekundy do paru sekund i równie wolno się odmalowywały. Ponadto w trakcie ich działania (a raczej w trakcie ich wyświetlania na aktywnym desktopie) wiatrak wył a proces X.org zajmował 90-100% CPU.
Dzisiaj wreszcie udało mi się znaleźć rozwiązanie. Problem był
powodowany przez archaiczną wersję drivera Nvidii, która z jakichś
powodów została wybrana po upgrade. Jak poinformował program
nvidia-settings
, korzystałem z wersji 173.
Zmieniłem driver (przy pomocy programu jockey-gtk
, tj. Additional
Drivers z menu) na bieżący,
odczekałem niezbędne kilka minut, zrestartowałem komputer (akurat w tym wypadku, jednym z niewielu, jest to zdaje się naprawdę potrzebne, restart X nie wystarczy). I ... hurra. Programy wine działają znowu normalnie a CPU zachowuje się spokojnie:
W użyciu jest obecnie wersja 270 drivera Nvidii:
Dalsze testy (Compiz, Unity) mam dopiero w planach ale jestem dobrej myśli.
Dopisek: Gnome Shell (instalowany z PPA Gnome3), wcześniej nieużywalny (praktycznie nie reagował na mysz przy wyborze programów), obecnie działa sprawnie.
Zachowanie przy hibernacji
Jeszcze wzmianka o innej korekcie, robionej jeszcze przed powyższym. Nie wiem, czy nadal jest niezbędna, ale ... wolę zanotować, tym bardziej, że jest to też przykład jak coś zrobić w czasie hibernowania.
Odniosłem wrażenie, że sytuacja dodatkowo pogarsza się po odhibernowaniu komputera. Dokopałem się (tutaj) do porady sugerującej deaktywację hyperthreadingu (tj. wyłączenie dodatkowych rdzeni procesora) na czas hibernacji i mam wrażenie, że faktycznie poprawiła ona nieco sytuację.
Rzecz polegała na stworzeniu pliku
/etc/pm/sleep.d/20_core_i5_disable_cores
o treści:
#!/bin/sh # Disable hyper-threading processor cores on suspend and hibernate, re-enable them # on resume. Presumably helps for buggy nvidia behaviour. # save this file as /etc/pm/sleep.d/20_core_i5_disable_cores and make excutable # with chmod +x /etc/pm/sleep.d/20_core_i5_disable_cores case $1 in hibernate|suspend) echo 0 > /sys/devices/system/cpu/cpu1/online #echo 0 > /sys/devices/system/cpu/cpu3/online ;; thaw|resume) echo 1 > /sys/devices/system/cpu/cpu1/online #echo 1 > /sys/devices/system/cpu/cpu3/online ;; esac
i nadaniu mu bitu wykonywalności (chmod a+x /etc/pm/sleep.d/20_core_i5_disable_cores
).
Uwaga: w moim wypadku wyłączanie/włączanie dotyczyło tylko cpu1
, bo w laptopie
mam jeden dwurdzeniowy procesor. W innych maszynach może zachodzić potrzeba
wyłączania także innych wirtualnych procesorów (zasadniczo trzeba wyłączyć
wszystkie poza pierwszym rdzenie wszystkich procesorów, np. przy dwóch
dwurdzeniowych procesorach wyłączenia wymagają cpu1
i cpu3
). Informację
ile mamy procesorów i ile każdy ma rdzeni elegancko prezentuje program
lscpu
:
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 2 Thread(s) per core: 1 Core(s) per socket: 2 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 23 Stepping: 10 CPU MHz: 1200.000 L1d cache: 32K L1i cache: 32K L2 cache: 2048K
(chodzi tu o CPU socket(s)
i Core(s) per socket
).