Kernel News - Linux Magazine

Transkrypt

Kernel News - Linux Magazine
WIADOMOŚCI
Kernel
Kernel News
INFO
Kernel News to regularna, comiesięczna kolumna, która zawiera informacje na temat najnowszych trendów rozwojowych jądra. Najciekawsze tematy są wybierane
i opisywane przez Zack-a. Zack przez wiele lat przygotowywał oficjalne, cotygodniowe podsumowanie dyskusji dla Kernel Traffic Mailing List. Linux Magazine przedstawia zatem krótkie podsumowanie dyskusji na liście Linux Kernel. PAWEŁ LESZEK
Kernel Mailing List to podstawowe
źródło informacji o bieżących pracach rozwojowych nad jądrem Linuksa. Ilość nadsyłanych listów
i wątków dyskusji sprawia, że jest to
niemal nie do ogarnięcia przez jednego człowieka.
Na szczęście znalazł się dzielny
duch, który podjął się niemożliwego – jest nim
Zack Brown.
■ Już po wszystkim
■ Powiew zmian
Począwszy od wersji 2.6.0-test11, Linus Torvalds przekazał kontrolę nad kodem na
rzecz Andrew Mortona. To przekazanie pałeczki nie odbyło się z dnia na dzień. Wpływ
Andrew na testy 2.6 stale wzrastał, zaś Linus
rozważał kandydaturę Andrew już od 2002
roku. David Weinehall jest wciąż oficjalnym
opiekunem jądra serii 2.0 – choć obecnie pokazuje się już bardzo mało nowych wersji 2.0. Od
czasu do czasu Alan Cox przygotowuje nowe
jądro 2.2, a Marcelo opiekuje się gałęzią 2.4.
Ciekawostką jest inna procedura publikacji jądra 2.6. Do tej pory Linus samodzielnie decydował, kiedy jądru należy nadać status „sta-
ble”. W przypadku 2.6, decyzję tę podjął Andrew Morton, który ma przecież nadzorować
całą gałąź w przyszłości.
Andrew będzie miał kluczowy wpływ na
szybkość adaptacji jądra 2.6 przez poszczególne dystrybucje Linuksa. Niebawem zostanie
także utworzona nowa gałąź rozwojowa – 2.7.
Wszyscy zastanawiają się, jak dużo czasu zajmie dojście do stabilnej wersji 2.8. Obecne
tempo prac wskazuje, że będzie to trwało na
pewno kilka lat. Na szczęście infrastruktura
jądra 2.6 została zaprojektowana z dużymi rezerwami, które powinny wystarczyć do obsługi
nowego sprzętu i nowych aplikacji.
■
Kolejna kontrowersyjna sprawa dotyczyła
CramFS (compressed filesystem) – sterownika do obsługi szyfrowanego systemu plików, stworzonego przez Daniela Quinlan.
Dość nagle CramFS stracił swojego opiekuna. Wynikło to stąd, że niektóre z łatek Daniela zostały odrzucone – nawet takie, które
wyglądały na całkiem dobre. W rezultacie
Daniel zaprzestał przesyłania łatek. Wobec
takiej sytuacji Alexander Viro – od niepamiętnych czasów opiekun kodu sterownika
Virtual Filesystem, samodzielnie rozpoczął
przepisywanie kodu CramFS code, ale prace nadal trwają.
■
■ Trudna decyzja
■ Prosto z pulpitu
■ Ciężka praca
Grudniowe dyskusje na liście pokazały po
raz kolejny, że siła Linuksa tkwi w tym, że
programiści zajmują się przygotowaniem
funkcji przydatnych w codziennym zastosowaniu, unikając dodawania nowych możliwości za wszelką cenę – np. kosztem stabilności. Przykładem jest radykalna decyzja, co
do sterownika ide-scsi. Kod tego sterownika nie
jest od jakiegoś czasu uaktualniany i nie działa
prawidłowo, jednak jak dotąd niewielu użytkowników wyraziło potrzebę korzystania z niego, a nikt nie przesyłał kodu z łatkami, które
zaktualizowałyby sterownik.
W chwili, kiedy pisałem te słowa, wszystko
wskazywało na to, że sterownik zostanie usunięty z kodu jądra 2.6. W trakcie dyskusji Bill
Davidsen bardzo nalegał, żeby utrzymać sterownik, ponieważ jest on konieczny do korzystania z niektórych napędów ZIP i streamerów
podłączanych przez ATAPI. Jednak Linus Torvalds stwierdził, że jeśli nie ma osoby, która
opiekowałaby się sterownikiem aktualizując
jego kod, jego utrzymanie w kodzie jest niemożliwe.
■
18
Luty 2004
Interesująco przedstawia się porównanie modelu obsługi sygnałów między jądrem 2.4
i 2.6. Przykładem są niektóre rodzaje sygnałów oznaczone jako thread synchronous, których istota polega na tym, że wątek musi je
obsłużyć zanim będzie mógł kontynuować.
Różnica między 2.4 i 2.6 polega na innym
zachowaniu w przypadku otrzymania takiego
sygnału. Zablokowanie sygnału thread synchronous w 2.4 zostanie po prostu zignorowane i nastąpi przekazanie sygnału do wątku.
W 2.6 natomiast, wątek zostanie zakończony
po otrzymaniu takiego sygnału. Wynika to
z faktu, iż w 2.4 mechanizm ten często prowadził do ukrywania błędów.
W przypadku jądra 2.6, wątek zostanie natychmiast „zabity”, informując w ten sposób
administratora lub programistę, że istnieje jakiś błąd w kodzie aplikacji. Linus Torvalds zastanawiał się, czy jest to słuszne, w razie konieczności istnieje jednak możliwość przełączenia działania sygnałów do modelu 2.4 przez
ustawienie flagi SA_NODEFER w funkcji sigaction().
■
www.linux-magazine.pl
Pontus Fuchs podjął wielkie wyzwanie opracowania kodu, który pozwalałby na ładowanie i wykorzystanie sterowników z MS Windows w Linuksie. Jego projekt sterownika
ndiswrapper jest już wystarczająco rozwinięty,
aby móc go wykorzystać do obsługi kart sieciowych. Ndiswrapper dostarcza API, które
jest pośrednikiem tłumaczącym funkcje Linuksa dla sterownika z MS Windows i odwrotnie. Uzasadnieniem dla projektu jest to,
że wielu dostawców sprzętu odmawia przygotowania sterowników dla Linuksa, nawet
jedynie w postaci binarnej. Wygląda to na
całkiem racjonalne rozwiązanie. Jak dotąd
udało mu się w ten sposób zmusić do pracy
w Linuksie kartę Broadcom 4301, a Pavel Machek odniósł również sukces w przypadku Broadcom 94306. Tym niemniej byłoby raczej dziwaczne, gdyby taki model obsługi urządzeń
był włączony do standardowego jądra Linuksa,
zważywszy na to, że jest to próba uruchamiania sterownika przeznaczonego dla zupełnie
innego systemu operacyjnego. Jest to raczej
dowód możliwości programistów jądra.
■
Kernel
WIADOMOŚCI
PAWEŁ LESZEK
Jądro 2.6 już jest!
18
grudnia 2003 roku Linus Torvalds oficjalnie ogłosił dostępność jądra Linuksa w wersji 2.6. Poprzednia wersja – 2.4, została opublikowana w styczniu 2001 roku – trzy lata
temu. Większość nowości w jądrze 2.6 ma
na celu poprawienie skalowalności oraz lepszą obsługę sprzętu.
Upłynie jeszcze kilka miesięcy, zanim
producenci komercyjnych wersji Linuksa
zaczną stosować jądro 2.6. Red Hat już
ogłosił, że nie będzie dodawać jądra 2.6 aż
do 2005 roku, kiedy przewidywane jest
wprowadzeni nowej linii produktów Red
Hat Enterprise Linux 4. SuSE Linux AG
planuje wprowadzenie 2.6 w lecie 2004 roku wraz z SuSE Linux Enterprise Server 9.
Przede wszystkim dla biznesu
Jądro 2.6 nie posiada cech rewolucyjnych –
jest to, podobnie jak było z 2.4, stabilny
i zrównoważony rozwój. Widać dokładnie, że
Linus uważa jądro jedynie za fundament,
w oparciu o który powinny być budowane
aplikacje. Dlatego starannie dobiera funkcje,
mające wejść w skład jądra, odrzucane są
wszelkie poprawki dodające nowe funkcje
ad-hoc, bez integracji z architekturą jądra.
Najważniejsze zmiany dotyczą obsługi
maszyn wieloprocesorowych, pamięci RAM
i systemu plików:
obsługa do 32 procesorów
obsługa 64GB pamięci RAM – także dla
procesorów 32-bitowych
obsługa nowych systemów plików: Journaling File System (JFS, IBM) i XFS
(Silicon Graphics) – poprzednio były
one dostępne jako dodatkowe łatki.
Wprowadzono również obsługę NUMA
(Non-Uniform Memory), który będzie wykorzystywany w rozbudowanych systemach wieloprocesorowych. Jądro 2.6 zawiera nowy scheduler, którego autorem
jest Ingo Molnar. Wprowadzone zmiany
zwiększą wydajność kodu SMP (maszyny
wieloprocesorowe), ulepszony zostanie
kod load balancing-u i sterowania priorytetem procesów:
zmiany w modelu zarządzania pamięcią
Już na etapie wersji 2.5 wprowadzono obsługę tzw. memory pools, ich funkcja polega
na wstępnej alokacji pamięci i jej rezerwowaniu, w celu przyspieszenia przydziału
pamięci (funkcje obsługi znajdziesz w pliku
linux/mempool.h):
interfejs kolejki roboczej
Interfejs kolejki roboczej (workqueue)
również wprowadzono w wersji 2.5. Jest on
używany do kontroli zadań jądra już znajdujących się w schedulerze. Sterowniki
również mogą tworzyć własne kolejki lub
korzystać z tych, które dostarcza jądro. Ta
funkcjonalność przybliża Linuksa do systemów czasu rzeczywistego, umożliwiając
lepszą kontrolę nad procesami.
unifikacja modelu urządzeń
Niemal rewolucyjną zmianą jest wprowadzenie zunifikowanego modelu urządzeń.
Model urządzeń to warstwa abstrakcji pomiędzy sterownikami urządzeń, umożliwiająca spójną komunikację. Dzięki temu producenci sprzętu będą mogli łatwiej tworzyć
sterowniki sprzętowe.
Inne zmiany
Oprócz ważnych zmian dotyczących podstawowych elementów jądra, wprowadzono tysiące mniejszych zmian. Jednak to
one będą prawdopodobnie najlepiej widoczne dla użytkownika końcowego, dla
którego ważniejsza jest obsługa nowych
urządzeń i multimediów. Oto najważniejsze zmiany, które będzie można wykorzystać na co dzień:
systemy plików
Zaimplementowano wiele ulepszeń dla
systemów plików ext2/ext3, włączając w to
możliwość przechowywania rozszerzonych
atrybutów i list kontroli dostępu POSIX.
Przepisano kod sterownika systemu plików
NTFS.
audio
Do jądra systemu wprowadzono kod ALSA (Advanced Linux Sound Architecture) –
jest to uniwersalna architektura obsługi
dźwięku. Zastępuje ona dotychczasową,
przestarzałą architekturę OSS (Open Sound System). ALSA jest wspierana zarówno
przez KDE, jak i GNOME i umożliwia korzystanie z urządzeń audio USB i MIDI, obsługę dupleksowego odtwarzania itd. Oznacza to nową jakość, jeśli chodzi o obsługę
multimediów w Linuksie.
SCSI/IDE
Przepisano na nowo większość kodu obsługi podsystemów SCSI/IDE, przejrzano
również kod większości sterowników urządzeń SCSI/IDE – aczkolwiek nie jest to
proces zakończony. Szczególnym problemem jest emulacja obsługi urządzeń IDE
w trybie SCSI.
zarządzanie energią
Wprowadzono pełną obsługę ACPI (Advanced Configuration and Power Interface), obejmującą możliwość zmiany częstotliwości zegara procesora w zależności od
jego obciążenia. Wprowadzono też obsługę
funkcji suspend – choć jej działanie nie jest
do końca przetestowane.
sieć i IPSec
Do jądra dodano wreszcie obsługę protokołu IPSec (IP Security), zgodną z wytycznymi zawartymi w RFC. Implementacja
IPSec wykorzystuje nowe API kryptograficzne, obsługujące popularne algorytmy
MD4, MD5, DES i inne. Usunięto natomiast wbudowany w jądro serwer HTTP
(khttpd). Dodano obsługę protokołu
NFSv4 (Network File System) na poziomie
klienta i serwera.
warstwa interfejsu użytkownika
Zmieniono warstwę obsługi konsoli i framebuffer-a, w związku z tym wiele aplikacji
użytkownika (takich jak fbset czy fbdsel)
będzie wymagało uaktualnienia. Do kodu
jądra wprowadzono wiele sterowników dla
nowego rodzaju sprzętu – od ekranów dotykowych po czytniki Braille'a.
Najważniejsze zmiany w jądrze 2.6 dotyczą dalszego dostosowania do potrzeb systemów i aplikacji wykorzystywanych w biznesie. Dużo pracy włożono w zbudowanie skalowalnego kodu obsługi systemów 64-bitowych, ponieważ to one w najbliższej przyszłości, tj. w ciągu 2-3 lat, zdominują rynek
systemów dla biznesu. Jeśli jednak używasz
Linuksa w domu lub biurze i nie masz
szczególnych wymagań związanych z obsługą sprzętu, to chyba nie warto wykonywać
upgrade jądra tylko dlatego, że pojawiła się
jego nowsza wersja. Kod źródłowy jądra 2.6
jest jak zwykle dostępny w serwisie Linux
Kernel Archive (http://www.kernel.org). ■
www.linux-magazine.pl
Luty 2004
19