8 нояб. 2012 г.

Ubuntu - Optimus < 0

Если бы не сегодняшнее горе, то я бы не написал этот блог пост. Проблема возникла в том, что после установки очередной порции обновлений, и, кажется, пакета linux-image-3.5.0.18 что-то там, я сломал свой линукс до неузнаваемости. Оказалось, что пропали драйвера от пакета nvidia-current, и в общем всё нахрен сломалось. Побаловавшись с тем, что вроде бы работало, я сломал свои иксы напрочь и даже чудом лишился файла xorg.conf.

Потерев все ppa, удалив все где упоминались слова типа nvidia и bumblebee, я вернул систему в божеский вид и запустил драйвера nouveau. Отлично, полёт нормальный, но мне захотелось вернуть свою CUDA назад. Что я для этого сделал? С ходу не отвечу, потому что подбирал много параметров, но я решился на установку сырых пакетов из ppa:xorg-edgers/ppa. Кстати, советую поставить заголовки нового ядра: обычные и generic. Думаю, пригодятся :)

Когда bumblebee установился, я понял, что моя Intel карта перестала работать, выдавая вот такую ошибку:

$ glxinfo
name of display: :0
Xlib: extension "NV-GLX" missing on display ":0".
X Error of failed request: BadAlloc (insufficient resources for operation)
  Major opcode of failed request: 153 (GLX)
  Minor opcode of failed request: 3 (X_GLXCreateContext)
  Serial number of failed request: 17
  Current serial number in output stream: 18

Единственная внятная статья по этому поводу мне не помогла. Но я решил на неё забить, потому что я хотел вернуть Optimus назад.

Проект bumblebee не заработал, потому что при запуске любого приложения выдавалась ошибка с "якобы" вот таким решением. Оказалось, что вроде бы драйвер nvidia не может быть найден. Если помните, то nvidia-current решило мне похожую проблему ранее. Но опять таки я не загружал нужный мне модуль, потому что горе-погроммисты переименовали его. И теперь, правильнее было бы подправить /etc/bumblebee/bumblebee.conf вот так:

...
Driver=nvidia
...
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia_current
Module=nvidia
...

Руки бы им за подчёркивание оторвать. На всякий случай, я также добавил nvidia модуль в /etc/modules:

...
nouveau # не знаю, но в блеклист я этот модуль не стал добавлять
nvidia_current

Ну и немного для истории, вот моя видео карта:

$ optirun ./deviceQuery 
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GT 540M"
  CUDA Driver Version / Runtime Version          5.0 / 5.0
  CUDA Capability Major/Minor version number:    2.1
  Total amount of global memory:                 2048 MBytes (2147155968 bytes)
  ( 2) Multiprocessors x ( 48) CUDA Cores/MP:    96 CUDA Cores
  GPU Clock rate:                                1344 MHz (1.34 GHz)
  Memory Clock rate:                             900 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 131072 bytes
  Max Texture Dimension Size (x,y,z)             1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
  Max Layered Texture Size (dim) x layers        1D=(16384) x 2048, 2D=(16384,16384) x 2048
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 32768
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024
  Maximum sizes of each dimension of a block:    1024 x 1024 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 65535
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 5.0, CUDA Runtime Version = 5.0, NumDevs = 1, Device0 = GeForce GT 540M


$ optirun ./bandwidthTest 
[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce GT 540M
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes) Bandwidth(MB/s)
   33554432   6269.0

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes) Bandwidth(MB/s)
   33554432   6277.8

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes) Bandwidth(MB/s)
   33554432   23688.5

1 комментарий:

Vest комментирует...

После обновления на 13.04, эта связка снова перестала работать. Как впрочем и всегда, после мажорных обновлений. Для того, чтобы вылечить всё, пришлось удалить старые ядра (на всякий случай), и nvidia-current. На их место, пришло nvidia-304.
Кстати, к слову, погуглите ещё насчёт BusID "PCI:01:00:0"