Version 10 (modified by jazz, 16 years ago) (diff) |
---|
2009-05-20
- [專案]
- 狀況:由於作業系統是在硬體 RAID 啟動狀態下安裝的,因此每當重開,系統又會回歸到原始狀態,故需要重新安裝。
- 安裝 pre-built lustre package - http://www.pdsi-scidac.org/repository/debian/
bio:~# echo "deb http://www.pdsi-scidac.org/repository/debian testing main" > /etc/apt/sources.list.d/lustre.list bio:~# apt-get update bio:~# apt-get install pdsi-scidac-keyring bio:~# apt-get install linux-image-2.6.22.19-lustre-686 lustre-modules-2.6.22.19-lustre-686 lustre-utils
- 安裝 firmware-bnx2
bio:~# apt-get install firmware-bnx2
- 解析 firmware-bnx2 安裝前與安裝後的 initrd.img 差異
bio:~$ mkdir -p temp temp2 bio:~$ cd temp bio:~/temp$ cat /boot/initrd.img-2.6.22.19-lustre-686.bak | gunzip | cpio -i 27903 block bio:~/temp$ cd ../temp2 bio:~/temp2$ cat /boot/initrd.img-2.6.22.19-lustre-686 | gunzip | cpio -i 28313 blockss bio:~/temp2$ cd .. bio:~$ diff -r temp temp2 只在 temp2/lib 存在:firmware 只在 temp2/lib/udev 存在:firmware.agent bio:~$ ls temp2/lib/firmware/ bnx2-06-4.0.5.fw bnx2-09-4.0.5.fw bio:~$ cat temp2/lib/udev/firmware.agent
#!/bin/sh -e # # firmware loader agent # cd /lib/udev/ . ./hotplug.functions if [ ! -e /sys/$DEVPATH/loading ]; then mesg "/sys/$DEVPATH/ does not exist" exit 1 fi for DIR in $FIRMWARE_DIRS; do [ -e "$DIR/$FIRMWARE" ] || continue echo 1 > /sys/$DEVPATH/loading cat "$DIR/$FIRMWARE" > /sys/$DEVPATH/data echo 0 > /sys/$DEVPATH/loading exit 0 done # the firmware was not found echo -1 > /sys/$DEVPATH/loading debug_mesg "Cannot find the $FIRMWARE firmware" exit 1
- 其中 firmware.agent 是屬於 udev 套件
bio:~$ dpkg -S firmware.agent udev: /lib/udev/firmware.agent
- 手工打造支援 firmware-bnx 的 initrd-pxe.2.6.22.19-lustre-686.img
- 首先要先瞭解 drblsrv-offline 所產生的 initrd-pxe.2.6.22.19-lustre-686.img 與系統產生的 initrd.img-2.6.22.19-lustre-686 有何差別
bio:~$ uname -a Linux bio 2.6.22.19-lustre-686 #2 SMP Tue Aug 26 00:01:59 UTC 2008 i686 GNU/Linux bio:~$ sudo /opt/drbl/sbin/drblsrv-offline -s `uname -r` bio:~$ mkdir -p temp temp2 bio:~$ cd temp bio:~/temp$ cat /boot/initrd.img-2.6.22.19-lustre-686 | gunzip | cpio -i bio:~/temp$ cd .. bio:~$ cd temp2/ bio:~/temp2$ cat /tftpboot/nbi_img/initrd-pxe.2.6.22.19-lustre-686.img | gunzip | sudo cpio -i
- 光是從 diff -r temp temp2 的結果來看,兩者的差異很大。而 firmware.agent 在系統產生的 initrd.img 中,是透過 udev 的 rules 被執行的。
bio:~/temp$ grep firmware.agent * -r --color etc/udev/rules.d/80-drivers.rules:SUBSYSTEM=="firmware", RUN+="firmware.agent"
- 從以上資訊,大致上可以猜出為什麼使用 DRBL 產生的 initrd-pxe.img 會無法取得 firmware,因為 bnx2 這個核心模組並不會自動去檔案系統裡去找 /lib/firmware 裡有沒有需要的檔案。而是透過 udev 去執行 firmware.agent 把 /lib/firmware 裡的檔案塞到 /sys/$DEVPATH/data 去。因此如果要讓 initrd-pxe.img 也支援這樣的機制,有兩種作法,第一種 initrd-pxe.img 全面改用 udev,第二種是自己補拷貝 /sys/$DEVPATH/data 那一段。
- 附帶值得一提的是我在 Debian Lenny 的 2.6.26-2-amd64 核心模組上看到 firmware-class 這個奇特的模組。看樣子 Linux 核心對於這些非公開的韌體處理方式目前仍處於混亂的局面。
jazz@hadoop:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 5.0.1 (lenny) Release: 5.0.1 Codename: lenny jazz@hadoop:~$ uname -a Linux hadoop 2.6.26-2-amd64 #1 SMP Fri Mar 27 04:02:59 UTC 2009 x86_64 GNU/Linux jazz@hadoop:~$ lsmod | grep bnx2 bnx2 63496 0 firmware_class 12544 1 bnx2 jazz@hadoop:~$ sudo modinfo firmware_class [sudo] password for jazz: filename: /lib/modules/2.6.26-2-amd64/kernel/drivers/base/firmware_class.ko license: GPL description: Multi purpose firmware loading support author: Manuel Estrada Sainz depends: vermagic: 2.6.26-2-amd64 SMP mod_unload modversions jazz@hadoop:~$ sudo modinfo bnx2 filename: /lib/modules/2.6.26-2-amd64/kernel/drivers/net/bnx2.ko firmware: bnx2-09-4.0.5.fw firmware: bnx2-06-4.0.5.fw version: 1.7.5 license: GPL description: Broadcom NetXtreme II BCM5706/5708 Driver author: Michael Chan <mchan@broadcom.com> srcversion: AA4F7411285F32C5C55775A alias: pci:v000014E4d0000163Asv*sd*bc*sc*i* alias: pci:v000014E4d00001639sv*sd*bc*sc*i* alias: pci:v000014E4d000016ACsv*sd*bc*sc*i* alias: pci:v000014E4d000016AAsv*sd*bc*sc*i* alias: pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i* alias: pci:v000014E4d0000164Csv*sd*bc*sc*i* alias: pci:v000014E4d0000164Asv*sd*bc*sc*i* alias: pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i* alias: pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i* depends: firmware_class vermagic: 2.6.26-2-amd64 SMP mod_unload modversions parm: disable_msi:Disable Message Signaled Interrupt (MSI) (int)
- 首先要先瞭解 drblsrv-offline 所產生的 initrd-pxe.2.6.22.19-lustre-686.img 與系統產生的 initrd.img-2.6.22.19-lustre-686 有何差別
- 測試 Lustre - 參考 3D 果蠅腦實驗叢集 Lustre 效能測試安裝紀錄(by rider/rock)
- 把 DRBL Server 當 MDT 與 MGS,並拿第二顆硬碟當 Metadata 存放的空間。
bio:~$ sudo mkfs.lustre --fsname=bio --mdt --mgs /dev/sdb1
- 把 DRBL Server 當 MDT 與 MGS,並拿第二顆硬碟當 Metadata 存放的空間。