Kernel Traffic
Latest | Archives | People | Topics
Wine
Latest | Archives | People | Topics
GNUe
Latest | Archives | People | Topics
Czech
Home | News | RSS Feeds | Mailing Lists | Authors Info | Mirrors | Stalled Traffic
 

Kernel Traffic #191 For 2002/11/11

By Zack Brown

Translated By:  Maja Królikowska

Table Of Contents

Mailing List Stats For This Week

We looked at 1927 posts in 11542K.

There were 490 different contributors. 268 posted more than once. 180 posted last week too.

The top posters of the week were:

1. Przyspieszenie funkcji kmalloc()

26 Oct 2002 - 1 Nov 2002 (11 posts) Archive Link: "[PATCH,RFC] faster kmalloc lookup"

People: Manfred SpraulNikita DanilovMarcus Alanen

Manfred Spraul znalazł sposób na przyspieszenie funkcji jądra kmalloc(), pozwalając jej na szybkie przechodzenie po regionach pamięci, które są w oczywisty sposób zbyt małe. Podesłał łatkę na 2.5.44-mm5 i poprosił o komentarze. Alan Cox zapytał o porównania wydajności, a Manfred podesłał trochę danych:

Uruchomiłem moje mikrotesty tafli dla 3 wersji:

Test zgłasza najkrótszy czas dla 100 wołań kmalloc w pętli (Duron 700). Odjąłem narzut pętla/test.

32-bajtowe alloc:
current:         41 tyknięć
generic_fls:     56 tyknięć
bsrl:            54 tyknięcia
4096-bajtowe alloc: 84 tyknięcia
generic_fls:     53 tyknięcia
bsrl:            54 tyknięcia

Różnica 40 tyknięć dla -current pomiędzy 4096 a 32 bajtami - ~4 cykle dla każdej pętli. bit scan jest o 10 tyknięć wolniejszy dla alokacji 32 bajtów i o 30 tyknięć szybszy dla alokacji 4096 bajtów.

Nie ma różnicy pomiędy generic_fls a bsrl - łatwo można przewidzieć wszystkie rozgałęzienia w generic_fls dla stałych wołań kmalloc.

Nikita Danilov zasugerował: "Większość wołań kmalloc dostaje argument o stałym rozmiarze (zwykle sizeof(cośtam)). Zatem, jeśli w pętli użyte jest switch() (a kmalloc jest inline), kompilator będzie mógł zupełnie zoptymalizować wybór cache_sizes[]. Załączona (paskudna) łatka to robi." Marcus Alanen zwrócił uwagę: "Być może warto testować w trakcie kompilacji, czy argument jest stałą i tylko w takim wypadku wołać Twoje nowe kmalloc, w innym wypadku wołać kmalloc, które nie jest inline. Przy Twojej obecnej łatce, argument rozmiaru dla kmalloc, który nie jest stały, oznacza, że funkcja nie jest inline i prowadzi do niepotrzebnego narzutu w wynikowym obrazie." Nikita zgodził się z tym, a Manfred napisał:

Zgadzam się, mam starą łatkę, która to robi.

http://www.colorfullife.com/~manfred/slab/patch-km_div

Zignorujcie proszę część dotyczącą stałego przecinka, bo nie jest potrzebna, instrukcje 'div' są teraz poza centrum zainteresowania.

Problem polega na tym, że drzewo -mm zawiera około 10 łatek dla tafli. Chcę je zobaczyć w drzewie Linusa, zanim dodam następne łatki.

2. Dynamicznie rosnące systemy plików ext2 i ext3

29 Oct 2002 - 2 Nov 2002 (6 posts) Archive Link: "[PATCH] 2/11 Ext2/3 Updates: Extended attributes, ACL, etc."

People: Theodore Y. Ts'oJeff GarzikAlexander Viro

Theodore Y. Ts'o wysłał łatkę i wyjaśnił: "Ta łatka służy zgodności z przyszłymi systemami plików, które mogą dynamicznie rosnąć przy użyciu alternatywnego algortymu przechowywania deskryptorów grup bloków. Jest on także odrobinę bardziej efektywny, w tym sensie, że zużywa troszkę mniej przestrzeni na dysku. Obecny format systemu ext2 wymaga albo realokacji tabeli i-węzłów, albo zarezerwowania w niej miejsca przed wykonywaniem w locie zmiany rozmiaru." Podał odnośnik do artykułu USENIX zatytułowanego Planowane rozszerzenia systemu plików Ext2/3 autorstwa jego i Stephena C. Tweedie. Jeff Garzik zapytał: "Czy interfejsem do tego ma zostać ext2meta? Al i sct (Stephen C. Tweedie -- przyp. tłum.) wydają się zgadzać, że to byłoby najlepszym sposobem postępowania z metadanymi systemu plików w locie... Prawdopodobnie zaktualizuję to w związku ze zmianami VFS w 2.5.x w ciągu paru tygodni, dostarczone zostanie defrag w locie i dobry interfejs do interakcji z innymi metadanymi." Theodore odpowiedział:

Nie jestem pewien, czy ext2meta będzie wystarczające. To nie tylko kwestia modyfikacji metadanych na dysku, co będzie potrzebne dla defrag, ale będę również potrzebował modyfikować część wewnętrznych danych w strukturach danych systemu plików ext2/3. Na przykład, gdy zmieniasz rozmiar systemu, to musisz zwiększyć liczbę deskryptorów grup, co oznacza, że musisz wykonać kmalloc, skopiować, a potem zwolnić sbi->group_desc na zamontowanym systemie plików.

Nie mam wątpliwości, że ext2meta może być zmodyfikowane i może sięgać po wewnętrzne struktury danych systemu plików ext2/3. Ale związane z tym problemy z blokowaniem powodują bałagan.

Mój oryginalny plan zakładał zaadaptowanie łatki Andreasa Dilgera, która pozwalała zmieniać rozmiar, żeby użyć nowego układu grup bloków, co pozwoliłoby ominąć wymaganie położenia systemu plików i uruchomienia ext2prepare. Nie jestem przeciwny próbie zrobienia tego przy użyciu ext2meta, ale wydaje mi się, że to może się dość szybko skomplikować.

Alexander Viro zauważył: "W każdym z praktycznych celów, ext2meta jest częścią ext2 - ten sam sterownik, dwa typy systemów plików. Blokowanie nie jest aż tak przerażające, przy okazji - patrzyłem na to jakiś czas temu i wyglądało na wykonalne." Jeff zgodził się z tym stwierdzeniem i napisał, że podeśle łatkę w ciągu następnych kilku tygodni.

3. Nowy, bardzo kompresowalny system plików SquashFS

29 Oct 2002 - 2 Nov 2002 (16 posts) Archive Link: "ANNOUNCEMENT: Squashfs released (a highly compressed filesystem)"

People: Phillip LougherRob Landley

Phillip Lougher ogłosił:

Pierwsza publikacja squashfs. Squashfs jest bardzo kompresowalnym systemem plików dla Linuksa tylko do odczytu (jądra 2.4.x). Używa kompresji zlib do pakowania zarówno plików, i-węzłów, jak i katalogów. I-węzły w systemie są bardzo małe i wszystkie bloki są tak pakowane, żeby zminimalizować narzut danych. Obsługiwane są bloki większe niż 4K, ale maksymalnie jest to 32K.

Squashfs jest przeznaczony do ogólnego użycia tylko do oczytu, do użycia jako archiwum i w systemach wbudowanych, gdzie wymagany jest niski narzut.

Squashfs jest dostępny pod adresem: http://squashfs.sourceforge.net.

Łatka nakłada się obecnie na 2.4.19. Więcej informacji na temat projektu systemu plików i o podobnych rzeczach w README.

Samuel Flory spytał, jak squashfs się ma do istniejącego projektu cramfs, a Phillip wyjaśnił:

Cramfs był inspiracją dla squashfs. Najogólniej, squashfs oferuje lepszą kompresję, obsługę większych plików i systemów plików i więcej informacji w i-węzłach.

  1. Obsługiwane są bloki o rozmiarach do 32K - dane są kompresowane w 32K jednostkach, co pozwala osiągnąć lepszą kompresję niż udaje się to przy użyciu bloków 4K. W ogólnym przypadku, używanie bloków większych niż 4K nie jest dobrym pomysłem, bo VFS woła system plików w stronach 4K. Squashfs bezpośrednio umieszcza dodatkowe dane w cache stron.
  2. Squashfs, oprócz danych z plików, kompresuje informację dotyczącą i-węzłów i katalogów. I-węzły/katalogi zwykle dają się skompresować w 50%, pojedyncze i-węzły mają średnio 8 bajtów lub mniej.
  3. Wszystkie dane systemu plików są pakowane bajtami, oszczędzając parę bajtów na każdym i-węźle i katalogu.
  4. Składowane są pełne 32-bitowe uidy i guidy (4 bity w i-węźle, używana jest tablica wyszukiwania, żeby dostać 48 uidów/16 gidów). Obsługiwane są pliki o wielkości do 2^32. Jest trzymany stempel czasowy. Cramfs obcinał uidy do 16 bitów, gidy do 8 bitów. Rozmiary plików w cramfs nie przekraczały 2^24. Nie było stempla czasowego. Squashfs korzysta z kompresji metadanych tak, żeby mieć więcej informacji przy mniejszym narzucie.
  5. Zawartości dowiązań symbolicznych czy indeksów plików są przechowywane wewnątrz tablicy i-węzłów, co daje lepszą kompresję niż gdyby były kompresowane osobno albo w ogóle.
  6. Program mksquashfs nie przechowuje/mmapuje systemu plików tak, jak został on zrobiony (wykonuje sprawdzenie duplikacji plików na częściowo zapisanym skompresowanym systemie plików), więc pozwala na tworzenie większych systemów plików.

Więcej informacji jest zawartych w README...

Jeff Garzik wspomniał, że świetny byłby skompresowany system plików, który umożliwiałby też zapis. Phillip odpowiedział:

Skompresowany system plików z możliwością pisania być może będzie moim następnym projektem... Jak wspomniało parę osób, takie systemy są dostępne.

Jak wiecie, w projektowaniu systemów plików zawsze jest coś za coś; bardzo trudno jest uzyskać tak dobrą kompresję, gdy umożliwa się pisanie, jak tę, gdy system jest tylko do odczytu. Chciałem uzyskać maksymalną kompresję i całkiem wiele technik, których użyłem opiera się na tym, że system jest tylko do odczytu.

System, który pozwala jedynie dołączać, ale nie modyfikować pliki mógłby okazać się sensownym kompromisem. Przy skompresowanych metadanych, dowolna modyfikacja plików spodwoduje inne wyniki kompresji, więc modyfikacja metadanych/plików ,,w miejscu'' nie jest możliwa. Dołączanie zmodyfikowanych metadanych i danych powoduje, że musimy mieć system plików z księgowaniem, a wymaganie czyszczenia tego logu powoduje stratę kompresji.

Rob Landley odparł:

Skompresowany system plików z dynamicznie aktualizowanymi plikami z dostępem bezpośrednim sam się szybko sfragmentuje (Włazisz gdzieś do środka pliku, zapisujesz blok, idziesz gdzieś indziej, zapisujesz inny blok, powtarzasz to 1000 razy... Trzeba pamiętać, że nowy skompresowany blok danych będzie prawie na pewno miał inny rozmiar niż ten stary... To bałagan.)

Moje potencjalne wykorzystanie jest następujące: mam małą dystrybucję linuksa, którą sam złożyłem i nazwałem ,,firmware linux''. Buduję ją ze źródeł i w wyniku mam obraz zisofs zamontowany po loopbacku jako główny system plików. (Wersję bardzo alfa można zassać z: http://216.143.22.141/firmware/fwl-0.8.tar, wyedytować 'build.sh' żeby określić katalog wyjściowy, a potem uruchomić. Wszystko polega na tym, że cały system operacyjny i wszystkie aplikacje mogą być uaktualniane przy pomocy jednego pliku. Nie ma żadnego zarządzania pakietami, mamy tylko jeden wielki obraz.)

Powodem, dla którego użyłem zisofs zamiast cramfes jest to, że cramfs ma DUŻO problemów z dużymi systemami plików. (Końcowa partycja root, z apache, sambą, ntopem, pythonem, rsyncem, openssh i wszystkim w ogóle, zajmuje obecnie około 100 mega. Jasne, jeśli będe miał czas, mogę to trochę zmniejszyć, ale teraz kompiluję i rozwijam to na samym sobie, więc mam tam gcc, cały zestaw podręczników systemowych i wszystko..)

Mkcramfs chyba się krztusi na czymś, co ma około 16 mega, co jest naprawdę ograniczające. Wydaje się TEŻ, że próbuje otworzyć równocześnie wszystkie pliki (wykrywanie twardych dowiązań?), więc zaczyna mu brakować uchwytów plików (Znowu, to można poprawić gdzieś w /proc, ale nie warto.)

Wydaje mi się zatem, że lepiej to testować na zisofs niż na cramfs. Patrzyłeś na to?

Spojrzę na to sam i dam Ci znać...

A Phillip napisał:

Podczas pisania squasfs oglądałem cramfs i ziosfs. Ziofs jest fajnym systemem plików, ale ma tendencję do większego narzutu spodowodwanego systemem plików isofs. W trakcie testów stwierdziłem, że obrazy zisofs są większe od systemu plików squashfs o od 5% (pojedynczy katalog z wieloma małymi binarkami) do 61% (dużo zagnieżdżonych katalogów).

Wierzę, że squashfs jest użyteczny dla Twoich zastosowań. Troszkę się waham, mówiąc to, bo wolałbym żeby ludzie sami sobie go ściągneli i sami wyrobili sobie pogląd na tę sprawę :-)

Dziękuję za wypróbowanie tego, mam nadzieję, że się spodobało. Oczywiście jestem zainteresowany Twoimi przemyśleniami na ten temat.

4. Linux 2.5.45 opublikowany

30 Oct 2002 - 1 Nov 2002 (22 posts) Archive Link: "Linux v2.5.45"

People: Linus TorvaldsAlexander ViroRoman Zippel

Linus Torvalds ogłosił 2.5.45 i napisał:

Duże zmiany, mnóstwo włączeń. Część z nich naprawdę istotna.

Device mapper (LVM2), rzeczy sieciowe typu crypto/ipsec, epoll i szansa dla nowego konfiguratora jądra. Duże rzeczy.

I _dużo_ doraźnych modyfikacji, od różnych uaktualnień architektur po USB, ISDN i ALSA. Łączenie z Andrew & Alanem i innymi. Bierzcie i testujcie.

Aaron Lehmann zwrócił uwagę, że 'make oldconfig' i 'make menuconfig' zależy teraz od graficznej biblioteki QT, co wydało mu się bezsensowne. Alexander Viro zauważył: "Usuń 'false' z regułki, która pokazuje to denerwujące cholerstwo o braku QT (_tak_, _wiem_, że nie mam tej kupy zainstalowanej, dziękuję bardzo za przypomnienie). To nie rozwiązuje jednak problemu upierdliwości." A Roman Zippel odpisał: "Jasne, to błąd. Poniższa łatka naprawia to zachowanie bez psucia xconfig. Linus, nałóż proszę."

5. Dokumentacja Kconfig

31 Oct 2002 - 2 Nov 2002 (22 posts) Archive Link: "Where's the documentation for Kconfig?"

People: Rusty RussellRoman Zippel

Matthew Wilcox zapytał gdzie mógłby znaleźć dokumentację nowego, niedawno dodanego do jądra, systemu konfiguracji kconfig, Roman Zippel podał odnośnik na: http://www.xs4all.nl/~zippel/lc/. Christoph Hellwig zaproponował uaktualnienie Documentation/kbuild/config-language.txt nową informacją, a Roman odpowiedział, że wkrótce to zrobi. Rusty Russell zwrócił uwagę: "Dokumentacja jest świetna i dobrze by było zastąpić to, co jest jądrze. Sądzę też, że jest wyjątkowo łatwo jej użyć ,,na głupa'', robiąc to, co tam napisano, co jest *naprawdę* świetne, bo właśnie tak ludzie używają dokumentacji. Co więcej, nigdy nie zdawałem sobie sprawy, jak wolne było stare ,,make oldconfig''."

W innym miejscu Russell King zapytał, czy napisano jakieś narzędzie do konwersji pliku Config.in do jego równoważnika w kconfig. Zwrócił uwagę, że istniejące lkcc jest zbyt wszechstronne, bo konwertuje całe drzewa, ale nie pojedyncze pliki. Rusell miał trochę częściowo skonwertowanych ścieżek i całość była dość niespójna, w każdym razie, lkcc na tym by nie zadziałało. Roman zaproponował: "Możesz umieścić swój plik w arch/tmp/config.in i zrobić 'lkcc tmp'. Konwersja całego drzewa jest najlepszym rozwiązaniem, bo lkcc potrzebuje pełnej informacji o każdym z użytych symboli, żeby naprawdę dobrze działać. Najłatwiejszym rozwiązaniem jest prawdopodobnie wzięcie łatki na 2.5.44 z mojej strony, wygenerowania diffa w stosunku do Twojego skonwertowanego drzewa 2.5.44 i nałożenie go. Jeśli prześlesz mi łatkę na 2.5.44 generującą Twoje drzewo, to mogę to dla Ciebie zrobić." To wystarczyło Russellowi.

6. Stan Xiafs w 2.5

31 Oct 2002 - 1 Nov 2002 (11 posts) Archive Link: "Xiafs inclusion in 2.5?"

People: Carl-Daniel HailfingerLinus Torvalds

Carl-Daniel Hailfinger zacytował list Linusa Torvaldsa z 2000 roku, w którym Linus napisał: ,,Kto jeszcze pamięta xiafs? W drzewie jądra mamy 33 różne systemy plików - to robi wrażenie i chyba nikt nigdy nie próbował tylu wspierać. Ale moglibyśmy mieć 34..'' Carl odpowiedział teraz: "Z czystej ciekawości, czy zaakceptowałbyś ponownie xiafs w 2.5, jeśli zostałby wyczyszczony i przeniesiony do nowych interfejsów. I jeśli tak, to kiedy najpóźniej mogę Ci go przesłać? Technicznie to jest krok w tył, ;-), więc dzień zamrożenia funkcjonalności nie musi mieć tu zastosowania." H. Peter Anvin miał wrażenie że nie ma żadnego sensu by to robić, ale Carl odpowiedział, że to byłaby zabawa! Andries Brouwer poszperał trochę w swoim domu i znalazł starą dyskietkę w formacie Xiafs. Napisał, że chciałby móc ją znów odczytać bez uruchamiania jądra 2.0. W innym miejscu Linus Torvalds odpowiedział na pierwszą wiadomość Carla: "Szczerze mówiąc to pewnie _bym_ to zaakcetował, jeśli byłoby ładnie zrobione. Jeśli tak, to tylko dlatego, że zrobienie tego jest zupełnie absurdalne i tym samym dostaje dużo punktów w mojej ,,skali surrealności''." Dodał: "Jasne, sądzę, że xiafs nie ma zbyt wiele wspólnego z zamrożeniem funkcjonalności. Nie ma też zbyt wiele wspólnego ze zdrowym rozsądkiem. Widziałem, że Andries ciągle ma gdzieś jedną dyskietkę xia, co prawdopodobnie stawia go w raczej unikatowej pozycji. Trudno mi sobie wyobrazić, że kogoś naprawdę to obchodzi, to tylko ironiczna forma zajęć komputerowych w stylu retro..." To zainspirowało Carla żeby poprosić Andriesa o obraz jego dyskietki, a Andries podał mu odnośnik.

7. Swap-Space Mini-Howto

1 Nov 2002 - 5 Nov 2002 (20 posts) Archive Link: "[announce] swap mini-howto"

People: Gabor MICSKO

Randy Dunlap zdziwił się, że nie znalazł żadnego małego dokumentu traktującego o przestrzeni wymiany, więc stworzył taki dokument i podał tymczasowy odnośnik do niego. Wiele osób także wyraziło zdumienie, że nie powstał wcześniej podobny dokument. Różni ludzie przeczytali tekst Randy'ego i zaproponowali różne rzeczy; klika osób napisało, że najlepszym miejscem dla niego jest Linux Documentation Project. W pewnym miejscu Gabor MICSKO napisał też: "Przetłumaczyłem ten dokument na węgierski. Przetłumaczona wersja znajduje się pod adresem: http://www.hup.hu/modules.php?name=News&file=article&sid=1976"

[od red.: polskie tłumaczenie tego dokumentu, wykonane przez Jacka Politowskiego dostępne jest pod adresem http://jacek.rallypl.eu.org/tlumaczenia/swap-mini-howto.txt.]

8. Stan initramfs

2 Nov 2002 - 4 Nov 2002 (18 posts) Archive Link: "[BK PATCHES] initramfs merge, part 1 of N"

People: Jeff GarzikLinus TorvaldsAlexander Viro

Jeff Garzik napisał:

Poniżej załączam pierwszą z kilku zmian dla initramfs / wczesnego uruchamiania w przestrzeni użytkownika.

Ta zmiana jest celowo bardzo prosta i nie da wyobrażenia swojej wartości aż do następnego tygodnia, kiedy to łatki numer 2 i 3 przybędą do Waszych skrzynek. Opis ,,przyszłości'' umieściłem po opisie tego szczególnego zbioru zmian.

  1. Wprowadzone zostało samo init/initramfs.c, które jest modułem, który dekompresuje archiwum .cpio.gz i używa go do zasilenia rootfs plikami, bardzo wcześnie w procesie startowania systemu (między signals_init i proc_root_init w init/main.c). Zobaczycie krótką listę rozpakowanych plików w dmesg. Musimy to na razie zostawić (na razie jest to też małe), ale być może usuniemy te napisy na ekranie/w logu, albo wrzucimy do KERN_DEBUG jeszcze przed wypuszczeniem 2.6.x:

       -> plik1
       -> plik2
       -> itp...

    (uwaga opiekunowie architektur!)

  2. Wprowadzono ARCHBLOBLFLAGS do arch/$arch/Makefile, żeby móc zamienić dowolny binarny obiekt w plik .o używając objcopy.
  3. Włączono archiwum initramfs cpio do obrazu vmlinux przez arch/$arch/vmlinux.lds.S w sekcji init.
  4. Wprowadzono nowy katalog linux/usr. Aktualnie nie jest zbyt interesujący, zawiera tylko mały programik, który generuje początkowe archiwum cpio, gen_init_cpio. Program zniknie, gdy wczesne wejście w przestrzeń użytkownika będzie się rozwijało. Obecnie istnieje, aby pokazać, że initramfs działa, umożliwiając nam usunięcie trzech linijek z init/do_mounts.c.

Kontynuował opisując przyszłe rozwiązania:

Wczesne wchodzenie do trybu użytkownika zostanie włączone w formie serii ewolucyjnych zmian, zgodnie z tym co nazywam ,,modelem Ala Viro''. ZACHOWANIE JĄDRA NIE POWINNO SIĘ ZMIENIĆ. [to dla słuchaczy lkm, nie dla Ciebie <g>] 'make' wciąż będzie Działało Właściwie (tm) na wszystkich platformach, podzczas, gdy obraz jądra będzie się ciągle zmniejszał. Oto początkowy plan ,,wczesnego trybu użytkownika'', to znaczy opis łatek, które zobaczycie w przyszłym tygodniu:

#2 - włączenie klibc.

Jak już wcześniej powiedziałem, nie jestem pewien, czy uda się usunąć klibc przed wypuszczeniem 2.6.x, czy nie. Komentarze mile widziane. Na razie klibc będzie włączona do paczki z jądrem, bo w przeciwnym wypadku zmiana wersji w trakcie ewolucji wczesnego trybu użytkownika byłaby prawdziwym wrzodem na dupie i spowolniłaby go. klibc to malutka libc napisana specjalnie dla jądra.

Ta łatka doda klibc do systemu budowania jądra i stworzy maleńki, statycznie dołączany binarny plik ,,kinit''. kinit to początki wczesnego trybu użytkownika. Odrobina kodu z do_mounts.c przejdzie do kinit w łatce #2, tylko tyle, żeby udowodnić, że system działa.

#3 - przeniesienie initrd do trybu użytkownika

Niestety, aż do tej łatki nie zobaczymy pożytków płynących z wczesnego trybu użytkownika, ale tak działa ewolucja :) Tutaj kod odpakowujący initrd jest przenoszony do trybu użytkownika, przenoszone jest wszystko, co jest możliwe do przeniesienia. Część kodu initrd musi zostać w jądrze, bo to, jak uzyskać obraz initrd z bootmem [albo skądkolwiek] zależy od architektury, ale istotna większość kodu initrd przeszła test (oja!). Zachowanie initrd nie zmieni się zupełnie. Zostanie tylko po prostu przesunięte do wczesnego trybu użytkownika. Użytkownicy nie będą musieli sami nic robić, żeby upewnić się, że ich istniejące konfiguracje działają -- wymaganie takiego działania jest moim błędem.

Ta łatka zamieni także 'kinit' na współdzielone binarium i wprowadzi binarkę gzip do wczesnego trybu użytkownika. [odnośnie tego patrz też na ,,pozycje do dyskusji'' poniżej]

#4 - przesunięcie montowania roota do trybu użytkownika

Ludzie już prawdopodobnie odetchnęli z ulgą przy łatce #3, jeszcze głębiej odetchną przy tej łatce :) Przesuwa ona montowanie systemu plików root do wczesnej przestrzeni użytkownika, włączając w to pozbycie się kodu NFSroot/bootp/dhcp z jądra.

#N - do nieskończoności ... i jeszcze dalej!

Będę, i mam nadzieję, że inni też, kontynuował serię łatek ewolucyjnych i będę przesuwał coraz więcej rzeczy do wczesnego trybu użytkownika. Możliwości jest wiele, czekam na doniesienia innych na temat użytecznych rzeczy do przesunięcia, sam też będę pracował nad znalezieniem takich rzeczy.

Podał też pomysły do dyskusji:

Pozycje do dyskusji:

#1 - współdzielone kinit

'kinit' jest binarką wczesnego trybu użytkownika, ale niekoniecznie jedyną taką. Peter Anvin i Russell King mają trochę binariów w paczce klibcowej: gzip, ash i kilka mniejszych narzędzi. Peter włożył także trochę pracy w to, żeby klibc był obiektem współdzielonym, który nie potrzebuje shlib. Moim zdaniem zrobił to pierwszorzędnie: binaria skonsolidowane z klibc są dla systemu ELF binariami statycznymi, ale dzięki pewnemu trikowi współdzielą klibc.so.

W każdym razie, jest pewna elegancja w dodaniu kodu do kinit zamiast eksplozji binarek i skryptów powłoki. Jest jednak druga strona medalu - dla elegancji poświęca się łatwość dokonywania zmian. Jestem w 60% pewien, że chcemy współdzielonego klibc i wielu binariów, ale jestem też skłonny zgodzić się z przeciwnym zdaniem. Po przemyśleniu, wydaje się, że _jest_ trochę korzyści z zostawienia kinit w formie pojedynczego pliku binarnego w jądrze z wczesnym trybem użytkownika. Decyzja nie była zatem taka prosta, jak to może się od razu wydawać.

#2 - klibc w paczce jądra

Wchodzi, narazie. To nie podlega dyskusji. Jednakże w przyszłości... Znam starą maksymę głoszącą, że ,,jak raz weszło, to już nigdy nie wyjdzie''. Być może to jest właśnie ten przypadek, ale jeśli nawet, to co z tego. Znam conajmniej kilka osób, które chciałyby, żeby klibc opuścił źródła jądra przed wydaniem 2.6.0. Oczekuję komentarzy na ten temat, choć myślę, że nie będziemy w stanie odpowiedzieć na to pytanie zanim termin wydania 2.6.0 nie stanie się naprawdę bliski.

Podsumował:

I to by było na tyle. Pytania, komentarze i oburzenie mile widziane. Jeśli opuściłem jakieś korzyści z wczesnego wejścia w przestrzeń użytkownika, to dajcie mi znać. Jeśli wiecie o jakichś dobrodziejstwach wynikających z przejścia do wczesnego trybu użytkownika, to dajcie mi znać. Jeśli na mojej drodze są jakieś przeszkody, o których nie wspomniałem, to dajcie mi znać.

Podziękowania: Al Viro za pracę nad initramfs. hpa, rmk, Greg KH, Alan i niezliczona liczba innych osób, które poddały pomysły, jeśli nie sam kod, przybliżające uzyskany wynik. I dziękuję naszemu Pingwinowi Imperatorowi za to, że dał mi spokój, gdy przegapiłem Halloween, bo spędziłem 24 godziny na szukaniu mojego _niewiarygonie_ głupiego błędu. Zasłużyłem nie na jedną, ale na dwie torby z szarego papieru.

Aaron Lehmann zadał pytanie czy to pozwoli szybko zmniejszyć jądro, ale Linus Torvalds napisał:

Zauważcie, że powodem, dla którego osobiście chciałem mieć initramfs nie było zmniejszenie obrazu jądra, ani zmniejszenie jego źródeł. To nie zdarzy się jeszcze długo, jako że podejrzewam, iż będziemy jeszcze trochę wozić ze sobą initramfs w przestrzeni użytkownika (w końcu pewnie się odłączy jako osobny projekt, ale oczywiście w przewidywalnej przyszłości będzie blisko związany z jądrem).

Prawdziwy zysk jest według mnie dwojaki:

Na mojej liście nie ma ,,skurczenia jądra''. To raczej kwestia tego, że ,,część incjalizacji lepiej zrobić w trybie użytkownika'', a nie głównie tego, że ,,chcemy mieć mniejsze jądro''. Nie wierzę zbytnio w mikrojądra i próby wydostania wszystkiego z jądra, ale _wierzę_, że czasem łatwiej jest pozwolić użytkownikowi na działanie zgodne z jego wyborem (dając mu jednak ochronę taką, jaką daje tryb użytkownika).

Alexander Viro dodał trzeci punkt do dwupunktowej listy Linusa:

przestrzeń użytkownika jest bardziej ograniczona. I to nie jest czeski błąd - to dobra rzecz. Przestrzeń użytkownika musi używać normalnych wołań systemowych, nie wkłada swoich paluchów w cholera wie jakie struktury danych jądra.

To oznacza, że jest to bardziej pewne i nie staje na drodze pracy jądra. 90% bólu z super.c było tego typu - montowanie systemu plików root było robione przy pomocy ohydnych sztuczek i, co więcej, te paskudztwa były filtrowane w normalnej ścieżce wykonywania. Pozbycie się tego zabrało _dużo_ uważnych manipulacji w całości. I zgadnijcie co? Nie ma powodu, dla którego ta czarna magia byłaby niezbędna - obecny kod używa normalnych, dostępnych dla wszystkich, wołań systemowych.

W wyniku tego mieliśmy specjalne przypadki mount(2) itd, z bardzo nieporządną semantyką. Nie były one pokazywane przestrzeni użytkownika, bo to nie sprawiło, że były mniej paskudne, albo że łatwiej było z nimi pracować. One ciągle zaśmiecają kod, ciągle przeszkadzają w pracy nad tym i ciągle są paskudne.

I temu zapobieże przesunięcie kodu do przestrzeni użytkownika - dużo łatwiej złapać kogoś, kto daje łatkę z magicznym rozszerzeniem wołania systemowego, niż złapać próbę wciśnięcia kodu dotyczącego przypadku specjalnego, który jest używany tylko przez jądro.

W każdym razie, to jest rzecz, na którą musimy uważać - oczywiście będzie wiele łatek przenoszących coś do przestrzeni użytkownika i pojawi się silna pokusa dodawania magicznych interfejsów jedynie w tym celu. _Temu_ powinniśmy zapobiec - lepiej zostawić paskudne śmieci tak jak są, niż przenosić je do przestrzeni użytkownika. Wszystko polega na tym, żeby mieć wyczyszczony kod i upewnić się, że może zostać czysty, a nie poprawiać go dodając magiczne ioctl/syscalle/flagi/conieco. Możemy równie dobrze dodać coś do istniejących interfejsów, ale do cholery, lepiej upewniajmy się, że takie dodatki są sensowne w ogólnych przypadkach.

Mamy sporo paskudztwa, które nie byłoby potrzebne, gdybyśmy mieli wczesny dostęp do zapisywalnych systemów plików. Mamy magiczne metody, magiczne ścieżki wykonywania kodu itp, głównie dlatego, że normalny dostęp do żądanej funkcjonalności wymagał otwierania deskryptorów plików. Teraz _mamy_ zapisywalny system plików bardzo wcześnie montowany, zatem ten syf można wyrzucić. Przesunięcie kodu do przestrzeni użytkownika działa jak filtr - tam nie mamy dostępu do magii, więc cała ta magia nagle się pokazuje. To może być zrobione w jądrze (i całkiem wiele rzeczy zostało juz tam zrobionych), ale przejście do trybu użytkownika zrobi za strażnika niepozwalającego na ponowne wprowadzenie magicznego śmiecia.

9. Nowy otwarty zestaw testów POSIX

4 Nov 2002 - 5 Nov 2002 (24 posts) Archive Link: "[ANNOUNCE] Open POSIX Test Suite"

People: Geoff GustafsonLarry McVoyJeff Garzik

Geoff Gustafson ogłosił:

Chciałbym ogłosić nowy projekt, którego celem jest stworzenie lub/i zebranie zestawu testów POSIX-owych API. Testy skupią się na zgodności z IEEE Std 1003.1-2001, ale będą także zawierały oddzielne testy funkcjonalności i zachowania przy dużym obciążeniu.

Obecne podejście projektu do testowania zgodności polega na zapisie twierdzeń wynikających z wnikliwego czytania specyfikacji POSIX i zapisaniu minimalnych przypadków testowych, które potwierdzą lub odrzucą te twierdzenia. Zestaw testów będzie niezależny od szczegółowych implementacji API, a na koniec będzie łatwo konfigurowalny w celu użycia go przy różnych implementacjach. Projekt zakłada niezależność od systemu operacyjnego, używa tylko API POSIX-owych, autoconfa i prostej obsługi w języku powłoki. Jest jednak obecnie testowany na Linuksie.

Docelowo, plan przewiduje użycie zestawu testów do oceny obecnego wsparcia POSIX w Linuksie oraz rozważenia nowych implementacji przez społeczność open source i przesyłania łat albo przynajmniej raportów o błędach (w minimalnych przypadkach testowych) we właściwe miejsca, takie jak LKML.

Przypadki testowe, przeglądy mojej pracy, dyskusje podejścia do sprawy itp. są mile widziane. Zapiszcie się na listę dyskusyjną, posixtest-discuss. Na początku skupiamy się na sygnałach, kolejkach komunikatów, wątkach, semaforach, zegarach i licznikach czasu. Wybór ten wynika z aktualnych zainteresowań i zasobów. Możecie pomóc w tym obszarze, albo zacząć pracować nad innym kawałkiem specyfikacji. W całym zestawie potrzebne będzie pewne ujednolicenie, ale wiele szczegółów musi być jeszcze dopracowanych, zatem Wasze zaangażowanie w podjęcie tych decyzji będzie bardzo pomocne.

Więcej informacji o projekcie znajduje się pod adresem: http://posixtest.sourceforge.net

Larry McVoy odparł:

Świetny pomysł. Możemy pomóc Ci w następujący sposób: BitKeeper ma wyjątkowo proste oprzyrządowanie do testowania, używane do regresji. Wiadomo dobrze, że bardzo łatwe jest pisanie prostych testów i uruchamianie ich osobno lub w zestawie. Jeśli chcesz to oprzyrządowanie, to damy Ci je na takiej licencji, na jakiej chcesz, zakładam, że będzie to GPL, ale zbytnio nam na tym nie zależy.

Możesz zobaczyć jak wyglądają testy w BK, jeśli masz go zainstalowanego, dostarczamy wszystkie testy, są umieszczone w `bk bin`/t

Prosty test mógłby wyglądać następująco:

        #!/bin/sh

        # sprawdzenie, czy touch tworzy plik
        touch foo
        test -f foo || {
                echo nieudane stworzenie foo
                exit 1
        }

Nasze oprzyrządowanie dba, żeby odbyło się to w czystym, wyizolowanym środowisku.

Geoff napisał, że to byłoby świetne i że wypróbuje BitKeepera.

W innym miejscu Jeff Garzik spekulował:

Ciekawi mnie, czy jacyś producenci albo niezależne grupy byliby zainteresowani w utrzymywaniu zestawu łatek na jądro, dającego zgodność jądra Linuksa z POSIX?

Moim zdaniem projekt ,,POSIX Linux'' byłyby użyteczny z kilku powodów. Najogólniej, wydaje mi się, że z paru stron istnieje pewna presja na to, żeby w jądrze znalazły się wszystkie rodzaje API z POSIX. Czasami hakerzy jądra stają w sytuacji, w której zupełna zgodność z POSIX może oznaczać kompromis w jakimś obrzarze, to może być wydajność, bezpieczeństwo, kwestie API, problemy z czyszczeniem kodu, itp. Albo po prostu kod POSIX-owy nie jest po prostu jeszcze gotowy do włączenia do głównego jądra.

Producenci także mieliby z tego zysk, bo zmniejszyłaby się bariera wejścia w przypadki związane z POSIX, co potem zamieniłoby się w spełnienie oczekiwań klientów. Co z kolei dałoby głównemu drzewu jądra wszystkie korzyści wynikające z bardziej sensownego przeglądania i włączania nowych cech.

Czy coś takiego już istnieje? To musiałby być projekt otwarty, niezależny od producenta...

Rik van Riel zgłosił się na ochotnika, a Geoff dodał: "Zgadzam się, że to wydaje się użyteczne. Mogę zrobić coś takiego jako część mojego projektu zestawu testów; rozszerzyłoby to jego zasięg o testowanie i raportowanie stanu ostatnich łatek." Andreas Dilger zasugerował, że być może lepiej użyć istniejącego zestawu testów z X/Open; ale parę osób (włączając w to Geoffa) zwróciło uwagę, że testy X/Open rozszerzeń POSIX, nowsze niż te z 1990 roku, nie są wolne.

Parę osób zasugerowało, że praca Geoffa pasuje do projektu LTP. Geoff zauważył, że LTP wydaje się zajmować tylko testowaniem interfejsów, które zostały już zaimplementowane w jądrze, a jego projekt skupia się na testowaniu interfejsów, których jeszcze nie ma i testowaniu ich zarówno w jądrze, jak i w przestrzeni użytkownika. Jednak paru ludzi z LTP napisało, że LTP chciałoby rozszerzyć swój zestaw testów o takie zagadnienia. Wątek zakończył się bez konkluzji.

10. Płacenie za łatki

5 Nov 2002 - 6 Nov 2002 (5 posts) Archive Link: "PATCH: Driver Maintainers"

People: Alan CoxLinus Torvalds

Alan Cox podesłał dziwną łatkę i wyjaśnił:

Pojawia się coraz więcej ludzi, którzy chcą się ode mnie dowiedzieć, komu mogą zapłacić za naprawienie drobnych błędów w Linuksie i mają problem w znalezieniu mniejszych firm. Oczywiście, jeśli chce się wysłać 1000$ za naprawianie sterownika, to nie działa to w przypadku, gdy mamy do czynienia z dużymi firmami.

Jedną z rzeczy, które robi FSF i która ma sens, jest trzymanie w pakietach listy ludzi, którym można zapłacić, żeby coś w tych pakietach poprawili. Zadałem pytanie na Linux-kernel i dostałem mały, początkowy zbiór odpowiedzi z firm. Mam nadzieję, że będzie ich więcej po włączeniu tej łatki.

Lista jest alfabetyczna w wystarczająco logiczny sposób

[Marcelo, to się nakłada ładnie także na 2.4 ]

Linus Torvalds odpowiedział:

Naprawdę wolałbym gdyby były jakieś wyraźne wytyczne co do tego. Jeśli nawet nie popieram tego, nie chciałbym, żeby podrzucono nam tam nieświeże jajeczko (zakładając, że lista bardzo się rozszerzy, co myślę, że może się stać) i powstały z tego powodu problemy.

Wolałbym także, żeby było to wyraźnie przeznaczone tylko dla pojedynczych osób i małych firm (,,mniej niż x ludzi''), albo żeby w jakiś inny sposób zapewnić, że jest to zrównoważone i że odpowiada oczekiwaniom ludzi (zarówno użytkowników listy jak i ludziom, którzy się na niej znajdą).

I czy źródła jądra są naprawdę właściwym miejscem ku temu, mając na uwadze fakt, że wiele osób będzie miało źródła sprzed kilku lat i nie będzie żadnego sposobu, by usunąć potencjalne problematyczne wpisy z już opublikowanych jąder? Innymi słowy, czy nie byłoby lepiej mieć jakieś miłe miejsce w sieci i odwołanie do tego miejsca w źródłach jądra?

Alan napisał:

Słuszna uwaga. Z przyjemnością umieszczę to na stronie i dam odnośnik. Czy są jakieś preferencje co do miejsca, czy to ma być kernel.org, czy po prostu 'gdziekolwiek'?

Podzielenie tego na firmy jest dość łatwe do zrobienia, podzieli się stronę na sekcje: ,,Zainteresowani kontraktami poniżej 1000$, 10000$, 100000$, 1M$, ...''

Sądzę, że możnaby skonstruować niezaprzeczalny schemat ocen. To zależy, czy to się opłaca.

,,Ludzie, którzy zapłacili za poprawki w sterowniku 3c501 podpisali także kontrakt na wsparcie MacIIfx...''

11. Graficzne przedstawienie rozwoju jądra

6 Nov 2002 (1 post) Archive Link: "Charts of the evolution of 2.5"

People: Guillaume Boissiere

Guillaume Boissiere napisał:

Pod poniższym adresem umieściłem wykresy pokazujące ewolucję cech jądra 2.5:

http://kernelnewbies.org/status/Linux_Kernel_2_5_Progress.png
http://kernelnewbies.org/status/Linux_Kernel_2_5_Compounded_Progress.png

Ponieważ większość rzeczy ewoluuje w czasie, a nie jest sprawą jednorazową, to wykresy te nie udają w pełni dokładnych, ale dają dobre wyobrażenie na temat cyklu rozwoju.

Zabawne, jak bardzo wzrosło tempo włączeń tuż przed zamrożeniem funkcjonalności :-)

 

 

 

 

 

 

Sharon And Joy
 

Kernel Traffic is grateful to be developed on a computer donated by Professor Greg Benson and Professor Allan Cruse in the Department of Computer Science at the University of San Francisco. This is the same department that invented FlashMob Computing. Kernel Traffic is hosted by the generous folks at kernel.org. All pages on this site are copyright their original authors, and distributed under the terms of the GNU General Public License version 2.0.

Mirror provided by HKMirror. Sponsored by Porno Verzameling and webcamsex