Jajko na szóstkę

Nowe jądro Linuksa przeszło już sporo szczegółowych testów, znaleziono w nim nawet i załatano kilka co ważniejszych “dziur”. Można zatem uznać, że stopniowo mija już okres wieku dziecięcego kernela 2.6, i rozważyć przeszczepienie swojemu Linuksowi świeżego “mózgu” – bo tym właśnie dla systemu operacyjnego jest jego jądro.

Zanim zabierzemy się za konfigurację i kompilację kernela, spróbujmy przyjrzeć się wprowadzonym w nim zmianom. Pozwoli nam to ocenić zyski, jakie wyniesiemy z przesiadki, oraz przewidzieć potencjalne problemy, które mogą się nam przydarzyć podczas uaktualniania systemu i uruchamiania oprogramowania w nowym środowisku.

Historia kernela

Kiedy w 1991 roku Linus Torvalds rozpoczął tworzenie jądra systemu operacyjnego, nikt chyba nie podejrzewał sukcesu, który ono osiągnie. Kernel w wersji 1.0, który ujrzał światło dzienne w 1994 roku, w niczym zresztą nie przypominał dzisiejszego Linuksa – pracował tylko na architekturze i386 i obsługiwał jeden procesor. Dopiero jądro 2.0 (1996 rok) otwarło darmowemu Uniksowi drogę do serwerowni – oprócz tego, że działało już na sporej liczbie architektur sprzętowych (proces ten zaczął się zresztą od kernela 1.2), to było podstawą systemów wieloprocesorowych. Dopiero w 2001 roku pojawił się kernel zasługujący w pełni na miano jądra systemu dla komputerów domowych i biurowych (obsługa USB, Plug and Play oraz wielu innych udogodnień). Jądro 2.6 jest określane jako to, które zapewni Linuksowi otwartą drogę do świata wielkich serwerów i miniaturowych komputerów przenośnych jednocześnie.

Droga do gwiazd i… do kieszeni

W kernelu 2.6 zaimplementowano sporo mechanizmów, które pozwalają z powodzeniem używać Linuksa w największych serwerowniach świata. Jedną z nowości jest obsługa serwerów pracujących w standardzie NUMA (Non-Uniform Memory Access) – takich jak oparty na Xeonach IBM NUMA-Q. Mowa tu o specjalnej architekturze, której zadaniem jest zerwanie z balastem SMP (Symmetric Multiprocessing). W tym ostatnim przypadku pamięć operacyjna, współdzielona przez wszystkie procesory maszyny, staje się szybko wąskim gardłem całego systemu. W systemach NUMA określone procesory mają preferowany dostęp do niektórych obszarów pamięci.

Kolejny krok w kierunku superserwerów (ale – coraz częściej – również domowych komputerów) to oczywiście obsługa mechanizmu Hyper-Threadingu, dostępnego w procesorach Pentium 4, pozwalającego na “udawanie” przez jedną jednostkę centralną kilku CPU. Linux 2.6 jest w stanie zoptymalizować rozdział zadań pomiędzy wirtualne procesory w taki sposób, aby optymalnie wykorzystać opisywany mechanizm sprzętowy.

Należy również wspomnieć o bardziej “ewolucyjnych” zmianach, takich jak obsługa standardu PAE (Physical Address Extension), dzięki któremu 32-bitowy system jest w stanie adresować aż 64 GB pamięci RAM, zwiększenie limitu rozmiaru pamięci urządzeń blokowych (np. dysków) do 16 TB, liczby identyfikatorów procesów z 32 000 do ok. miliarda, a liczby użytkowników i grup z 64 000 do ponad 4 miliardów (32-bitowy identyfikator użytkownika/grupy). Systemy linuksowe mogą teraz obsługiwać do 64 procesorów i 4096 tzw. urządzeń głównych (major devices).

Kernel 2.6 oferuje również usprawnienia, dzięki którym Linux bez problemów “zmieści się” np. w palmtopach. Dzięki włączeniu do oficjalnej linii rozwojowej jądra projektu uClinux o wiele łatwiejsze jest teraz użycie systemu z pingwinem w herbie do obsługi systemów opartych na mikrokontrolerach. Nowe jądro ułatwia także zastosowanie Linuksa jako systemu dla urządzeń sieciowych. Jeśli chodzi o same protokoły sieciowe, to również doczekaliśmy się sporych zmian, m.in. wbudowanej obsługi IPSec oraz IGMPv3 (Internet Group Messages Protocol, wykorzystywany m.in. przez routery Cisco).

Na biurku też lepiej…

Linux 2.6 powinien się sprawdzać nie tylko w serwerach i urządzeniach PDA, ale także w komputerach domowych. Dzieje się tak m.in. za sprawą poprawionego, mniej restrykcyjnego mechanizmu wielozadaniowości (działanie procesu jądra może teraz warunkowo być przerywane), poprawionemu modułowi obsługi operacji I/O itd. Jedną z istotniejszych zmian jest napisana od nowa implementacja obsługi wątków – Linux korzysta teraz z ustandaryzowanych wątków POSIX-owych. Powinno to m.in. poprawić wydajność systemów z procesorami od Pentium Pro wzwyż.

Zmian jest o wiele więcej, niż tu wymieniono – wystarczy wspomnieć o nowych lub poprawionych sterownikach do wielu typów urządzeń (m.in. bezprzewodowych) czy większej liczbie w pełni obsługiwanych systemów plików (pojawiła się np. funkcja zapisu na partycjach NTFS). Lepiej jest również na styku maszyna-człowiek (mowa o tzw. Human Interface Devices) – oprócz na pozór kuriozalnej możliwości zbudowania systemu bez jakiegokolwiek interfejsu użytkownika (przydatnej w systemach typu embedded) mamy teraz szansę na łatwe używanie ekranów dotykowych, myszek z dużą liczbą rolek czy oglądania aplikacji na odwróconym o 90 stopni ekranie. Poprawiono system dźwięku (standardem jest teraz ALSA), zarządzanie energią (ACPI i APM) i dodano obsługę mechanizmu suspend-to-disk, co w połączeniu z możliwością zmiany szybkości taktowania procesora w trakcie pracy systemu przyda się użytkownikom notebooków.

Co trzeba wymienić?
Zanim uruchomimy nowe jędro, musimy się postarać o odpowiednie wersje niektórych programów i bibliotek systemowych. W nawiasach podano sposoby sprawdzania wersji poszczególnych narzędzi:
– Gnu C 2.95.3 (gcc –version);
– Gnu make 3.78 (make –version);
– binutils 2.12 (ld -v);
– util-linux 2.10 (fdformat –version);
– module-init-tools 0.9.10 (depmod -V);
– e2fsprogs 1.29 (tune2fs);
– jfsutils 1.1.3 (fsck.jfs -V);
– reiserfsprogs 3.6.3 (reiserfsck -V 2>&1| grep reiserfsprogs);
– xfsprogs 2.6.0 (xfs_db -V);
– pcmcia-cs 3.1.21 (cardmgr -V);
– quota-tools 3.09 (quota -V);
– PPP 2.4.0 (pppd –version);
– isdn4k-utils 3.1pre1 (isdnctrl 2>&1|grep version);
– nfs-utils 1.0.5 (showmount –version);
– procps 3.1.13 (ps –version);
– oprofile 0.5.3 (oprofiled –version).

Porównanie jąder 2.4.x i 2.6.x w skrócie
FunkcjaJądro 2.4Jądro 2.6
Maks. liczba procesorów1664
Maks. rozmiar RAM-u16 GB64 GB
Maks. rozmiar systemu plików2 TB16 TB
Obsługiwane systemy plików (odczyt/zapis)Ext2, Ext3, ReiserFS, JFS, HPFS, FFS, HFS, HFS+, MS DOS, FAT, VFAT, ISO9660Ext2, Ext3, ReiserFS, JFS, HPFS, FFS, HFS, HFS+, MS DOS, FAT, VFAT, ISO9660, NTFS, XFS, obsługa dynamicznych dysków MS Windows
Sieciowe systemy plikówNFSv3, SMB, NCP, InterMezzo, CodaNFSv4, SMB, NCP, InterMezzo, Coda, AFS, CIFS
Rodzaje wątkówLinuxThreadsNPTL (wątki POSIX-owe)
Obsługa IPSecza pomocą dodatkowej łatkiwbudowana
Więcej:bezcatnews