難題

我們的目標是要建立一台具有進階圖像效能的桌面系統(單一桌面橫跨兩個 1600x1200 的 DVI/LCD 顯示器),並提供以 Xen 虛擬機器測試新軟件/系統的可能性。我們的挑戰是要在主系統(Dom0)上運行 NVIDIA 驅動程式。在互聯網上搜尋解決方案時,三個主要問題浮現了出來:

  1. 文檔都非常陳舊(數年以上)。
  2. 文檔跳過某些步驟,令人難以跟隨。
  3. 文檔提供錯綜複雜的解決方案(例如:重新建立一個自訂的內核)。

多數人想要一個方便、好用的系統,而不想涉及多重開機等方案 —— 又或者一個不穩定的系統。在筆者的經驗中,NVIDIA 的(專利)驅動程式能恰當地支援這個圖像設置。不採用 NVIDIA 的驅動程式會帶來較低的效率,因此這個選擇並不可取。截至本文,NVIDIA 的驅動程式套件並不支援 Xen 內核。當你嘗試安裝該套件時,它會作出這個聲明並結束。

硬件

設置前的狀況

  1. 以 CentOS 5.4 x86_64 發行版本建立基本系統。
  2. 在安裝時選取 Virtualization 群組,好讓系統預設以 Xen 內核開機。

  3. 這篇文章不會涵蓋基本系統安裝或 Xen 虛擬機器的應用。
  4. 請確定你在 /boot 及 / 上預留了足夠空間給多套(最少四套)內核/內核開發工具。
  5. 我們建議你在另一台機器上的終端機/SSH 工作階段裡執行以下步驟 —— 這樣可簡化剪貼指令。
  6. 以下步驟都須要由 root 用戶執行。

炮製方法

採用所有更新:

yum -y update
yum clean all
reboot

移除過時的內核:

rpm -qa | grep kernel

只保留早新的 kernel-xenkernel-xen-devel(這是從系統裡移除舊版內核的範例):

rpm -e kernel-xen-2.6.18-164.el5 kernel-xen-devel-2.6.18-164.el5

如此,你便只會留下:

[root@localhost ~]# rpm -qa | grep kernel
kernel-xen-devel-2.6.18-164.9.1.el5
kernel-xen-2.6.18-164.9.1.el5
kernel-headers-2.6.18-164.9.1.el5

請安裝非 Xen 的 kernel 及 kernel-devel:

yum -y install kernel kernel-devel

因此,我們現在備有 Xen 及對應的非 Xen 內核:

[root@localhost ~]# rpm -qa | grep kernel
kernel-xen-devel-2.6.18-164.9.1.el5
kernel-devel-2.6.18-164.9.1.el5
kernel-2.6.18-164.9.1.el5
kernel-xen-2.6.18-164.9.1.el5
kernel-headers-2.6.18-164.9.1.el5

這個方法已經成功地應用在兩代 NVIDIA 驅動程式上:

由於我們現正運用 Xen 內核,讓我們先建立 NVIDIA 內核模塊:

[root@localhost ~]# uname -r
2.6.18-164.9.1.el5xen

請以最便捷的方法下載 NVIDIA-Linux-x86_64-190.53-pkg2.run 這個套件(來自 http://www.nvidia.com )。

將檔案移至 /tmp。

cd /tmp 
chmod +x NVIDIA-Linux-x86_64-190.53-pkg2.run
./NVIDIA-Linux-x86_64-190.53-pkg2.run --extract-only
cd NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv
IGNORE_XEN_PRESENCE=y make SYSSRC=/lib/modules/`uname -r`/build module

你會接到很多警告,但最終:

NVIDIA: left KBUILD.

現在讓我們將新的模塊安裝到 Xen 內核的函式庫內:

mkdir -p /lib/modules/`uname -r`/kernel/drivers/video/nvidia/
cp -i nvidia.ko /lib/modules/`uname -r`/kernel/drivers/video/nvidia/
depmod -a
modprobe nvidia

此刻,我們已經證實了 nvidia 這個模塊可以被載入運作中的 Xen 內核裡。NVIDIA 的其它軟件仍未被載入,因此程式(仍然)無法正常運作。

以下這個步驟是選擇性的,但它可防止系統投訴關於一個無法使用的 X 設置檔。這樣做會令系統開機時進入一個非圖像化、多用戶模式(當然,你亦可以採用你喜愛的文字編輯器來完成這一步):

sed -i 's/^id:5:/id:3:/' /etc/inittab

現在請重新啟動系統,但當你看見 Grub 的畫面時,請停止開機(按 <space>)並選取非 Xen 的內核。

reboot

開機完成後,我們應該在運用非 Xen 的內核:

[root@localhost ~]# uname -r
2.6.18-164.9.1.el5

好,讓我們循「正常途徑」設置 NVIDIA 軟件:

cd /tmp 
./NVIDIA-Linux-x86_64-190.53-pkg2.run
   <Accept the license>
   <Yes- Install NVIDIA's 32-bit compatibility OpenGL libraries>
   <Yes- automatically update your X configuration file>
   <OK- Successfully updated.>

此刻,我們在非 Xen 的環境下已經完整地安裝/設定了 NVIDIA 的軟件,而且我們已經建立了 NVIDIA 的 Xen 內核模塊並將它放置在 Xen 內核的函數庫路徑內。

讓我們孤注一擲(設定圖像介面自動啟動):

sed -i 's/^id:3:/id:5:/' /etc/inittab

令次開機時,請啟用 Xen 內核(應該依然是預設的)。

reboot

你應該在系統啟動時看見 NVIDIA 的啟動畫面。現在快捷地檢查驅動程式是否已被載入:

[root@localhost ~]# dmesg | grep -i nvidia
nvidia: module license 'NVIDIA' taints kernel.
NVRM: loading NVIDIA UNIX x86_64 Kernel Module  190.53  Wed Dec  9 15:29:46 PST 2009

……並且我們正在運用 Xen 內核:

[root@localhost ~]# uname -r
2.6.18-164.9.1.el5xen

快捷地檢查圖像的效率:

glxgears

(在這個硬件組合下,可期望每秒 15,000 格)

為了讓這個設置能運作,我們採用了一台 1280 x 1024 的 DVI 平面顯示器及一個簡單的設定檔。現在既然一切都安裝妥當,我們可以這樣來修改 X 的設定:

/usr/bin/nvidia-settings

每當一個新版的內核被安裝在系統內,以上的步驟必須被重覆。當你做過一、二次之後,整套步驟需時約 10 至 15 分鐘。

更新(2012 年 8 月 9 日): 轉移至不同硬件(採用 GeForce 9300 GE 圖像卡的 Dell Optiplex 780)。它須要較新的 NVIDIA 驅動程式套件:

NVIDIA-Linux-x86_64-275.09.07.run

程序改變了,但只是微調。原有的:

cd NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv

……目錄被改為:

cd NVIDIA-Linux-x86_64-275.09.07/kernel

此程序還未在 CentOS 6 上測試,但它適用於 CentOS 5.8(所有更新截至上述日期)。

評論/建議給本頁:CrisRhea

Translation of revision 7

zh-tw/HowTos/Xen/NvidiaWithXen (last edited 2012-08-17 01:24:46 by TimothyLee)