niedziela, 27 stycznia 2013

Studium przypadku: Ubuntu 12.10 na Lenovo Z500

Notebooki Lenovo sprzedawane są często bez systemu. Jak sądzę, jest to ukłon w stronę nas - użytkowników Linuksa:) Chcę się tutaj podzielić spostrzeżeniami z instalacji Ubuntu 12.10 x86-64 na Lenovo ideapad Z500 z Core i7 i GeForce 645M.

Instalacji dokonałem z bootowalnego pendrive utworzonego przy użyciu UNetbootin. Była ona błyskawiczna dzięki USB 3.0 (wejście po lewej stronie).
Nieco gimnastyki wymagało ode mnie wystartowanie z USB. Musiałem najpierw włączyć notebooka, włożyć pendrive'a, zrestartować komputer Świętą Trójcą [Ctrl-Alt-Del], wcisnąć F2 by wejść do BIOS-u i ustawić kolejność startu.
Tylko w ten sposób Z500 widział pendrive'a i jednocześnie nie wieszał się na ekranie startowym.
EFI zostało wyłączone w BIOS-ie.


Zadziałało out-of-box:
  • ethernet,
  • Wi-Fi,
  • blutooth,
  • dźwięk i mikrofon,
  • grafika Intel (w tym akceleracja 3D),
  • wyjście HDMI i rozciąganie pulpitu (w tym na ekrany o różnych rozdzielczościach),
  • klawisze funkcyjne (w tym paski informacyjne podczas zmiany głośności),
  • touchpad wraz z przewijaniem (uwaga: jest przycisk blokady touchpada - myślałem, że brakuje obsługi gładzika, a on był tylko wyłączony),
  • zarządzanie energią, usypianie,
  • kamera internetowa (już podczas instalacji chce zrobić portret użytkownika:-),
  • czytnik kart pamięci.
Sprawiło problemy:
  • grafika Nvidia, czyli niesławny Optimus.
Optimus nie okazał się problemem łatwym do rozwiązania. Podobnie jak seria Y, Z500 ma bug w ACPI i wymaga dokonania nieeleganckiego hacka. Należy postępować wg instrukcji na stronie Ubuntu-Pomoc z drobną zmianą.

Niestety Z500 nie został uwzględniony w pliku acpi-handle-hack.c. Dokonuje się tam sprawdzenie czy system potrzebuje hacka. Poszedłem na skróty i zmodyfikowałem plik acpi-handle-hack.c tak by funkcja zawsze zwracała prawdę, bez odczytywania danych systemu:


/**
 * Returns true if the system needs an ACPI handle hack
 */
static bool __init need_acpi_handle_hack(void) {
    return true;
}


Gdyby nie układ Nvidii, to w pełni funkcjonalny komputer byłby dostępny po kilku minutach od rozpoczęcia instalacji. Można to skomentować tylko w jeden sposób...


Czynności dodatkowe

Warto było też zainstalować primusrun, który nie używa VirtualGL i jest wydajniejszy od optirun, standardowo dostarczanego z Bumblebee. Instrukcje instalacji można znaleźć tutaj.

Opis wykorzystania Bumblebee w przypadku Steama znajduje się na jego forum.
Dla wybranej gry w bibliotece należy wejść (prawy przycisk myszy) w Właściwości-Parametry startowe i wpisać:

primusrun %command%

ewentualnie:

optirun %command%

Odrobina dodatkowych informacji

Informacje udostępniane przez producenta są "oszczędne", a instrukcja obsługi to wręcz kompromitacja. Zawartość całej ulotki to: podłącz zasilacz, wciśnij przycisk zasilania, postępuj wg instrukcji na ekranie (uznaje, że notebook ma preinstalowany Windows 8).
Podzielę się odrobiną informacji o sprzęcie, z którego składa się Z500.

Informacje o wykrytych urządzeniach:
lspci
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation HM76 Express Chipset LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 0fd9 (rev a1)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 05)
03:00.0 Network controller: Intel Corporation Centrino Wireless-N 2230 (rev c4)


Informacje na temat procesora:  
cat /proc/cpuinfo
processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 58
model name    : Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
stepping    : 9
microcode    : 0x13
cpu MHz        : 1200.000
cache size    : 6144 KB
physical id    : 0
siblings    : 8
core id        : 0
cpu cores    : 4
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips    : 4390.12
clflush size    : 64
cache_alignment    : 64
address sizes    : 36 bits physical, 48 bits virtual

Intel chwali się produkcją w 22nm i "trójwymiarowymi tranzystorami" (cokolwiek to znaczy...). TDP to 35W, maksymalna częstotliwość pracy w trybie "Turbo" wynosi 3,2 GHz.
Układ graficzny Nvidia GeForce 645M należy do rodziny Kepler. W serii 6XX panuje całkowity burdel. 630M, czy 670M należą do starszych układów Fermi. 640M, 645M, 650M, 660M, 670MX to już Kepler, nieco mniej wydajny w GPGPU od Fermi, ale bardziej energooszczędny. Kepler jest IMO najbardziej udanym, z perspektywy użytkownika domowego, GPU Nvidii od czasów G80.

Temperatury podczas normalnej pracy:
sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +44.0°C  (crit = +127.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +45.0°C  (high = +87.0°C, crit = +105.0°C)
Core 0:         +44.0°C  (high = +87.0°C, crit = +105.0°C)
Core 1:         +39.0°C  (high = +87.0°C, crit = +105.0°C)
Core 2:         +37.0°C  (high = +87.0°C, crit = +105.0°C)
Core 3:         +46.0°C  (high = +87.0°C, crit = +105.0°C)

Pod obciążeniem: 
sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +72.0°C  (crit = +127.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +72.0°C  (high = +87.0°C, crit = +105.0°C)
Core 0:         +72.0°C  (high = +87.0°C, crit = +105.0°C)
Core 1:         +69.0°C  (high = +87.0°C, crit = +105.0°C)
Core 2:         +68.0°C  (high = +87.0°C, crit = +105.0°C)
Core 3:         +70.0°C  (high = +87.0°C, crit = +105.0°C)



Wyniki Heaven Benchmark v3.0 Basic:
FPS:
24.5
Scores:
618
Min FPS:
12.1
Max FPS:
49.5
Binary:
Linux 64bit GCC 4.4.5 Release Mar 7 2012
Operating system:
Linux 3.5.0-22-generic x86_64
CPU model:
Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
CPU flags:
2194MHz MMX SSE SSE2 SSE3 SSSE3 SSE41 SSE42 HTT
GPU model:
GeForce GT 645M/PCIe/SSE2 4.2.0 NVIDIA 304.64 256Mb
ds
Render:
opengl
Mode:
1366x768 fullscreen
Shaders:
high
Textures:
high
Filter:
trilinear
Anisotropy:
4x
Occlusion:
enabled
Refraction:
enabled
Volumetric:
enabled
Tessellation:
normal

Z jakiegoś powodu nie została wykryta prawidłowa ilość pamięci układu graficznego (powinno być 2 GiB). Ten błąd nie wystąpił ani w informacjach Steama ani w SS3:BFE.

Sam wynik w Unigine Heaven 3.0 nie odbiega w żadną stronę względem wyników uzyskiwanych pod Windows.

Alternatywa

Alternatywą jest sprzęt certyfikowany dla Ubuntu. Spotkanie w polskim sklepie certyfikowanego Della nie jest trudne.

Update: więcej z Nvidii

Warto wykonać jeszcze dwie czynności: zainstalować nowsze sterowniki Nvidii i wykorzystać optymalizacje wprowadzone w wersji 310.

W tej chwili w repozytorium xorg-edgers znajdują się sterowniki NVIDIA 313.18. Dodanie repozytorium i instalacja sterowników:

sudo add-apt-repository ppa:xorg-edgers/ppa 
sudo apt-get update
sudo apt-get install nvidia-313

Trzeba też dokonać edycji plików: /etc/bumblebee/bumblebee.conf i /usr/bin/primusrun i zrestartować komputer. Zmodyfikowane pliki:
Owocem słynnej współpracy na linii Valve-Nvidia są optymalizacje wątkowe mogące znacznie zwiększyć wydajność komputerów z procesorami wielordzeniowymi.

Dla wybranej gry w Steamie, w Właściwości-Parametry startowe, należy wpisać:

LD_PRELOAD="libpthread.so.0 libGL.so.1" __GL_THREADED_OPTIMIZATIONS=1 primusrun %command%

Poniżej znajdują się dwa zrzuty ekranu z SS3, bez i z optymalizacją.


W lewym, dolnym rogu znajduje się wykres obciążenia rdzeni. __GL_THREADED_OPTIMIZATIONS=1 pozwala rozłożyć obciążenie niemal równomiernie. Subiektywna różnica wydajności jest jeszcze wyższa niż wynikająca z zrzutów ekranu (ust.: procesor - wysokie, grafika - średnie, pamięć karty graf. - ultra), bo przestają zdarzać się chwilowe "przycięcia".

Update 2: więcej informacji o i7 

/proc/cpuinfo nie dostarcza pełnych informacji na temat procesorów Intela. Nie jest widoczne rzeczywiste taktowanie procesora w trybie turbo. Tu z pomocą przychodzi projekt i7z - konsolowy lub graficzny monitor stanu procesora.


czwartek, 10 stycznia 2013

Otwarte gry gwiazdami filmu promocyjnego Microsoftu

Dział rozwoju firmy Microsoft zaprezentował IllumiRoom, czyli zestaw do wyświetlania obrazu z gry poza obszarem monitora/telewizora. Na ścianach, meblach, czymkolwiek. Potrzebny jest tylko Kinect (jakoś trzeba zmapować  kształt otoczenia) i projektor.
Jedna rzecz zwraca uwagę w filmie promocyjnym:

Widzimy tam dwie gry Open Source: Red Eclipse i SuperTuxKart. Zdziwieni? Czemu nie Halo (ok, podobno gdzieś jest na filmiku, ale nie potrafię rozpoznać, bo nie grałem, a gościa w kasku enduro nie widać:-) czy Flight Simulator? Szczególnie, że RE i STK to gry pracujące pod OpenGL, a na wsparcie tego w Microsofcie (a szczególnie na Xboksie) nie ma przyzwolenia. Dział rozwoju widocznie działa pragmatycznie, a nie zgodnie z linią partii pfuu... firmy. Cieszy mnie to, że Wolne Oprogramowanie, w tym gry, znalazły nowe zastosowanie.

PS Kto nie czytał niech czyta: wywiad The Verge z Gabem Newellem.
PPS Zacząłem się zastanawiać dlaczego piszę o takich głupotach, skoro w Internecie można znaleźć znacznie bardziej ciekawe informacje. I obejrzeć znacznie ciekawsze filmy. Chyba syndrom "blogaska o technologii" mnie sięgnął.