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