воскресенье, 17 апреля 2011 г.

Первый опыт оптимизации ядра FreeBSD 8.2 RELEASE

Взял сегодня список добрых дел, читай todo-лист, в котором описано чего хочу сделать за год и увидел "Перейти на FreeBSD" и подзадачу "Научиться оптимизить, компилить, тестить и ставить новое ядро". Именно этим сегодня и занялся.

Итак, исходные данные:
  • VMWare workstation, созданная гостевуха на базе i386 архитектуры, с отключенным floppy, sound, COM1-портом;
  • Установленная FreeBSD 8.2 i386 RELEASE, без иксов;
Читая Майкла Лукаса про "Absolute FreeBSD"  2nd edition понял, что мне куда ближе следующий путь компиляции ядра:
  • Создание нового конфига ядра(# vi /sys/i386/conf/SYSDEVKERN );
  • Включение GENERIC( include GENERIC);
  • Дальнейшее отключение ненужных мне девайсов, процессоров и опций(nocpu, nodevice, nooptions);
Кто-то может возразить "Нафига так мудрить? Куда проще скопировать GENERIC в MYKERN и убрать оттуда не нужное". Но! У этого метода есть изъян:
В будущем GENERIC может включать в себя все более новые фичи. Вы будете вынуждены скопировать очередной раз и удалить не нужное повторно!
В моем же случае, это не обязательно будет делать. То чего нет, не отключится! А то что нужно так и останется быть включеным! Даже то чего я еще не знаю. )))

В результате родился такой вот конфиг:
include GENERIC

ident SYSDEVKERN

# VMware has Intel Core duo(I686_CPU class)
nocpu I486_CPU
nocpu I586_CPU


nooptions INET6


nodevice eisa
nodevice fdc

nodevice ataraid
nodevice atapifd

nodevice ahb
nodevice ahc
nodevice AHC_REG_PRETTY_PRINT
nodevice ahd
nodevice AHD_REG_PRETTY_PRINT
nodevice amd
nodevice hptiop
nodevice isp
nodevice ispfw
nodevice ncr
nodevice sym
nodevice trm
nodevice adv
nodevice adw
nodevice aha
nodevice aic
nodevice bt
nodevice ncv
nodevice nsp
nodevice stg

nodevice amr
nodevice arcmsr
nodevice asr
nodevice ciss
nodevice dpt
nodevice hptmv
nodevice hpttrr
nodevice iir
nodevice ips
nodevice mly
nodevice twy

nodevice aac
nodevice aacp
nodevice ida
nodevice mfi
nodevice mlx
nodevice pst
nodevice twe

nodevice de
nodevice igb
nodevice ixgb
nodevice le
nodevice ti
nodevice txp
nodevice vx

nodevice miibus
nodevice ae
nodevice age
nodevice alc
nodevice ale
nodevice bce
nodevice bfe
nodevice bge
nodevice dc
nodevice et
nodevice fxp
nodevice jme
nodevice lge
nodevice msk
nodevice nfe
nodevice nge
nodevice nve
nodevice pcn
nodevice re
nodevice rl
nodevice sf
nodevice sge
nodevice sis
nodevice sk
nodevice ste
nodevice stge
nodevice tl
nodevice tx
nodevice vge
nodevice vr
nodevice wb
nodevice xl

nodevice cs
nodevice ed
nodevice ex
nodevice ep
nodevice fe
nodevice ie
nodevice sn
nodevice xe

nodevice wlan
nooptions IEEE80211_DEBUG
nooptions IEEE80211_AMPDU_AGE
nooptions IEEE80211_SUPPORT_MESH
nodevice wlan_wep
nodevice wlan_ccmp
nodevice wlan_tkip
nodevice wlan_amrr
nodevice an
nodevice ath
nodevice ath_hal
nodevice AH_SUPPORT_AR5416
nodevice ath_rate_sample
nodevice ral
nodevice wi
nodevice wl

nodevice vlan

nodevice ukbd
nodevice ulpt
nodevice ums
nodevice urio
nodevice u3g
nodevice uark
nodevice ubsa
nodevice uftdi
nodevice uipaq
nodevice uplcom
nodevice uslcom
nodevice uvisor
nodevice uvscom

nodevice aue
nodevice axe
nodevice cdce
nodevice cue
nodevice kue
nodevice rue
nodevice udav

nodevice rum
nodevice uath
nodevice ural
nodevice zyd

options INCLUDE_CONFIG_FILE # Include this file in kernel 
Как видно я отрубил IPv6 и множество Wireless-устройств, RAID-контроллеров и USB-устройств, ну и исторические процы 486 и 586.

Ну а дальше я скомпилировал и одноразово загрузился с этого ядра:
# make KERNCONF=SYSDEVKERN INSTKERNNAME=kernel.sysdev
# nextboot -k /boot/kernel.sysdev 
Последняя команда патчит настроечные файлы так, чтобы загрузиться с этого ядра только один раз! Думаю это весьма полезно при удаленной отладке ядра. Ну а когда загрузился с ядра, то убедившись в работоспособности удалил старое и переименовал это в новое:
# rm -rf /boot/kernel
# mv /boot/kernel.sysdev /boot/kernel
Опирался в основном на результаты:
dmesg | grep -i <тут че-нить>
pciconf -lv
atacontrol -list
kldstat -v
Но как ни странно /sys/i386/conf/LINT мне ни в чем не помогло. Мне там нифига не понятно ))

Вывод: Новое ядро след. раз буду компилировать только если захочу новую фичу и она не появится без добавления этой опции в конфиг ядро с последующей перекомпиляцией. Ну а так, чего-то пока смысла не увидел!

ЗЫ:
  VMwar-ный файл жесткого диска, жутко разбух где-то около 3.12 ГБ и архивация по LZMA2 дает  вместо прежних 333МБ уже 477MБ. Так что виртуалка в коллекции вм-образов будет больше места занимать, что совсем не радует!

 

Комментариев нет: