Jądro Linux 3.2

Jądro Linux 3.2

    przez -
    47 756
    Linux Tux
    Linus Torvalds ogłosił wydanie jądra Linux 3.2, które jest aktualizacją dla wydanego jądra Linux 3.1. Tym razem programiści poprzestali na siedmiu wersjach kandydujących, chociaż Linus chciał w razie problemów wydać RC-8. Nowa wersja przynosi jak zwykle wiele zmian, a w szczególności aktualizację sterowników, poszerzoną listę obsługiwanego sprzętu, usprawnienia dotyczące wirtualizacji i systemu plików, a także kilka zmian w sieciach.

    Sieci

    Korekty kursu

    Deweloperzy jądra rozszerzyli stos TCP w jądrze Linux 3.2, w celu obsługi “Proportional Rate Reduction” (PRR). Algorytm został zaprojektowany w celu dostosowania prędkości transmisji ramek, które mogą być przetwarzane po drodze przez odbiorcę i routery. Jest to przydatne szczególnie podczas redukowania limitu transferu podczas nieoczekiwanego przeciążenia. Algorytm został zaprojektowany, aby przywrócić maksymalny transfer szybszy, niż poprzednio używana metoda , która jest opisana w RFC 3517 (“A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP”).

    Powołując się na wewnętrzne testy, algorytm szybszego transferu, jest w stanie zredukować czas odpowiedzi HTTP od 3 do 10 procent.

    WiFi

    Rok temu deweloperzy Broadcom przedstawili sterowniki WiFi – Brcmsmac i Brcmfmac Brcm80211. Jednakże nie zostały one wprowadzone ze względu na brak dopracowania. W tej wersji jądra w końcu będziemy mogli je zobaczyć, co powinno zaowocować większą liczbą obsługiwanych chipów.

    Podsystem sieciowy zawiera teraz sterownik WiFi Ath6kl dla komponentu Atheros AR6003. Jest to znacznie ulepszona, szybsza i mniejsza wersja poprzedniego stosu, który został usunięty w tym samym czasie. Został on zaprojektowany poza głównym drzewem jądra Linux. Refaktoryzacji doczekał się również sterownik RTl8192e, jednakże nadal programiści czekają przed dołączeniem go do podsystemu sieciowego.

    System plików

    Wielkie Bloki

    System plików Ext4 obsługuje teraz duże bloki alokacji. Technika znana, jako bigalloc, wiąże 4K bloki w celu użycia ich do przechowywania danych w klastrach o wielkości 1MB. Zmniejsza to obciążenie administracyjne przy zapisywaniu dużych plików i powinno znacznie poprawić wydajność w niektórych scenariuszach. Jest jednakże mniej opłacalny w gospodarowaniu przestrzenią dyskową, ponieważ każdy plik zajmuje cały dostępny klaster. Systemy plików z bigalloc mogą być stosowane z wydanym niedawno E2fprogs 1.42. Tworzy się je przez użycie komendy mkfs.ext4 i definiujące wymaganą wielkość klastra, używając nowe argumentu “-C“.

    Programista systemu plików ext Theodore ‘tytso’ Ts’o usunął stary algorytm alokacji bloków pamięci i dokonał dużej ilości zmian, które powinny ulepszyć reakcję Ext4, jeżeli użytkownicy określili wzajemnie niekompatybilne opcje montowania.

    Solidniejszy Btrfs

    Programiści dodali funkcje readahead do ciągle eksperymentalnego systemu plików Btrfs. Wsparcie scrub, wprowadzone w jądrze Linux 3.0 zostało ulepszone i powinno być znacznie szybsze. Kiedy zostaną znalezione uszkodzone bloki, funkcja scrub zwraca nazwy plików, która znajdowały się na tej przestrzeni, a btrfs będzie automatycznie dopasowywać tabele alokacji, bez wyraźnej potrzeby uruchamiania scrub w sytuacjach, kiedy zostanie napotkany błąd odczytu, ale może spełnić żądanie odczytu, za pomocą drugiej kopii danych.

    Jeśli główny węzeł, kluczowy element Btrfs został uszkodzony, nowa opcja montowania -o recovery może zostać użyta, do poinstruowania systemu plików, w celu użycia alternatywnego węzła root. Jądra spróbuje wtedy użyć starej wersji węzła głównego i zamontuje stary stan systemu plików, pozwalając użytkownikowi na odzyskanie wszystkich danych, do jakich będzie dostęp poprzez tą metodę.

    Wszystkie zmiany w wewnętrznych logach funkcji, mające usprawnić wydajność Btrfs zostały wyrzucone z jądra Linux 3.2, z powodu drobnych problemów. Chris Mason wyjaśnił owy problem na liście git.

    Pomniejsze zmiany:

    Dokonano kilku zmian w kodzie systemu plików CIFS, który odpowiada za udostępnianie zasobów Samba lub Windows. Powinno to znacznie usprawnić wymianę danych w niektórych sytuacjach.

    Od jądra Linux 3.2 Objects Raid Engine (ORE) w Exofs będzie wspierał RAID 5. Exofs (EXtended Object File System) został zaprojektowany dla OSD (object storage devices). Jest to zarazem trzecia implementacja RAID 5 w jądrze. Btrfs oczekuje ewentualnej obsługi RAID 5 i niedawno była omawiana cała ścieżka włączania kodu.

    Christoph Hellwig opisał kilka usprawnień do XFS, włączając w to optymalizację podczas wywoływania fsync na katalogach i redukując opóźnienia z sync.

    Infrastruktura

    Optymalizacja szyfrowania i deszyfrowania

    Dodatkowa implementacja SHA1 dla procesorów x86_64 została zaprojektowana, aby pozwolić algorytmowi hashującemu w uzyskaniu wyższej przepustowości, przy użyciu komend SSE3 lub AVX. Kod Blowfish został rozszerzony, w celu zawarcia implementacji 64 bitowego assemblera, podczas gdy kod Twogish oferuje trójwejściową równoległą implementację assemblera dla systemów x86_64. Obie implementacje znacząco przyspieszają mechanizmy szyfrowania i deszyfrowania.

    Wsparcie architektury procesorów

    Różne łatki pozwalają jądru Linux 3.2 uniknąć efektu osobliwych instrukcji cache L1 w procesorach Bulldozer, które mogą powodować spadki wydajności w niektórych sytuacjach.

    Dodano generatory liczb losowych dla nowych procesorów Ivy Bridge, kóry może zaadresować poprzez instrukcje x86 RDRAND. Intel planuje przedstawić te procesory w przyszłym roku. Podsystem EDAC (Error Detection And Correction) zawiera teraz eksperymentalny sterownik i7core_edac dla procesorów Sandy Bridge EP, oferujący interfejs do ustawiania memory scrub rate.

    Linux wspiera od teraz architekturę procesora Qualcomm Hexagon

    Pomniejsze zmiany

    Sterowniki: zegara, emulacji myszy, sieciowe i pamięci masowych dla Microsoftowej technologii wirtualizacji Hyper-V weszły do kodu architektury x86, jednakże nadal pozostaną w strefie przygotowania do czasu jądra Linux 3.3.

    Deweloperzy nadal kontynuują restrukturyzację kodu ARM i pracują nad czyszczeniem kodu. Nowa subarchitektury Highbank i Picoxcell pozwalają jądru na adresowanie chipów z tej samej rodziny po tej samej nazwie. Nowością w jądrze jest wsparcie dla rodziny SoC Denx MX28 i Omicron ixp425.

    Dla platformy Power/PowerPC dodano wsparcie dla nowej Power “Non Virtualized” Platform. Część systemów posiada nowy tryb, zwany PowerNV, który Linux nie uruchamiania go pod hypervisorem, ale wirtualizuje niezależnie poprzez KVM. Deweloperzy odnowili i oczyścili kod User-Mode Linux (UML) w różnych wariantach.

    Architektura

    Zarządzanie pamięcią

    Kod zapisu zwrotnego przepuszcza od teraz efektywniej programy, które generują dużą woluminy danych do zapisu na pamięci masowe. Powinno to przyspieszyć reakcję systemu na komendy użytkownika i nie powinno obciążać systemu, podczas próby zapisu dużych ilości danych, jak w przypadku polecenia dd zapisującego na wolne dyski.

    Nowe krzyżowe załączanie pamięci zmniejsza obciążenie podczas komunikacji za pośrednictwem Message Passing Interface (MPI). Zmiany w alokatorze SLUB i kodzie vmscan powinny poprawić wydajność jądra, w niektórych sytuacjach, o czym różne benchmarki figurujące w komentarzach commitów. Podobnie wygląda wsparcie mremap i optymalizacje TLB w kodzie Transparent Huge Pages (THP).

    Zaproponowane do włączenia w kod było fronswap, które może być używać przez programy, takie jak Xen i Zcache, aby zapisywać dane podręczne w szybkiej pamięci XENa lub skompresowane w pamięci. Do tego zadania zgłosił się Konrad Rzeszutek Wilk.

    Wirtualizacja

    Sterowniki frontend i backend dostępu do urządzeń pamięci masowej pod wirtualizacją Xen, obsługują od teraz usuwanie, pozwalając gospodarzowi na określenie, kiedy pamięć masowa jest zwolniona przez system gościa.

    Pojawiło się kilka drobnych ulepszeń dla hypervisora KVM bazującego na jądrze (ang. kernel-based KVM hypervisor). Natywne narzędzie KVM zostało ponownie zaproponowane do włączenia. Dokonano również pierwszej poważniejszej integracji skryptu, który pozwala wirtualnej maszynie być odpalonej na QEMU przy minimalnych ustawieniach, jako alternatywy dla natywnego narzędzia KVM.

    Mapowanie urządzeń (Device-mapper)

    Od wersji 3.2, device-mapper zawiera eksperymentalną bibliotekę trwałych danych – framework do przechowywania meta danych docelowych mapowanych urządzeń. Wiele aplikacji i programów będzie potem korzystało z tego rozwiązania. Jednym z pierwszych jest dm-thin, który udostępnia funkcję do provisioningu pamięci masowej. Pozwala ona na eksportowania większej ilości przestrzeni, niż tak która jest aktualnie dostępna.

    Dm-thin dodaje także ulepszoną funkcjonalność migawek (snapshotów), które lepiej wykorzystują dostępną przestrzeń dyskową, i ma zapewnić przyzwoite osiągi nawet, gdy generowane jest wiele migawek (np. kopii zapasowych). Kod ten jest oznaczony, jako eksperymentalny.

    Dm-bufio jest innym nową i eksperymentalną funkcją mapowania urządzeń, która może być użyta, jako pamięć podręczna dysku. Device-mapper przekazuje również informacje, czy dysk posiada ruchome mechanizmy (np. SSD).

    Pamięć masowa

    Nie dokonano zbyt wielu zmian w kodzie md, używanym do programowych macierzy RAID i administrowanych głównie przez mdadm. Główny opiekun md – Neil Brown liczy, że w przyszłej wersji pojawi się funkcja hot swapu dla uruchomionych RAID poziomów 1, 4, 5 i 10, która jest wyczekiwana od dobrych kilku lat.

    Dodano łatkę, która umożliwia dyskom posiadać przypisane aliasy, które są zachowywane na restart poprzez podsystem SCSI.

    Narzędzia przestrzeni użytkownika są teraz w stanie zapewnić, przy pomocy kodu jądra Linux, dla urządzeń w pętli, że pliki urządzeń są generowane dla partycji, jeżeli jakieś obrazy są montowane za pomocą pętli, zawierających tablicę partycji.

    Chmura

    Dzięki kontrolerowi przepustowości CFS i infrastrukturze kontroli grup (cgroups), jest teraz możliwość przechwycenia grupowego czasu procesora. Pozwala to na sprawdzanie w danej chmurze, czy użytkownik nie pobiera więcej zasobów procesora, aniżeli zapłacił za nie.

    Moduły jądra

    Jądro Linux 3.2 oznacza siebie, jako TAINT_OOT_MODULE (tainted: moduł out of tree), kiedy są ładowane moduły, które nie są oznaczone, jako oficjalna część jądra Linux. Pozwoli to programistom na wyszukiwanie błędów w celu szybkiego rozpoznania problemu w danym środowisku. Moduły Out of tree mają złą reputację w środowisku jądra i mogą okazjonalnie powodować problemy w pewnych strefach.

    Zarządzanie energią

    Dodano DVFS (dynamic voltage and frequency scaling), który jest znany, jako devfreq i podobnie, jak cpufreq reguluje częstotliwość oraz napięcie komponentów systemowych, w celu zredukowania poboru mocy, bez utraty wydajności. Jednakże w przeciwieństwie do cpufreq, który obsługuje tylko procesory, devfreq posiada wsparcie dla innych urządzeń. Pojawiło się także nowe API do konfiguracji zarządzania poborem energii dla specyficznych urządzeń (device PM QoS).

    Sterowniki

    Sterowniki graficzne

    Na systemach bazujących na platformie Intel Ivy Bridge, która ma być wydana w tym roku, sterownik DRM/KMS dla wbudowanego procesora będzie obsługiwał podłączenie do trzech monitorów jednocześnie. Znaleziono także nowe problemy na systemach z Sandy Bridge, po tym jak domyślnie były uruchomione RC6 i sprzętowe semafory. W odpowiedzi na owe problemy inżynierowie po raz kolejny wyłączyli obie funkcjonalności. Deweloperzy dodali także obsługę chipsetu Intel “Poulsbo” US15W, za którego obsługę odpowiada pewna część sterownika Intel GMA500.

    Sterowniki Nouveau używają od teraz funkcji akceleracji, które są dostępne z automatycznym generatorem firmware na chipach graficznych Fermi:
    NVC1: GeForce GT 415M, 420, 420M, 425M, 430, 435M, 525M, 530, 540M, 550M, 555, jak i Quadro 600, 1000M
    NVC8 GeForce GTX 560 Ti OEM, 570, 580, 590, jak i Quadro 3000M, 4000M, 5010M
    NVCF: GeForce GTX 550 Ti i 560M

    Linux 3.2 będzie pierwszą wersją jądra wspierającą ostatnie chipy. Kilka innych modyfikacji zawiera podstawy dla funkcji oszczędzania energii w sterowniku Nouveau, które będą wykorzystywane w przyszłych wydaniach.

    Sporo zmian zaszło w sterowniku graficznym vmwgfx DRM/KMS, który obsługuje wirtualną kartę graficzną VMware SVGA2. Sterownik posiada wsparcie dla akceleracji 2D i 3D i nie jest już oznaczony, jako oczekujący. Dodano także sterownik DRM/KMS dla System-on-Chip Samsung Exynos 4210, który nie oferuje aktualnie żadnej akceleracji, ale jest pierwszym dla systemów wbudowanych. Planowane jest w przyszłych wersjach dodanie sterownika dla platformy OMAP produkcji Texas Instruments (TI). Podsystem USB zawiera sterownik bufora ramek dla chipów UFX6000 (USB 2.0) i UFX7000 (USB 3.0), produkowanych przez SMSC.

    Dźwięk

    Najważniejszą aktualizacją dla sterowników dźwięku jest łatka naprawiająca problem, który może się pojawić, jeżeli producent sprzętu nie zapewnia odpowiednich informacji vendor i subsystem. Duża liczba zmian ulepsza automatyczny interpreter, który jest używany do konfiguracji kodeka Realtek.

    Multimedia

    Duża liczba zmian dotyczy podsystemu mediów, który jest zapleczem dla infrastruktury i sterowników do zdalnej kontroli, sprzętu telewizyjnego i kamer. Możemy tutaj wymienić sterowniki do kamer z chipsetami Topro, jak również odbiorników telewizyjnych Pinnacle PCTV HDTV Pro, Technotrend Connect S2-3600 i WinTV-Aero-M. Nowo wspieranymi są odbiornik Kworld UB499-2T DVB-T, demodulator NXP TDA10071 DVB-S/S2 oraz tuner Conexant CX24118A. Ze strefy oczekującej, przeniesiono sterownik tm6000 dla chipów USB-DVB TM5600, TM6000 i TM6010, oraz sterownik altera-stapl dla firmware Altera FPGA. Warto tutaj wspomnieć także o sterowniku cx25821 do kart telewizyjnych Conexant z chipem cx25821.

    Touchpad

    Sterownik do touchpadów Synaptics oferuje teraz wsparcie sensora obrazu i może zbierać o pozycji kilku palców jednocześnie. Inna modyfikacja ulepsza wsparcie dla sytuacji, w której użytkownik może położyć kilka palców naraz lub więcej niż dwa. Pojawiły się rozszerzenia dla sterownika elantech, który pozwala wspierać ostatni sprzęt Elantech i poprawia obsługę multitouch.

    SCSI

    Podsystem SCSI oferuje teraz sterownik mvumi dla Universal Message Interface od Marvell (UMI), który jest używany do komunikacji z chipsetami Marvell „Plato”. Rozszerzenie do sterownika megaraid_sas dodaje wsparcie dla modeli MegaRAID 9360 i 9380. Sterownik mpt2sas dodaje Fast Load Support, który może przyspieszyć inicjalizację sterownika akceleracji dla instancji, poprzez wyszukiwanie urządzeń we współpracy z innymi sterownikami. Sterownik qla4xxx może być zarządzany przez Sterownik qla4xxx może być teraz zarządzany przez Open ISCSI tools’ iscsiadm.