heise open source

Wiadomości i artykuły heise Open Source

3 lutego 2010, 08:00

Thorsten Leemhuis, Krzysztof Sokołowski

Jądro Linux – co przyniesie wersja 2.6.33, cz. II: pamięci masowe

Dzięki rozszerzonej obsłudze infrastruktury Discard kernel jest teraz w stanie korzystać z funkcji ATA Trim, co może przyczynić się do wzrostu żywotności i przepustowości dysków SSD. Wśród nowości jądra Linux należy wymienić DRBD, a także sterowniki do obsługi pamięci masowych HP, LSI i VMware. Ponadto oczekiwana na początku marca wersja Linuksa zawiera liczne ulepszenia w kodzie systemów plików btrfs, ext4 i reiserfs.

Kilka dni temu Linus Torvalds opublikował piątą wersję przedwstępną jądra Linux 2.6.33. Finalne wydanie nowego kernela ma się pojawić w ciągu 4–5 tygodni. Zazwyczaj w tej fazie rozwojowej do głównej gałęzi jądra trafiają przede wszystkim pomniejsze zmiany i poprawki. Wyjątki robi się czasami dla sterowników. Tak właśnie jest w wersji 2.6.33-rc5, gdzie na późnym etapie prac dodano sterownik V4L/DVB, który obsługuje chipset Mantis stosowany w wielu kartach telewizyjnych.

Nowości w podsystemie V4L/DVB będą tematem jednego z najbliższych artykułów w ramach serii "Jądro Linux – co przyniesie wersja 2.6.33". Po publikacji pierwszej części opisującej zmiany w obszarze obsługi sieci teraz pora na zapoznanie się z nowościami w systemach plików i podsystemach pamięci masowych.

Funkcja Trim

Programiści kernela opracowali w ciągu ostatnich kilku miesięcy infrastrukturę Discard, dzięki której sterowniki dla adapterów pamięci masowych mogą być informowane o fizycznie zwalnianych obszarach pamięci na nośnikach danych (np. w wyniku usunięcia jakiegoś pliku czy sformatowania partycji). W wersji 2.6.33 kod ten został dodatkowo rozbudowany. Teraz również podsystem Libata współdziała z mechanizmem Discard i może przekazywać informacje o zwolnionych obszarach za pośrednictwem polecenia ATA Trim. Jest to interesujące szczególnie w przypadku dysków półprzewodnikowych (Solid State Disks), ponieważ w ten sposób mogą one otrzymywać informacje o zwolnionych obszarach i optymalizować operacje zapisu i odczytu (Garbage Collection). Ma to niebagatelny wpływ na wzrost wydajności i żywotności dysków SSD.

Aby infrastruktura Discard mogła być w pełni zastosowana, również inne obszary kernela muszą informować podsystem pamięci masowych o zwolnionych obszarach. System plików btrfs zapewnia to już w wersji 2.6.32 jądra. Od teraz także system plików ext4 zawiera kod obsługi polecenia ATA Trim. Jednak ze względu na to, że nie został on na razie dostatecznie przetestowany, funkcja ta jest nieaktywna w domyślnej konfiguracji. Wprowadzono również obsługę Discard w kodzie systemu plików FAT, ale także i w tym wypadku jej użycie musi zostać wymuszone przez specjalną opcję montowania.

Replikacja

Opracowany przy znacznym udziale wiedeńskiej firmy Linbit mechanizm DRBD (Distributed Replicated Block Device) nie został uwzględniony w jądrze Linux 2.6.32. W końcu przy okazji obecnych prac kod ten doczekał się akceptacji twórców kernela i został dołączony do jądra Linux w wersji 2.6.33. DRBD można w skrócie opisać jako "mechanizm obsługi urządzeń RAID-1 za pośrednictwem sieci". Nośniki danych systemu określanego jako nadrzędny (master) są odwzorowywane w czasie rzeczywistym w innym systemie (slave) – w przypadku awarii mastera, slave od razu przejmuje wszystkie jego zadania, co pozwala na uniknięcie opóźnień. Aby dane pozostały zsynchronizowane, master klasyfikuje operacje zapisu jako zakończone dopiero wtedy, gdy również slave uzna je za zakończone. Bardziej szczegółowe wyjaśnienia na temat działania mechanizmu DRBD przedstawiono w artykule w serwisie LWN.net, a także w obszernej dokumentacji na stronie projektu.

Kilka grup programistów pracowało w ostatnich miesiącach i latach nad różnymi mechanizmami ograniczającymi liczbę przesyłanych danych wymienianych w określonym przedziale czasowym między procesami lub grupami procesów. Obecnie za najbardziej dopracowany uważa się mechanizm Blkio Controller Cgroup Interface, który korzysta z planisty CFQ-I/O (Completely Fair Queuing). Nie oznacza to jednak całkowitego zarzucenia innych koncepcji. Opracowany kod ma stanowić podstawę dla dalszych ulepszeń. Programiści chcieliby zaimplementować w ramach mechanizmu dodatkowe funkcje rozwinięte w ramach konkurencyjnych projektów. Więcej informacji na ten temat można znaleźć w serwisie LWN.net oraz dokumentacji.

Optymalizacja

Programiści z kodu jądra usunęli planistę AS (Anticipatory I/O Scheduler), który (jak czytamy w komentarzu do commita) wyposażony jest w niewielki zakres funkcji w porównaniu z obecnie preferowanym CFQ. Ten ostatni może być teraz stosowany także w systemach biurkowych i serwerowych, a w wielu dystrybucjach i tak jest od dawna standardowo uaktywniany. Podobnie jak w przypadku planisty procesów, w niemal każdej nowej wersji kernela dochodzi do licznych zmian, które optymalizują planistę CFQ-I/O pod kątem określonych scenariuszy zastosowań. Szczegóły na ten temat można znaleźć za pośrednictwem odnośników umieszczonych na końcu niniejszego artykułu, a także w głównym wniosku o wprowadzenie kodu (Git Pull Request) opiekuna podsystemu blokowego Jensa Axboe.

Dodatkowo ulepszony został kod do migracji zarządzanych przez mdadm programowych macierzy RAID z jednego poziomu na inny. Podsystem MD obsługuje teraz również bariery zapisu – dzięki temu dane i dziennik systemu plików są zapisywane w kolejności oczekiwanej przez inne obszary kernela. Ma to zapewnić lepszą integralność systemów plików w przypadku awarii, może jednak odczuwalnie zmniejszyć przepustowość. Takie zachowanie opisuje opiekun podsystemu MD Neil Brown. Rozbudowana została także obsługa barier zapisu w komponencie Device Mapper (DM). Mechanizm ten ma od teraz także funkcję Merge Target (m.in. 1, 2), za pomocą której można powrócić do stanu zapisanego we wcześniejszym zrzucie – na przykład po aktualizacji systemu, która sprawiła kłopoty (artykuł w LWN.net).

Sterowniki

Sterowniki podsystemu IDE zostały oficjalnie określone jako przestarzałe (deprecated) – użytkownikom radzi się przesiadkę na zawarte od dłuższego czasu w kernelu i nieklasyfikowane już jako eksperymentalne (1, 2) sterowniki PATA z podsystemu Libata. W wersji 2.6.33 otrzymały one liczne ulepszenia i poprawki – niektóre są dziełem Bartłomieja Żołnierkiewicza, który jeszcze kilka miesięcy temu opiekował się podsystemem IDE.

Nowością w kernelu są ulokowane w podsystemie SCSI sterowniki 3w-sas do obsługi adapterów LSI 3ware 9750 oraz vmw_pvscsi dla wirtualnych urządzeń w systemach gościach przez niektóre hiperwizory VMware. Z kolei nowsze kontrolery Smart Array firmy HP mogą być teraz obsługiwane nie tylko przez zoptymalizowane w wersji 2.6.33 i umiejscowione w podsystemie blokowym sterowniki cciss, ale również przez nowe drivery hpsa.

Różne

Poniżej wykaz dalszych zmian wokół systemów plików i kodu do obsługi pamięci masowych w kernelu.

  • W eksperymentalnym i określanym mianem "systemu plików następnej generacji" systemie btrfs w wersji 2.6.33 doszło przede wszystkim do pomniejszych ulepszeń i poprawek; szczegóły opisuje jego główny programista Chris Mason.
  • Wywodzący się z systemów plików ext2 i ext3 system ext4 może teraz montować starsze systemy plików ext. W środowiskach, w których istotne jest zachowanie jak najmniejszych rozmiarów obrazu jądra, pozwala to na zaoszczędzenie miejsca na dysku.
  • Do wprowadzenia w 2.6.33 zaproponowano także rozproszony system plików Ceph, jednak Torvalds postanowił na razie pozostawić go poza kernelem. Napisał, że powodem tej decyzji były względy czasowe, a także fakt, iż zbyt mało programistów i dystrybutorów było zainteresowanych włączeniem nowego systemu (artykuł na LWN.net).
  • Wprawdzie kod systemu reiserfs już od dłuższego czasu nie ma oficjalnego opiekuna, ale jeden z programistów zadał sobie trud i znacznie zredukował użycie mechanizmu Big Kernel Lock (BKL). Dzięki temu system ten powinien być lepiej skalowalny, a czasami także nieco szybszy.
  • Niektóre z najważniejszych nowości w systemie nilfs2 zostały opisane we wniosku o wprowadzenie kodu (Git Pull Request) autorstwa opiekuna nilfs2 Ryusuke Konishiego.
  • Od teraz Virtual File System (VFS) poprawnie implementuje O_SYNC – więcej szczegółów na ten temat można przeczytać w serwisie LWN.net.
  • W kodzie systemu XFS doszło do większych przeróbek, w ramach których zastąpiono mechanizm śledzenia bazujący na dość świeżym, ale obszernie rozwiniętym w ubiegłym roku uniwersalnym mechanizmie do śledzenia kodu kernela.

Dalsze nowości

Poniżej znajduje się wykaz pozostałych zmian. Każdy odnośnik wskazuje na opis konkretnego wprowadzenia kodu (commit) w interfejsie WWW znajdującej się na Kernel.org i nadzorowanej przez Linusa Torvaldsa gałęzi repozytorium Git ze źródłami kernela. Komentarze do commitów, a także same łaty dostarczają licznych informacji na temat konkretnych zmian.

Systemy plików

Btrfs

Ext[234]

Inne

Przechowywanie (Storage)

Block

DM

Libata

MD

MFD/MMC/MTD

SCSI

Inne

  • Podziel się
  • Wykop.pl
  • StumbleUpon
  • del.icio.us
  • OSnews.pl