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 #181 For 2002/08/26

By Zack Brown

Translated By:  Krzysztof WilczyńskiMaja KrólikowskaPaweł Kot  and  Robert Święcki

Table Of Contents

Mailing List Stats For This Week

We looked at 1483 posts in 7515K.

There were 409 different contributors. 210 posted more than once. 149 posted last week too.

The top posters of the week were:

1. Łatki wydajnościowe 2.5 i testy porównawcze

11 Aug 2002 - 14 Aug 2002 (21 posts) Archive Link: "[patch 1/21] random fixes"

People: Andrew MortonAdam Kropelin

Andrew Morton podesłał łatkę i wyjaśnił:

Wybaczcie, ale jest tu tona różnych rzeczy. Skończyło się na diffie o 4600 liniach. To prawie cała praca nad wydajnością, która była w bólach testowana na dużych maszynach; główny problem polegał na tym, żeby w ogóle wystartować na tym 2.5. Wyniki ciągle nie pozwalają wyciągnąć takich wniosków, jakie chciałem uzyskać, ale wygląda to dobrze i nie ma innych propozycji, które naprawiają ten problem.

Większość tych zmian już proponowałem.

Stare rzeczy:

Poprawienie niepotrzebnych rzeczy, które dodałem do max_block():

Po paru listach, Adam Kropelin odpowiedział:

Zrobiłem kilka testów, ponieważ zawsze myślałem, że zachowanie zapisu w 2.4 (i 2.5) pozostawia trochę do życzenia. Testowanie odbyło się na SMP x86 (2xPPro-200) z 160MB RAM. Użyłem ulubionego przez wszystkich kozła ofiarnego: IDE, z pojedynczym, nie-za-szybkim dyskiem IBM. Systemem plików było ext3 w trybie data=ordered. Obciążeniem testowym był przychodzący (z punktu widzenia testowanego systemu) transfer FTP 600 MB obrazu iso. Wszystkie testy działają na czystym systemie z wyłączonymi niepotrzebnymi serwisami.

Wyniki (średnia z 4 uruchomień):

2.5.31-akpm: 2m 43s
2.5.31:      2m 33s
2.4.19:      2m 18s

`vmstat 1` pokazuje pewne różnice, w szególności w odniesieniu do 2.4 vs 2.5. W około 40% przypadków, gdy bo spada do (prawie) 0, maszyna przestaje działać (transfer FTP się zawiesza, wyjście vmstat się przerywa, itp.). Przy 2.5.31-akpm, przerwy trwały około 3-4 sekund. Przy 2.5.31 przerwy trwały tyle samo, ale zdarzały się troszeczkę rzadziej. Przy 2.4.19 przerwy były bardzo częste (mniej więcej 70% czasu, gdy bo zbliżało się do 0), ale trwały tylko 1-2 sekundy.

Poniżej zamieszczam reprezentatywne próbki `vmstat 1` dla każdego jądra, z czasu trwania testu. (Zauważcie, że niskie użycie cache w próbce z 2.5.31, jest spowodowane tym, że migawka pochodzi z początku uruchomienia, gdy cache się ciągle wypełniało.)

Andrew odparł:

tak. Dla tego obciążenia (transfer ftp z prędkością 10 mbajtów/sek, gdzie dysk ma transfer >20 meg/sek), aplikacja nigdy nie powinna blokować WE/WY -- cały zapis powinien odbywać się przez pdflush.

2.4 zaczyna zapisywanie w tle przy 30% brudnych stron, a synchroniczny zapis przy 60%.

2.5 zaczyna zapisywanie w tle przy 40% brudnych stron, a synchroniczny zapis przy 50%.

Możesz zrobić tak, żeby 2.5 używało ustawień 2.4 przez:

cd /proc/sys/vm
echo 30 > dirty_background_ratio
echo 60 > dirty_async_ratio
echo 70 > dirty_sync_ratio

i spodziewam się, że przekonałeś się, iż daje to poprawę. Ustawienie dirty_background_ratio na 10% powinno jeszcze poprawić sytuację. Ale to pogorszy liczby w dbench przy pewnej liczbie klientów, co aż prosi się o stan wyjątkowy.

Hmpf. Nie wiem jakie są właściwe liczby. Nie ma żadnych; to jest właśnie problem z magicznymi liczbami. Ta część jądra wykonuje zapis i gardłowe decyzje, zupełnie nie przejmując się całościowym stanem systemu.

W najgorszym wypadku możemy ustawić to w 2.5 na takim samym poziomie jak w 2.4, ale wolałbym, gdyby ktoś zrobił to coś dynamicznie.

W rzeczywistości, skłaniałbym się do ustawienia tego współczynnika na niższym poziomie niż w 2.4 i olania dbench. Niższy poziom jest lepszy dla prawdziwych programów, tak jak to zaobserwowałeś.

Adam odpowiedział, że liczby zaproponowane przez Andrew ustawiły w jednym szeregu z prędkościami czystego 2.5.31, ale oba testowane jądra są ciągle wolniejsze niż 2.4.19. Andrew napisał, że te liczby były miodzio na jego komputerze i nie umiał wyjaśnić tej niezgodności. Pogadali jeszcze przez kilka listów, aż Adam podesłał trochę informacji na temat szybkości jego dysku. Andrew aż się zapluł:

Rany. Widziałem ołówki, które mogą pisać szybciej niż to.

Zatem prędkość twoich kabli przewyższa prędkość dysku. To wszystko zmienia.

Jądro *musi* zatrzymywać generator brudnych danych. Możemy te zatrzymania skrócić i zrobić częstszymi. Zajrzyj do drivers/block/ll_rw_blk.c i zobacz, gdzie jest inicjalizowane batch_requests. Zamień to po prostu na:

batch_requests = 1;

batch_requests musi jakoś się kończyć...

A w fs/mpage.c ustaw RATELIMIT_PAGES na 16.

Aplikacja musi się blokować, ale dysk nigdy nie powinien wchodzić w tryb jałowy. Pobawię się tym trochę. IDE przestało być opcją w 2.5.30, co nie pomaga tym wysiłkom.

Okazało się także, że Adam pracował z ext3, a nie ext2, jak to opisywał. Zgłosił:

*Prawidziwe* przełączenie się na ext2 (zamiast tylko udawania) dało ogromną różnicę. Nowe liczby:

2.5.31-stock: 1m 49s
2.5.31-akpm: 1m 50s
2.4.19-stock: 1m 34s

...ale, przy zastosowaniu progów zapisu, które zaproponowałeś:

2.5.31-stock: 1m 34s
2.5.31-akpm: 1m 34s

(To znaczy przy dirty_background na poziomie 30%; 10% dało te same liczby co 30%.)

Prawdopodobnie przy dysku jako wąskim gardle, od zmian -akpm nie oczekuje się zbyt wiele. Przynajmniej niczego nie pogarsza.

2. Stan klibc i logowania

13 Aug 2002 - 20 Aug 2002 (24 posts) Archive Link: "klibc and logging"

People: H. Peter AnvinErik AndersenOliver Xymoron

H. Peter Anvin stwierdził, że klibc jest prawie skończone, więc wyobraził sobie mnóstwo błędów, które pojawią się, gdy ludzie zaczną naprawdę w to uderzać. Dodał jednak: "Zastanawiam się jednakże, co zrobić z logowaniem. Komunikaty jądra są gdzieś przechowywane zanim wystartuje klogd, ale na samym początku, w przestrzeni użytkownika może się pojawić potrzeba logowania pewnych informacji -- a syslog nie będzie oczywiście działał. Najłatwiejszym sposobem na to byłoby prawdopodobnie umożliwienie pisania do /proc/kmsg (które pewnie tak naprawdę powinno być /dev/kmsg) i wkładać komunikaty do kolejki komunikatów jądra; moglibyśmy jednak równie dobrze mieć dedykowane miejsce w initramfs, w którym można by było zapisywać logi jedynie w przestrzeni użytkownika. W tym drugim wypadku musielibyśmy mieć jakąś konwencję pozwalającą zapewnić, że plik naprawdę istnieje w przestrzeni nazw dostępnej w chwili startu sysloga i oczywiście syslog musi mieć świadomość istnienia tego pliku..."

Erik Andersen zaproponował pisanie prosto do /dev/console, dodając: "Jeśli ktoś nie będzie mógł z tego czytać (VGA, port szeregowy, konsola po sieci, cokolwiek) podczas próby skonfigurowania NFS-root, to musi utrzymywać dwie części."

W innym miejscu Miquel van Smoorenburg zaproponował użycie /dev/shm/log, ale H. Peter napisał, że to "wymaga zbyt wiele pracy zanim zostanie udostępnione." Dodał jednak: "Andrew Morton podesłał mi zeszłego wieczora propozycję łatki, która dodaje klogctl (znane też jako sys-syslog), które daje printk() w przestrzeni użytkownika. Ma to mniej niż 10 linii co oznacza, że rozwiązanie jest warte zachodu. Zastosowałem to do syslog(3) w klibc, jednakże kod nie został jeszcze sprawdzony." Oliver Xymoron sądził, że to przesada. Dodał: "takie rozwiązanie ma interesujące implikacje w bezpieczeństwie - tylko root powinien móc zapełnić kolejkę komunikatów jądra, ale nie-root powinien móc robić syslog, nawet z przestrzeni użytkownika tuż po starcie."

3. Nowe wołanie systemowe tworzące wątek

13 Aug 2002 - 15 Aug 2002 (32 posts) Archive Link: "[patch] clone_startup(), 2.5.31-A0"

People: Ingo MolnarLinus TorvaldsChristoph Hellwig

Ingo Molnar podesłał łatkę i ogłosił:

załączona łatka implementuje nowe wywołanie systemowe na x86, clone_startup(). Paremetry to:

clone_startup(fn, child_stack, flags, tls_desc, pid_addr)

przy pomocy tej funkcji systemowej pthreads nowej generacji w glibc mogą tworzyć wątki jednym wołaniem systemowym: clone_startup() ustawia TLS dziecka i zapisuje jego PID z powrotem do przestrzeni użytkownika. (którego adres wskazuje na blok kontrolny wątku.).

PID dziecka musi być z powrotem zapisany, bo w przeciwnym wypadku rodzic i dziecko musieliby wykonywać kosztowną i niepewną synchronizację. Pierwszą instrukcją wykonywaną przez dziecko może być też obsługa sygnału, a kod glibc potrzebuje TLS i PID wątku. Jest kilka możliwych obejść tego problemu w przestrzeni użytkownika bez clone_startup(), ale każde z nich ma wady:

a skoro jądro potrafi naprawdę dostarczyć całkiem dobrego rozwiązania, to dlaczego nie zrobić tego w ten sposób.

zrobienie TLS pozwala unikąć dodatkowych wywołań systemowych set_thread_area(). [Samodzielne aplikacje korzystające z glibc stale używają set_thread_area(), więc to wołanie nie powoduje bezużyteczności set_thread_area().]

Kwestie implementacji: wprowadziłem nową wewnętrzną flagę do jądra, flagę do clone, CLONE_STARTUP. Teoretycznie moglibyśmy użyć istniejącego wołania clone() i pozwolić aplikacjom wypełniać CLONE_STARTUP - nie byłem pewien tego rozwiązania, bo wprowadza ono parametryzowanie sys_clone() zależne od wersji, co powoduje bałagan. Ale niewątpliwie działałoby to bezpiecznie i sensownie, a nawet trochę wolniej niż rozwiązanie z oddzielnymi wołaniami systemowymi dodawane przez tę łatkę.

z przyczyn wydajnościowych jądro nie rozpoznaje numeru deskryptora -1 TLS, ale to nie problem, wątki potomne i tak dziedziczą po rodzicu indeks TLS. Jądro nie umożliwia też definiowania ,,pustych'' TLS.

Linus Torvalds miał pewne uwagi co do implementacji, ale napisał: "Poza tym całość wydaje się być sensowna. " Christoph Hellwig napisał też, że nazwa clone_startup() jest po prostu straszna. Zaproponował zamiast tego spawn_thread() lub create_thread(), dodając: "to nie jest nasze stare dobre clone i nie wygląda jak ono, to jakiś pthreadowaty potwór.. " Linus odpowiedział:

Zgadzam się, że nazwa jest trochę paskudna, ale jest to wołanie systemowe, które moim zdaniem jest użyteczne (to znaczy widzę, jak to mogłoby być użyteczne, zupełnie pomijając różne problemy z implementacją).

Obgadanie tego z ludźmi od wątków w IBM ciągle ma jednak sens. Być może goście z IBM mają problemy z _inną_ informacją i łatwo może się okazać, że inferfejs, którego naprawdę potrzebujemy jest jeszcze bardziej ogólny.

Kontunuował:

To na pewno nie jest problem specyficzny tylko dla pthread. Semantyka starego Uniksowego fork() przy zwracaniu <pid> jest istotnie zepsuta, jako że ustalenie zwracania pid w lokalnym rejestrze w naturalny sposób powoduje wyścig w _czymkolwiek_, co chce utrzymywać listę własnych dzieci i chce dostawać się do tej listy przez funkcję obsługi SIGCHLD.

(Proste wyjaśnienie: wyboraźcie sobie dziecko, które kończy się tak szybko, że rodzic nie ma nawet czasu, by wykonać ,,zapis pid do tablicy'', zanim jest powiadomiony przy pomocy SIGCHLD. Tak, to się zdarza i tak, to jest prawdziwy problem. Nie tak dawno temu bash się na tym _wywalał_).

Z wołaniem systemowym takim jak to, rodzic może:

Zauważcie jak to nie jest nawet specyficzne dla wątków: działałoby to z normalnym podejściem fork i standardową powłoką.

Christoph zaproponował nazwanie tego spawn(), ale Linus odparł:

spawn() według mnie implikuje wykonanie równoważności ,,vfork()+execve()'', w sposób, w który większość systemów nie-uniksowych wykonuje tworzenie procesu.

Nie jest tak, że jakoś wyjątkowo nie lubię nazwy ,,wątek'', ale chciałbym żeby to było możliwie ogólne i tak postrzegane. W ten sam sposób, w jaki oryginalne clone() było właściwym nadzbiorem fork(), to to musi być właściwym nadzbiorem, nie tylko z nazwy, ale z _użycia_. Jeśli jest to użyteczne tylko w jedynym przypadku, to nie jest dobre.

Ingo odparł:

w porządku, załączona łata pozbywa się clone_startup(), a w zamian dodaje dwie nowe flagi do clone():

CLONE_SETTLS => jeśli ustawione, to trzeci parametr wołania clone() jest nowym TLS.

CLONE_SETTID => jeśli ustawione, to TID dziecka jest zapisywany pod adres podany przez czwarty parametr clone().

nowe parametry są obsługiwane w bezpieczny sposób, clone() zwraca -EFAULT lub -EINVAL, jeśli jest z nimi jakiś problem.

Obecny kod nie jest zmieniany przez te nowe flagi. Łatka została przetestowana na 2.5.31-BK-obecne.

Dyskutowali dalej o szczegółach samej łatki i podwątek się skończył.

4. Oczekiwania co do NFSv4 i szyfrowania w 2.5

13 Aug 2002 - 16 Aug 2002 (21 posts) Archive Link: "patch 14/38: CLIENT: add ->setup_read() nfs_rpc_op for async read, part 1"

People: Dax KelsonAlan CoxLinus TorvaldsOliver Xymoron

W trakcie dyskusji, Dax Kelson zapytał:

Linus, jestem ciekaw, czy łatki NFSv4 zostaną zaakceptowane w najbliższej przyszłości (np. przed 2.6).

Chciałbym SZCZEGÓLNIE zobaczyć jedną łatkę z NFSv4 (mówię konkretnie o Kerberized NFSv4). Właśnie zakończyłem wdrażanie solarisowego środowiska Kerberized NFS z katalogami domowymi automatycznie montowanymi przez klientów używających ,,silnego'' uwierzytelniania użytkownika.

Szczerze mówiąc, podstawowy (bez obsługi Kerberosa) model bezpieczeństwa NFS jest do kitu.

Fakt, iż woźny z laptopem (lub jakikolwiek klient obsługiwany przez złośliwego administratora systemu) może naruszyć integralność katalogów domowych ze standardowego serwera katalogów domowych, strasznie mnie irytuje.

Alan Cox odpowiedział: "To nie jest związane ani z NFS2, ani z NFS3, to raczej kwestia implementacji. Właściwe uwierzytelnianie NFS chroni przed wystąpieniem takich przypadków. Przyznaję, musisz pozbyć się także błędnych domniemań w naszym kliencie NFS." Dax poprosił o więcej szczegółów, więc Alan dodał:

Ok, rzecz pierwsza, uwierzytelnianie z serwerem oraz pobranie klucza kryptograficznego do celów uwierzytelnienia. To rozwiązuje problem złych klientów. Kerberos, gssapi itp. już się tym zajmą.

Rzecz druga, to błąd obsługi stron pamięci podręcznej w NFS. W NFS współdzielenie dostępu do pamięci podręcznej jest zabronione, chyba, że użyto tego samego uwierzytelnienia dla zapytań. Wszystko co możemy (i powinniśmy) zrobić w przypadku, gdy wydaje nam się, że możemy ponownie użyć wpisu w tej pamięci, to wykonać sprawdzenie NFS ACCESS dla NFSv3, a dla NFSv2 -- odesłać go do serwera, jeżeli jest niepoprawny, a następnie odczytać nowy zestaw uwierzytelnień.

Nawiązując do kwestii nr 1, Dax zapytał o perspektywy implementacji kryptografii w jądrze. Linus Torvalds odparł:

Jeżeli znajdzie się dobre wytłumaczenie, poparte dobrymi argumentami, iż nie będzie problemu, co do eksportu tych technologii, to nie sądzę już, że jest to niemożliwe.

Jednakże, dobre wytłumaczenie musi być lepsze niż tylko twierdzenie, że jest to ,,rzecz technicznie doskonała, lecz niezbyt rozpowszechniona''.

Tak szczerze - osobiście podejrzewam, że kryptografia zostanie najpierw dodana do jąder rozpowszechnianych razem z dystrybucjami - jeżeli twórcy tych dystrybucji zechcą rozważyć zagadnienia dotyczące eksportu wspomnianych technologii, to bardzo dobrze, jeżeli zaś nie, to standardowe jądro tego na nich nie wymusi.

Osobiście wątpię, by NFS doprowadziło do takiego stanu. Opierając się na doświadczeniach z przeszłości, kłopoty z bezpieczeństwem NFS nie są zbyt wielkim problemem dla ludzi. Przypuszczam, że dla nich ważną rzeczą będzie dodanie przez producentów dystrybucji VPN lub szyfrowanych (lokalnie) dysków.

Oliver Xymoron odparł:

Sądziłem, że będzie duża presja na włącznie IPSEC, jako, że to tworzy nowe ,,efekty sieciowe'', lecz jest to ciągle powstrzymywane przez polityków. Sądzę, że czekają na pisemne zaproszenie, lub coś w tym stylu.

Czy interfejs lokalny jest wystarczająco stabilny, by dodać do niego obsługę szyfrowania? Przyszło mi na myśl, że lepiej będzie, gdy przeniesiemy zaczepy translacji do ogólnej warstwy blokowej, aby rzeczy, takie jak LVM i iSCSI oraz kompletnie idiotyczne w swym zamyśle ,,bit-swapped ide'' mogły korzystać z ich dobrodziejstw bez użycia skłonnych do blokowania się funkcji interfejsu zwrotnego. Jakieś pomysły?

Na co Linus odpowiedział:

Nie jestem pewien, która warstwa powinna się tym zajmować. _Nie_ jest zupełnie jasne, czy powinna to być warstwa blokowa i nawet jeżeli potrzebujesz tam zaczepu, to podejrzewam, iż wyższe warstwy zechcą przesyłać dane kontekstowe do warstwy szyfrującej.

W szczególności, posiadanie globalnego mechanizmu bezpieczeństwa dla dysków może wcale nie być tak dobrym pomysłem - możesz mieć życzenie, by posiadać informację dla każdego pliku z osobna, a to powoduje, że warstwa blokowa nie może obsługiwać tego sama, a wyższe warstwy muszą przekazywać różne klucze użytkownika w zależności od operacji.

W innych sytuacjach, odpowiednie warstwy są same w sobie strumieniem (np. ,,NFS over SSH/Kerberos'' jest tego typu rzeczą), lecz to podejście zakłada, że ufasz drugiemu końcowi połączenia. Jeżeli tak nie jest, to wracasz do punktu, w którym koniecznością stanie się szyfrowanie odnoszące się do każdego pliku z osobna (prawdopodobnie, jako _dodatek_ do szyfrowania strumieniowego), co w końcu implikuje fakt, iż potrzebujesz szyfrowania albo na poziomie pamięci podręcznej stron, albo na poziomie obecnego API.

(Poziom API jest, oczywiście, ukierunkowany na oprogramowanie go razem z bibliotekami dołączanymi z przestrzeni użytkownika, więc, być może, nie będzie potrzeby obsługi tego ze strony jądra systemu. Obsługa tego przez jądro może nie być pożądana, nawet jeżeli szyfrowanie jest realizowane przez programy użytkownika)

Oddzielnie od właściwego szyfrowania mamy zarządzanie kluczem. Nawet jeżeli jądro nie miałoby realizować żadnych zadań związanych z szyfrowaniem (podejście takie, jak z bibliotekami na poziomie użytkownika), podejrzewam, że część ludzi chciałaby mieć obsługę stanu posiadania kluczy w obrębie procesu.

A TO, podejrzewam, jest jednym z większych powodów, dla których nie ma rozbudowanej infrastruktury kryptograficznej w jądrze. Jest zbyt wiele możliwości wyboru, różni ludzie potrzebują różnych rozwiązań - w rezultacie czego infrastruktura jest, dosłownie, wszędzie.

Niewątpliwie, niektórzy ludzie ufają swoim serwerom i chcą mieć pewne połączenie oparte na sieciach WAN, gdy łączą się z nimi. Inni nie ufają nawet LAN-om, czy nawet samej zawartości serwerów i chcą mieć zabezpieczenia odnoszące się do konkretnych plików. Oba te podejścia posiadają dobre strony. To mówi nam, że nie ma ,,zaczepu''. Jest ,,labirynt zaczepów, różniących się szczegółami''.

5. Obsługa serwera NFSv4

13 Aug 2002 - 14 Aug 2002 (2 posts) Archive Link: "patch 38/38: SERVER: giant patch importing NFSv4 server functionality"

People: Kendrick M. Smith

Kendrick M. Smith podesłał wielką łatę i ogłosił:

Teraz, gdy wszystkie elementy są na swoim miejscu, ta wielka łata wprowadza cały nowy kod dla serwera NFSv4.

Ta łata nie wprowadza praktycznie zmian w obecnym, głównym kodzie nfsd (ten zostanie uaktualniony w nadchodzących łatkach).

Jeden aspekt NFSv4 zasługuje na komentarz. Najbardziej naturalnym schematem przetwarzania zapytań COMPOUND wydaje się być następujący wariant:

1a. faza detekcji XDR, detekcja argumentów dla wszystkich operacji
2a. faza przetwarzania, obsługa wszystkich operacji
3a. faza kodowania XDR, kodowanie wyników wszystkich operacji

Jednakże, używamy schematu, który działa następująco:

1b. faza dekodowania XDR, detekcja argumentów dla wszystkich operacji
2b. Dla każdej operacji,
przetwarzanie operacji
kodowanie wyniku

Aby dostrzec, co jest złego w pierwszym podanym schemacie, przyjrzyjcie się COMPOUND w postaci READ REMOVE. Ponieważ ostatni bit przetwarzania dla zapytania READ występuje w kodowaniu XDR, w kroku 3a możemy zauważyć, iż zapytanie READ powinno zwrócić informację o błędzie. W takim przypadku, zapytanie REMOVE nie powinno być w ogóle przetwarzane, ponieważ REMOVE zostało już wcześniej zrealizowane w kroku 2a!

Inny typ problemu wystąpi w COMPOUND w postaci READ WRITE. Załóżmy, że obie operacje zakończyły się pomyślnie. Biorąc pod uwagę schemat a, WRITE jest wykonywane _przed_ READ (podczas gdy ,,prawdziwy'' READ jest wykonywany w trakcie kodowania XDR). To jest oczywiście niepoprawne, jeżeli zakresy READ i WRITE nakładają się.

Te wyjaśnienia mogą wydawać się trochę sztuczne, lecz wydaje się również, że do prawidłowej obsługi COMPOUND we wszystkich przypadkach, musimy używać schematu (b), zamiast schematu (a).

(Aby stworzyć mniej sztuczne przykłady, zamień READ na GETATTR w powyższych przykładach. To zadziała, ponieważ ,,prawdziwe'' GETATTR jest wykonywane podczas kodowania XDR: niektórzy naprawdę chcieliby powrócić do starego stanu, aby napisać rzeczy inaczej.)

6. Kwestie zwiększonej ilości logowanych informacji

13 Aug 2002 - 19 Aug 2002 (21 posts) Archive Link: "[patch] printk from userspace"

People: Andrew MortonBenjamin LaHaiseAlexander ViroLinus Torvalds

Andrew Morton podesłał łatkę, która pozwala programom działającym w przestrzeni użytkownika na użycie printk(). Powiedział: " Jest to głównie pomyślane do użytku w hpa-owym klibc - początkowa przestrzeń użytkownika potrzebuje możliwości logowania informacji, a to API pozwala na przechwycenie tych informacji do bufora printk. Ostatecznie lądują one w /var/log/messages. Komunikaty obcinane są do 1024 znaków przez vsprintf() wewnątrz printk(). Logowanie wymaga CAP_SYS_ADMIN." Benjamin LaHaise sądził, że ze względów bezpieczeństwa nie jest to zbyt dobry pomysł, ponieważ każdy użytkownik mógłby zapchać bufor logowania jądra. Kilka osób zauważyło, że użycie właściwości implementowanych przez łatkę wymaga uprawnień administratora systemu, więc nie każdy będzie mógł z nich skorzystać. Ale Benjamin zapytał: " Czyż dodanie kolejnego wywołania systemowego, które jest równoważne write(2), nie jest wystarczającym powodem do spalenia tego razem ze śmieciami, które tworzy?" Alexander Viro odpowiedział:

Mam lepszy pomysł. Co sądzicie o przekształceniu write(2) tak, by pisząc do /dev/console, zachowywało się jak printk()? Innymi słowy, co sądzicie o tym, by wszystko, co jest zapisywane do /dev/console pojawiało się w dmesg?

W ten sposób uniknęlibyśmy tworzenia czegoś specjalnego na potrzeby logowania _oraz_ mielibyśmy przechwycone wyjście skryptów inicjalizacyjnych. Za darmo. dmesg(8) przejęłoby to wszystko, klogd(8) pracowałoby jak teraz, itp.

H. Peter Anvin powiedział, że /dev/console nie jest prawdopodobnie najlepszym miejscem dla tych zmian; Linus zgodził się z tym, lecz dodał: " Pomysł mi się podoba. Nie podoba mi się fakt, że tracimy wszystkie informacje dostarczane podaczas startu systemu, po prostu dlatego, iż syslogd nie został do tego czasu uruchomiony, a w rezultacie programy, takie jak fsck, nie pozostawiają po sobie śladu. Podejście z logowaniem jądra pozwala zachować je w jednym miejscu."

Benjamin powtórzył, że początkowa łatka powinna zostać przepisana, jako że tworzyła nowe wywołanie systemowe, dublując te, które już istnieją. Wysłał łatkę, która była zgodna z jego wizją a Andrew zgodził się, że jest ona lepszym rozwiązaniem.

7. Radzenie sobie z oopsami

14 Aug 2002 (1 post) Archive Link: "[patch] 2.4.20-pre2 RTFM Documentation/oops-tracing.txt"

People: Keith Owens

Keith Owens wysłał łatkę i wyjaśnił:

Mam nadzieję, że to zmniejszy liczbę pytań typu ,,co znaczy ten oops?'' i ,,co powinieniem zgłosić?'' na l-k. Obejmuje wszystkie architektury, jest testowane jedynie na i386, ale jest ,,w sposób oczywisty poprawne'' (mhm, jassne!).

Wypisuje ,,Przeczytaj Documentation/oops-tracing.txt przed zgłoszeniem tego problemu'' przed oopsem, zakleszczeniem nmi itp. Jeśli ktoś utrzymuje bazę błędów, nie mam nic przeciwko, aby zmienić komunikat tak, aby wskazywał tę bazę.

8. Sterownik PC-speaker w głównej wersji jądra

14 Aug 2002 - 18 Aug 2002 (22 posts) Archive Link: "Re: [ANNOUNCE] New PC-Speaker driver"

People: Stas SergeevDenis Vlasenko

Kilka tygodni wcześniej, Stas Sergeev ogłosił pojawienie się nowego sterownika pecetowego głośniczka dla 2.4.18. Denis Vlasenko powiedział, że teraz już działa odtwarzanie mp3. Stas podziękował mu za test i powiedział: "rzeczywiście, moim celem było osiągnięcie akceptowalnej jakości odtwarzania, nawet dla plików MP3. Z wyjściem płyty głównej, podłączonym do zewnętrznych głośniczków jakość jest całkowicie zadowalająca, jakkolwiek nie mam pewności, czy można czerpać radość z odsłuchiwania MP3 ;)." Andrew Rodland zauważył, że to rozwiązanie pozwala osiągnąć dobrą jakość dźwięku, lecz z okropnym szumem. Sądził, że jest to problem z płytą główną, a Stas się z tym zgodził (mówiąc, że większość ludzi nie doświadczyła problemów z nadmierną ilością szumu używając tego sterownika) i zabrał się za obchodzenie problemu.

Odbyła się także krótka dyskusja na temat włączenia tego sterownika do głównej linii jądra systemu, ale w pewnym momencie Denis Vlasenko powiedział:

Przykro mi, że was rozczaruję, lecz szanse na włączenie tego do głównej linii jądra są nikłe z następujących powodów:

  1. Nowe płyty główne mają wbudowane karty dźwiękowe, może niezbyt cudowne, lecz na pewno lepsze, niż pecetowy głośniczek.
  2. Standaryzacja w dziedzinie pecetowego głośniczka jest niewystarczająca. Jest on stworzony do ,,bipkania'' i żaden z producentów płyt głównych nie przeprowadza testów mających na celu polepszenie parametrów częstotliwościowych. Jako, że mogą być one tworzone wg różnych schematów, nie można być pewnym, w jaki sposób uzyskać maksymalną amplitudę na konkretnej płycie głównej (są 2 czy 3 różne sposoby uzyskiwania maksimum dla różnych płyt głównych. W każdym razie jakoś tak, przynajmniej wg artykułu, który przeczytałem dawno temu w jakimś magazynie).
  3. Występuje nienormalnie duże obciążenie procesora. A nawet więcej, ponieważ niektóre obecnie produkowane płyty główne emulują głośniczek za pomocą wbudowanych kart dźwiękowych oraz trybu SMM (ick).

Stas przyznał, że integracja kodu z głównym drzewem jądra nie jest zbyt prawdopodobna, głównie dlatego, iż kod nie jest jeszcze gotowy. On oraz kilka innych osób dało do zrozumienia, że obiekcje Denisa nie są przeszkodą. Co do pierwszego zastrzeżenia, Stas i Daniel Phillips odpowiedzieli, że nie wszystkie obecnie produkowane płyty główne posiadają wbudowane karty dźwiękowe. Co do trzeciego zastrzeżenia Denisa, Stas stwierdził, iż dla niego nie jest to błąd, a kod nie powinien być ,,procesorożerny''.

Nie osiągnięto porozumienia w wątku.

9. Testy forkowania na 2.4.20-pre2 i 2.4.20-pre2-ac1

14 Aug 2002 (4 posts) Archive Link: "Performance differences for recent kernels running forky test."

People: Steven ColeAlan CoxAndrew Morton

Steven Cole ogłosił:

Uruchomiłem nastepujący skrypt lots_of_forks.sh dla kilku wersji jądra.

http://people.nl.linux.org/~phillips/patches/lots_of_forks.sh

używając time -v sh lots_of_forks.sh

Wyniki dla 2.4.20-pre2 oraz 2.4.20-pre2-ac1 bardzo się różnią.

2.4.20-pre2:
Command being timed: "sh lots_of_forks.sh"
User time (seconds): 18.15
System time (seconds): 24.96
Percent of CPU this job got: 181%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:23.71

2.4.20-pre2-ac1:
Command being timed: "sh lots_of_forks.sh"
User time (seconds): 28.04
System time (seconds): 53.18
Percent of CPU this job got: 187%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:43.32

Uruchomiłem ten test ośmiokrotnie, jeden po drugim, bez żadnych przerw pomiędzy nimi. Poniższe liczby to czas systemu jaki zwracało polecenie time -v. Testowym komputerem był dwuprocesorowy p3, jądra miały włączoną obsługę SMP, były identycznie skonfigurowane, a w /proc/sys/vm nie dokonywano żadnych zmian.

        2.4.20-pre2     2.4.20-pre2-ac1 2.5.28          2.5.31

1       24.96           53.18           39.91           37.04
2       24.92           52.42           44.91           45.88
3       24.69           50.69           48.63           44.89
4       24.39           51.9            58.12           55.8
5       24.72           46.14           49.81           43.18
6       24.34           47.99           57.62           40.93
7       24.64           52.33           50.42           47.27
8       24.53           52.84           45              36.49

Testy te mogą być niesprawiedliwe, aczkolwiek mogą wskazać dalsze drogi poszukiwań.

Alan Cox odpowiedział:

Sądzę, że to może być problem. Rmap daje dużą przewagę w wielu zastosowaniach, lecz nie jest dobrym wyborem dla testowania czasów forkowania procesów. Podstawowym pytaniem jest: czy fork-bomby dominują przy obciążaniu Twojego systemu oraz gdzie jest odpowiednia granica pomiędzy nieprzewidywalnym zachowaniem VM i mniejszymi kosztami przeprowadzanych obliczeń?

Nie ma jednoznacznej odpowiedzi.

Andrew Morton także wskazał na kod rmap, jako prawdopodobną przyczynę wyników pomiarów Stevena. Zasugerował: "Czy mógłbyś przeprowadzić ponowne testy 2.5.31 z nałożonym http://www.zip.com.au/~akpm/linux/patches/2.5/2.5.31/stuff-sent-to-linus/everything.gz" Steven wykonał je i przekazał wyniki:

wyniki testów:

        2.5.31-vanilla  2.5.31-akpm-all
1               37.04           35.98
2               45.88           36.94
3               44.89           35.23
4               55.8            38.49
5               43.18           51.43
6               40.93           46.3
7               47.27           46.94
8               36.49           47.19

10. Projekt WOLK potrzebuje opiekuna

14 Aug 2002 (1 post) Archive Link: "[ANNOUNCE] WOLK v3.5 FINAL, Codemane 'Fin' alias 'Birthday Release'"

People: Marc-Christian Petersen

Marc-Christian Petersen podał URL i ogłosił:

Chciałem z dumą ogłosić: (a także podarować sobie mały prezent urodzinowy :)

WOLK v3.5 FINAL, Nazwa kodowa ,,Fin'' vel ,,Wydanie urodzinowe''

Zostało wykonanej wiele pracy od poprzedniej wersji WOLK, v3.4.

Jestem też dość zadowolony, że jest to ostatnia wersja ,,Działającego Przeładowanego Jądra Linuksa'' (,,Working Overloaded Linux Kernel''), ponieważ nie mam czasu, którego WOLK potrzebuje do dalszego rozwoju. Mam pracę, dziewczynę, kilku przyjaciół etc., więc zależę od kilku osób, które pomogą mi w zarządzaniu projektem.

Tysiące razy prosiłem o pomoc, dostałem kilka propozycji, ale nigdy nie doszło do realizacji tych obietnic. Jedynymi prawdziwie pomocnymi rękoma były ręce Michaela Gasperiego, jedynego współtwórcy mojego projektu, oraz Dominika Prepeeta, mojego ,,osobistego'' Guru C/C++ ;). I jeszcze 2 razy Jure Pecar... Ale 2-3 osoby to zdecydowanie za mało, aby porządnie kierować tak dużym projektem.

W każdym razie było fajnie, miło spędzałem czas, miałem dobre jądro, nauczyłem się wiele na temat jądra. Wielkie dzięki dla wszystkich ludzi na tej planecie, używających WOLK.

Niestety nie udało mi się, jak planowałem, włączyć OpenMosix i schedulera O(1)!

11. Listy na LKML podpisywane GPG

14 Aug 2002 (2 posts) Archive Link: "GPG/PGP-signatures"

People: David Weinehall

David Weinehall powiedział:

Myślę, że to wspaniale, iż ludzie podpisują swoje listy za pomocą GPG/PGP (sam zacznę je w ten sposób podpisywać, jak tylko będę miał odpowiednie łącze w domu i nie będę musiał wysyłać listów e-mail ze zdalnego serwera, na którym nie chcę przechowywać mojego klucza prywatnego), lecz kiedy publiczne klucze są niedostępne, trudne do zdobycia lub nieważne z jakiegoś powodu, podpisywanie poczty staje się bezużyteczne.

Monitorowałem użycie podpisów na liście przez ostatnich kilka miesięcy i przedstawiam listę osób, których sygnatur nie byłem w stanie odnaleźć. (nie były dostępne na wwwkeys.pgp.net, a nagłówki listów nie posiadały pól x-pgp czy x-gpg z podaną lokalizacją tych kluczy):

Justin Carlson          C1A06FBE
Florent Chabaud         95C81C3C
Thomas Duffy            38F3C1BC
David Fries             CB1EE8F0
Roger Gammans           88DE0B3E
Austin Gonyou           59853282
Josh Litherland         893D9228
Brandon Low             1F012DC6
John L. Males           99ED3565
Brendan W. McAdams      82306710
Solomon Peachy          2DBBE7D0
Joe Radinger            F957E8F3
Udo A. Steinberg        233B9D29
Gianni Tedesco          8646BE7D
Martin Waitz            DFE80FB2
Derek James Witt        972FE938
Wiktor Wodecki          A1559FE7
Pete de Zwart           984AF710

Dodałem wszystkich z powyższej listy do bcc.

Dla tych, którzy nie wiedzą jak wysłać swój klucz publiczny na publiczny serwer, podaję rozwiązanie:

gpg --keyserver wwwkeys.pgp.net --send-keys <keyid>

Odpowiedział sobie następnego dnia:

Znalazłem klucze publiczne nastepujących osób na search.keyserver.net (podziękowania dla Rogera Gammansa za wskazówkę!);

Brandon Low
Solomon Peachy
Pete de Zwart
Gianno Tedesco (wydaje się, że ma ,,zepsutego'' klienta pocztowego; sygnatury jego listów są ZŁE, przynajmniej wg mutt/gnupg v1.0.7)
Roger Gammans

Teraz zalecenie:

dodajcie

x-gpg-fingerprint: <fingerprint>
x-gpg-key: <url do Twojego klucza lub serwera kluczy>

do nagłówków listów.

12. Dokumentacja API księgowania dla 2.4

14 Aug 2002 (2 posts) Archive Link: "Re: [PATCH] Re: Some JBD documenation"

People: Roger Gammans

Roger Gammans wysłał łatkę, która dodaje więcej dokumentacji API księgowania do Documentation/DocBook/journal-api.tmpl w 2.4. Powiedział:

Ta łatka to dokumentacja JBD w DocBooku, którą obiecywałem już od dłuższego czasu ;-).

Aplikuje się na 2.4.20-pre2.

Andrew, jeśli wolisz, aby aplikowała się na jakąś inną wersję, daj mi znać.

13. Wydano VM Regress 0.5

14 Aug 2002 - 17 Aug 2002 (4 posts) Archive Link: "VM Regress 0.5"

People: Mel Gorman

Mel Gorman ogłosił:

Strona projektu: http://www.csn.ul.ie/~mel/projects/vmregress/

Ściągać można z: http://www.csn.ul.ie/~mel/projects/vmregress/vmregress-0.5.tar.gz

Oto druga publicznie udostępniana wersja VM Regress. Są to początki narzędzia do testów regresyjnych i porównawczych VM w Linuksie. Strona w sieci zawiera wstęp, a sam projekt zrozumiałą dokumentację i komentarze. To ciągle bardzo wczesne stadium.

Ta wersja zawiera dużo poprawek spójności infrastruktury całości, pełną listę zmian zamieszczam na końcu. Nie chcę zanudzić ludzi szczegółami, ale całość jest w lepszej kondycji. Są dwie nowe poważne rzeczy, które warto zauważyć.

  1. Wypisywanie mapy stron obecnych w pamięci i na dysku. Moduł pagetable może teraz wypisać taką mapę, która reprezentuje strony w pamięci adresowej, na końcu testu. To oznacza, że gdy uruchamiamy test odwołujący się do stron, to można *dokładnie* zobaczyć, jak wygląda przestrzeń adresowa po uruchomieniu testu. Rozważam rozszerzenie tego do wypisywania przestrzeni adresowej dowolnego procesu, ale nie jestem pewien, czy byłoby to użyteczne. Być może wygodnie by było uruchamiać skrypt powłoki stworzony ad hoc, mając odpowiedni moduł związany z procesem, który wypisałby jego przestrzeń adresową przed jego zakończeniem, żeby zobaczyć jak wyglądała na końcu...
  2. Dostarczony jest skrypt plot_map.pl, który bierze testowe wyjście, które zawiera mapę (obecnie tylko fault.o) i produkuje stronę internetową z nią. Pod adresem http://www.csn.ul.ie/~mel/projects/vmregress/output_sample/test_fault_zero.html można zobaczyć przykładową stronę. Rysunek pokazuje przetestowaną przestrzeń adresową. Gdy test się skończył, to cały proces został zrzucony na dysk, zatem wszystkie strony na początku były na partycji wymiany, a późniejsze ciągle w pamięci. Oczekuję, że późniejsze testy pokażą, jak dobrze wygląda to przy rmap w porównaniu ze starszymi jądrami. Późniejsze testy będą miały też bardziej interesujące wzorce odwołań niż proste, liniowe odwoływania.

Następną rzeczą do dodania do wyników jest uwzględnienie sztucznego licznika odwołań do stron. Dla danego testu nagrywana jest liczba odwołań do strony, która to liczba posłuży do porównania ze stronami obecnymi w pamięci. To powinno pomóc określić, czy Linux umie wybrać strony, które powinny pozostać w pamięci, czy nie. Od tego miejsca pisane testy będą zawierać różne wzorce odwoływań i różne typy pamięci, takie jak mmapowane pliki i tak dalej.

Cechą mniej istotną są początki umożliwienia przeglądania obszaru vmalloc. W tej chwili wypisze on tylko rozmiary. Większość pozostałych rzeczy składa się na zrzut pamięci.

Tak jak poprzednio, narzędzie nie dostarcza jeszcze wszystkich odpowiedzi, ale jest na bardzo wczesnym etapie, a gdyby to było do zrobienia szybko, to już bym to zrobił :-) . Mam nadzieję, że w końcu będę umiał odpowiadać na większość pytań odnośnie VM.

Lista zmian tej wersji jest następująca....

Wersja 0.5

Wszystkie komentarze będą mile widziane.

14. Działanie schedulera I/O zepsute w cyklu Pre-Patch jądra 2.4.20

14 Aug 2002 (1 post) Archive Link: "[patch] elevator seek accounting fixes"

People: Jens Axboe

Jens Axboe podesłał łatkę i ogłosił:

Chłopaki, mamy tutaj pewien problem w schedulerze i/o 2.4. Podstawową rzeczą jest to, iż zliczanie w 2.4.20-pre2 jest niepoprawne.

Liczniki dla żądań są zmniejszane, jak tylko scheduler we/wy ,,przejdzie'' nad nimi w poszukiwaniu punktów ,,scaleń'' lub ,,wstawień''. Jeżeli nie zostanie znalezione nic do scalenia, całkowity skan zostanie zakończony, a co za tym idzie wszystkie liczniki żądań zostaną zmniejszone o 1. Tak więc, żądania będące przed punktami scaleń są tak samo ,,karane'' jak te, znajdujące się za tymi punktami. Jeżeli punkt scalenia zostanie znaleziony, ll_rw_blk.c wywoła funkcję przemieszczającą merge_cleanup, która ,,podliczy'' scalenie poprzez zmniejszenie sekwencji żądań za punktem scalenia o zawartość sektora używanego bufora. W rezultacie przeszukiwanie ,,karze'' wszystkie żądania kosztem równym 1, a scalanie karze następne żądania kosztem zawartości sektora + 1, zazwyczaj o 9.

Kompletny śmietnik. Nie wiem, gdzie zawodzi logika, lecz podsyłam łatkę, która to naprawia. Robi dwie rzeczy:

Obecne wartości prawdopodobnie potrzebują nieco dostrojenia. Byłbym bardzo wdzięczny wszystkim za sprawdzenie, jakie wartości dają dobrą przepustowość przy testach, a jakie zapewniają rozsądne opóźnienia na stacjach roboczych.

Marcelo, proszę Cię o włączenie łatki do 2.4.20-pre2

15. Czyszczenie języka w pliku Configure.help w 2.4

14 Aug 2002 (1 post) Archive Link: "PATCH - Configure.help grammar/readability patch"

People: Kevin Burtch

Kevin Burtch ogłosił:

Myślałem o zrobieniu tego, od kiedy istnieje tekstowa pomoc do procesu konfiguracji jądra. Większość zmian to zastąpienie ,,powiedzieć'' przez ,,zaznaczyć'' (z uwzględnieniem odmiany), ponieważ choć istnieje wiele różnych sposobów konfiguracji jądra, to rozpoznawanie mowy jeszcze do nich nie należy. :) Próbowałem poprawić też gramatykę tak, jak tylko umiałem i uczynić ją bardziej konsekwentną. Ponieważ już się za to zabrałem, połamałem też niektóre zbyt długie linie.

Łatka nakłada się na 2.4.19 i jest dostępna pod http://www.geocities.com/kevin_burtch/config.patch.gz (nie chciałem jej tu wysyłać, bo to ponad 1MB nieskompresowanego tekstu)

16. Problemy z opiekunem IDE; Praca nad IDE odłożona do 2.7

16 Aug 2002 - 21 Aug 2002 (87 posts) Archive Link: "IDE?"

People: Linus TorvaldsMatthias AndreeAndre HedrickSkip FordAlan CoxMarc-Christian PetersenRik van RielAndrew MortonLarry McVoyAndries BrouwerAlexander Viro

Martin J. Bligh zauważył, że Jens Axboe usunął cały rdzeń IDE z 2.5 i zastąpił go wersją z 2.4.19-pre-acX. Spytał, co się stało, a Linus Torvalds odparł: "Marcin poddał się po tym wszystkim co musiał przejść, więc..." Matthias Andree odrzekł:

Nie widziałem większości jego pracy, ale to mi wygląda na smutny dzień dla Marcina, który poświęcił wiele swego czasu na pracę nad tymi rzeczami, podczas gdy inni nie tylko nie byli za to wdzięczni, ale jedynie pokrzykiwali na niego, nie dotykając się kodu w ogóle. To musi boleć.

Czy jest jakiś sposób, aby poprawki, które już weszły, przeżyły? Albo przynajmniej wiedza, która może zostać użyta wprost w sterowniku IDE-TNG? Naprawdę sądzę, że to smutne, iż tyle czasu zainwestowanego w projekt przepadnie -- ale pamiętajcie, że NIC nie wiem na temat szczegółów ostatniego sterownika IDE w 2.5.

Russell King powiedział, że ponownie wyśle swoje rzeczy do nowego opiekuna, a Andre Hedrick rzekł:

Podam Wam, chłopaki, IDE-TNG na srebrnej tacy.

Poniżej przedstawiłem modularną rejestrację chipsetów i indeksów kanałów. Wybieralne IOPS-y dla niezależnych od architektury warstw Transportowych Plików Zadań (Taskfile Transport layers). Muszę jeszcze skończyć pracę nad listami klas urządzeń, aby wykorzystywały w pełni modularne podsterowniki. Macie też pierwszą generację wywołań open i select sterownika w podsterownikach.

Masz zarejestrowany ide-cd na cdrw i chcesz wypalić płytkę?
open(/dev/hdX) transform_subdriver_scsi close(/dev/hdX)
open(/dev/sg) i wypalaj.
close(/dev/sg) zwalnia transform_subdriver_scsi
open(/dev/hdX) ładuje natywny transport atapi.

Dodał: "Jeśli tego chcecie, podam Wam to na tacy. Jeśli nie, usunę kod."

Skip Ford odparł: "Nie możesz po prostu stworzyć łaty i wysłać jej na listę? Osobiście chciałbym ją przetestować. Po prostu zdiffuj i wyślij ją bez żadnych prezentacji muzyczno-wokalnych." Alan Cox zauważył: "Możesz to zrobić (to w tej chwili jedyny sensowny sposób) w 2.4.20-pre2-ac3. Na razie chciałbym dojść w 2.4 do miejsca, gdzie open() próbuje się przełączać się pomiędzy srfoo i hdfoo, blokując przy tym innych użytkowników. W 2.5 możemy być bardziej frywolni. 2.4 musi jednakowoż działać."

Gdzie indziej Marc-Christian Petersen powiedział Linusowi:

Przepraszam, ale nie mogę się powstrzymać do śmiechu :P

Wyobrażam sobie, o czym marzysz. Jak: ,,kurde, k*rwa, dlaczego kurde wykopałem Andre Hedricka, dlaczego kurde powiedziałem mu żeby utopił się w klozecie?!!?''

Przepraszam, ale nie mogłem się powstrzymać. ;)

Rik van Riel przemówił:

Wyrzucenie w cholerę wielu miesięcy pracy, czy poddanie się po wielomiesięcznej pracy NIE JEST ŚMIESZNE.

Jestem wdzięczny Marcinowi za to, że probował poprawić warstwę IDE.

Jego metoda usuwania różnych rzeczy, aby ,,później stworzyć lepszą implementację'' nie zawsze okazywała się skuteczna, ale jestem mu wdzięczny za to, że próbował.

A Andrew Morton dodał: "Tak. Marcin dobitnie pokazał, jak wiele pracy jest jeszcze potrzebne i jak wiele śmieci się tam zgromadziło. To jest cenne."

Gdzie indziej Linus również odpowiedział na komentarz Marca-Christiana ,,Wyobrażam sobie, o czym marzysz'', mówiąc:

Nie, nie wyobrażasz sobie.

Marzę o opiekunie IDE, z którym ludzie (włączając w to zwłaszcza mnie) potrafią pracować. Nie wiem dlaczego, ale od pewnego momentu IDE stało się bardzo trudnym obszarem i przysparza opiekunom o wiele więcej bólu głowy niż cała reszta jądra razem wzięta..

Było już raz całkiem gładkie przekształcenie IDE (oryginalne przekształcenie z hd.c do ide.c) i nazywanie tego ,,gładkim'' jest raczej oceną post factum -- w momencie dokonywania zmiany wszyscy myśleli, że to strasznie głupie nie pozwalać na duże i kontrowersyjne zmiany w hd.c, a wynikowa duplikacja kodu została okrzyknięta katastrofą.

W tej chwili wygląda na to, że Alan chce przez jakiś czas popracować nad kodem IDE, co bardzo mnie cieszy. Tylko zastanawiam się, jak długo to wytrzyma (utrzymywał różne listy błędów w IDE przez lata, więc można mieć nadzieję).

Larry McVoy spytał: "czy mógłbyś (albo ktoś inny) pokazać historię opiekunów IDE razem z datami i powiedzieć, dlaczego się z nimi nie udało i co trzeba by zmienić, aby się udało? Wtykam swój nos w sprawy, na których się nie znam, ale być może któryś z nich byłby w stanie się dostosować, gdyby warunki zostały wyraźnie określone." Andries Brouwer wyjaśnił:

Prehistoria: Linus i inni.

Od początku 1994: Mark Lord. Wszyscy byli szczęśliwi do połowy 1998 (2.1.111), gdy po dyskusji na temat problemów z DMA, których doświadczyło kilka osób, Linus zmienił linux/drivers/block/Config.in:

-        bool '     Generic PCI bus-master DMA support' CONFIG_BLK_DEV_IDEDMA
+       # Either the DMA code is buggy or the DMA hardware is unreliable. FIXME.
+        #bool '     Generic PCI bus-master DMA support' CONFIG_BLK_DEV_IDEDMA

a Mark powiedział: ,,Nie będę więcej aktualizował sterownika IDE, dopóki plik linux/drivers/block/Config.in nie zostanie przywrócony do wersji sprzed 111.''

Od końca 1998 (2.1.122): Andre Hedrick.

Ostatnia historia jest znana.

(Wiele innych osób również czynnie pomagało przy IDE. Nie będę nawet próbował wymienić ich wszystkich, ponieważ na pewno bym kogoś pominął.)

Oczywiście ,,opiekun IDE'' oznacza pracę nad interfejsem do sprzętu i pracę nad interfejsem do podsystemu blokowego WE/WY w jądrze. Niektóre osoby wiedzą wszystko na temat sprzętu, inne niewiele na temat sprzętu, ale za to doskonale znają interfejs sterowników. Nie ma powodu, aby ,,opiekun IDE'' był za wszelką cenę pojedynczą osobą.

Linus odparł:

Tego nie ma w teorii, ale ponieważ mała zmiana w jednej części spowoduje, że inne sterowniki przestaną działać, to musi istnieć wybrana osoba, która trzyma to wszystko w kupie. I to _będzie_ ta osoba, do której będzie można się zwrócić, gdy coś przestanie działać.

To jest przypuszczalnie jeden z najważniejszych powodów ,,choroby IDE''. Objawem choroby jest to, że ludzie narzekają na to, że nic nie działa, a opiekun robi się na tyle zdołowany zarzutami, że przestaje mieć kontakt z rzeczywistością i zaczyna zajmować się względami zgodności z dokumentacją, mając nadzieję, że to wszystko naprawi.

To by było wszystko fajnie, tylko że większość problemów nie jest związana z rzeczami w dokumentacji, a ze sprzętem, który nie jest opisany w specyfikacji i trzeba stosować różne obejścia itp. Więc, gdy już zacznie się choroba ,,jest zrobione tak, jak opisano w dokumentacji i jeśli nie działa, to Twój komputer jest uszkodzony'', to już spadamy na łeb, na szyję.

Twierdzę, że to się zdarza również dla innego sprzętu, ale przy innym sprzęcie nie ma takich naszłości (ludzie w końcu wyrzucają podstawowy kod i zaczynają nowy bez historycznych śmieci) i połączenia pomiędzy sterownikami nie są obecne aż w takim stopniu. Gdy deweloper może pracować z jednym tylko chipsetem, jest możliwe, że mu się uda. Ale, gdy zaczynasz być obwiniany za wszystkie problemy IDE, zbierasz swoje zabawki i idziesz do innej piaskownicy.

Dlatego właśnie sądzę, że jedynym sensownym owocem pracy nad IDE może być powstanie niezależnych sterowników, co najprawdopodobniej pociągnie za sobą duplikację kodu (tak, jak hd.c i ide.c rozpoczęły współistnienie z duplikacją dużej ilości kodu), ale będziemy mieli sytuację, gdzie wiele osób _będzie_mogło_ odpowiadać za swoje sterowniki (i będzie jasne, _czyim_ problemem jest to, że jakiś kontroler IDE nie działa).

(Część infrastruktury może być rzeczywiście ogólna, ale ta ogólna część może zawierać _jedynie_ rzeczy, które naprawdę są niezależne od sprzętu i _nie_mogą_ mieć na nią wpływu różne sztuczki i błędy związane z implementacją sprzętową. W skrócie, mogą się tam znaleźć jedynie rzeczy, o których można dyskutować na logicznym poziomie i reguły są tam ustalane przez nas, a nie przez wykręcony sprzęt).

Gdzie indziej Linus odpowiedział także Larry'emu:

Nie sądzę, aby to była w zbyt dużym stopniu wina ludzi, ale raczej bezsensownych połączeń wewnątrz ide.c i strasznie skomplikownych reguł. Kod jest niejasny.

Sterowniki sieciowe mają różne konfiguracje z tymi samymi chipsetami, ale raczej są to osobne sterowniki współdzielące różne funkcje pomocnicze. Każdy sterownik osobno wykonuje rejestrację sterownika PCI itp. W przeciwieństwie do tego, w IDE sterownik w pierwszej kolejności jest sterownikiem IDE, a dopiero w drugiej kolejności sterownikiem chipsetu PCI i taka zamiana wag powoduje problemy.

Nawet coś tak prostego, jak sterowniki PIIX (które _powinny_ się po prostu zarejestrować jako sterowniki dla chipsetów piix) nie robią tego. Zamiast tego mamy ide-pci.c, które ma listę wszystkich znanych sobie układów i następnie wykonując inicjalizację, wywołuje funkcje inicjalizujące, o których wie. To po prostu kazirodztwo.

A wszyscy wiemy dokąd kazirodztwo prowadzi. Do dziedzicznego obłędu.

Larry ponownie spytał, jakie cechy są pożądane u opiekuna IDE. Alan Cox odpowiedział:

IMHO potrzebujesz

Linus również odpowiedział sobie:

Uwaga: to też _jest_ wina ludzi, ale nie zrozumcie mnie źle. W innych obszarach mamy takich ludzi, jak Al Viro, którzy swoimi niezbyt przyjaznymi mailami sprawiają, że dorośli ludzie zaczynają płakać (i pić). I w tych obszarach nie ma z tym zbyt dużego problemu, nawet jeśli to sprawia, że niektórzy muszą wziąć valium na dzień czy dwa przed tym zanim odważą się otworzyć e-maile od Ala.

A więc bałagan i system połączeń warstwy IDE po prostu sprowadza problem czynnika ludzkiego do paskudnego punktu. Absolutny brak komunikatywności pośród ludzi pracujących nad IDE był pierwszorzędny i prawdopodobnie _jest_ to spowodowane faktem, że kod jest zbyt ciężki, aby o nim dyskutować.

Alexander Viro wtrącił się mówiąc:

Uech... To, czego potrzebujemy w IDE, to

  1. tłumacz/filtr przekłamań pomiędzy ludźmi od sprzętu, a całą resztą. Jeśli Jens albo Alan chcą przez chwilę być takim kimś, to wspaniale.
  2. przegląd struktury istniejącego kodu. Robimy to.
  3. ostrożny masaż (w przeciwieństwie do całkowitego przepisania) wspomnianych struktur

tak, aby otrzymać coś sensownego. Przy pomocy serii małych przekształceń, gdzie będziemy mogli udowodnić, że nie zmieniają znaczenia kodu. I ktokolwiek podejmie się tego, narazi się na spalenie na stosie -- to spagetti, które mamy, to cholerny bałagan. Spróbuję pomóc przy tym -- wiem, jak wykonać taką pracę, ale nie obiecuję asystować przy tym aż do końca.

Gdy już będziemy mieli sensowną strukturę i sensowne interfejsy, życie stanie się prostsze. Do tego momentu, opieka nad drivers/ide/* w pełnym wymiarze, to bilet w jedną stronę do Koziej Wólki.

Linus odparł:

Osobiście sugerowałbym alternatywne (ale nie tak bardzo różne) podejście.

Podejście, za którym się opowiadam wygląda tak

Celem IDE-TNG byłaby jedynie obsługa głównych kontrolerów we wspomniany przeze mnie sposób, ale niech te główne kontrolery mają sterownik, który jest przeznaczony dla _nich_ i nie jest obarczony zaszłościami historycznymi.

A potem, za pięć lat, w Linuksie 3.2, będziemy mogli w końcu zrezygnować ze starego kodu IDE obsługującego PIO itp. Niewątpliwie będą istnieć jeszcze różne osoby, które będą tego używać (tak jak istnieją osoby, które używają Linuksa 2.0 z hd.c), ale to nie stanie na przeszkodzie w stworzeniu ładniejszego sterownika w międzyczasie.

I tak, w tej chwilo, to się zdecydowanie nadaje dopiero do 2.7.x.

17. Obsługa NCR Voyager w 2.5

18 Aug 2002 (1 post) Archive Link: "[PATCH: NEW SUBARCHITECTURE FOR 2.5.31] support for NCR voyager (3/4/5xxx series)"

People: James Bottomley

James Bottomley ogłosił:

Ta łatka dodaje obsługę SMP (i UP) dla voyagera, który jest mikrokanałową architekturą SMP (do 32 procesorów) nie-PC.

Jedyną zmianą od 2.5.31 jest to, że będzie się uruchamiać z niezerowym identyfikatorem procesora butującego (poprzednio current->cpu było inicjalizowane zbyt późno).

Łata składa się z dwóch części: kawałek podarchitektury i386 jest oddzielony od dodatkowych komponentów voyagera

http://www.hansenpartnership.com/voyager/files/arch-split-2.5.31.diff (108k)

http://www.hansenpartnership.com/voyager/files/voyager-2.5.31.diff (146k)

Musicie zaaplikować łatkę split zanim zaaplikujecie tę drugą.

Obie łatki są dostępne, jako oddzielne drzewa bitkeepera (drzewo voyager jest nadzbiorem drzewa arch-split):

http://linux-voyager.bkbits.net/voyager-2.5

http://linux-voyager.bkbits.net/arch-split-2.5

18. Raport ze stanem problemów w 2.5

18 Aug 2002 (1 post) Archive Link: "2.5 Problem Report status"

People: Thomas Molina

Thomas Molina zgłosił:

Załączam ostatni raport. Nie było większych aktualizacji w ciągu ostatnich kilku dni. Cały raport wraz z odnośnikami do dyskusji możecie znaleźć pod adresem:

http://members.cox.net/tmolina/kernprobs/status.html

Uwagi:

Stan podsytemu IDE w 2.5 jest na tyle zmienny, że śledzenie problemów w nim nie jest zbyt owocne. Nie będę raczej dodawał nowych przez zamrożeniem, o ile nie będzie specjalnego żądania. Obsługa dyskietek w 2.5 jest zepsuta. Rzeczy z wyższym priorytetem opóźniają prace nad poprawką.

Raport z problemami w jądrze 2.5 na 16 sierpnia

Nazwa problemu                    Stan         Dyskusja
problem z RAID 0 BIO              otwarty      2.5.30
schedule() z wyłączonymi
przerwaniami!                     otwarty      2.5.30
błędy w sterowniku bonding w 2.5  zamknięty    2.5.30
oops w obsłudze portu szeregowego zamknięty    2.5.30
obejścia dla NUMA-Q               zamknięty    2.5.30
problem z PnP BIOS                zamknięty    2.5.30 
nowe połączenia zamierają         zamknięty    2.5.30
oops w JFS                        zamknięty    2.5.30
obsługa portu szeregowego na
osadzonym PPC                     zamknięty    2.5.30 
oops w handle_scancode            zamknięty    2.5.30
zakleszczenie spinlocków          zamknięty    2.5.30
problem w smp                     zamknięty    2.5.30
process_stress z LTP powoduje
oopsa                             otwarty      2.5.30
oops w elv_queue_empty            otwarty      2.5.30
oops przy zapisie stron           otwarty      2.5.30
BUG w slab                        otwarty      2.5.30
problem z pmd_page                otwarty      2.5.30
problem z konsolą vga             otwarty      2.5.30
problem z uruchamianiem P200MMX   otwarty      2.5.30
prolem z io apic                  otwarty      2.5.30
oops w dcache                     otwarty      2.5.30
oops w vm86                       otwarty      2.5.30
nie działają moduły               otwarty      12 sie 2002
oops w unmount                    otwarty      12 sie 2002
problem z usb                     otwarty      11 sie 2002
nie działają moduły               otwarty      13 sie 2002
BUG w pte.chain                   otwarty      13 sie 2002
oops w scancode                   otwarty      12 sie 2002
zepsute cciss                     zaproponowana poprawka 14 sie 2002
oops w qlogicisp                  otwarty      14 sie 2002
oops w kmap_atomic                otwarty      15 sie 2002

19. Wersja 0.7 gcml2 już dostępna

19 Aug 2002 (1 post) Archive Link: "ANNOUNCE: gcml2 0.7"

People: Greg Banks

Greg Banks zapowiedział:

gcml2 jest (oprócz kilku innych rzeczy) weryfikatorem składni linuksowego języka kconfig. Wersja 0.7 jest dostępna pod adresem:

http://sourceforge.net/project/showfiles.php?group_id=18813&release_id=106023

oraz

http://www.alphalink.com.au/~gnb/gcml2/download.html

Dostępny jest również zbiór ostrzeżeń i błędów analizatora składni, razem z prawdziwymi przykładami - do pobrania z:

http://www.alphalink.com.au/~gnb/gcml2/checker.html

Oto lista zmian:

20. Poprawa skalowalności wątków

19 Aug 2002 - 20 Aug 2002 (22 posts) Archive Link: "[patch] O(1) sys_exit(), threading, scalable-exit-2.5.31-A6"

People: Ingo MolnarLinus Torvalds

Ingo Molnar podesłał łatkę i ogłosił:

ta łatka jest kolejnym krokiem w drodze do osiągnięcia wyśmienitej obsługi wątków zaimplementowanej pod Linuksem.

każde istniejące jądro Linuksa, włączając w to 2.5.31, ma z natury nieskalowalną implementację sys_exit(), posiadającą narzut, który rośnie wraz ze wzrostem liczby zadań w systemie. Nie ma znaczenia to, czy te zadania wykonują jakąś pracę - uśpione zadanie też powoduje, że narzut na sys_exit() rośnie.

200 zadań w systemie jest typowe dla względnie jałowego systemu. 1000 zadań albo więcej nie jest takie rzadkie na średnich serwerach. Są serwery, które używają 5000 zadań albo więcej. Nierzadko, przy bardzo wątkowanym kodzie, używane jest jeszcze więcej wątków - modele klient-serwer często najłatwiej zaimplementować przy użyciu modelu z jednym wątkiem na pojedyncze połączenie. [Na przykład vsftpd, jeden z najszybszych i najbezpieczniejszych serwerów pod Linuksa używa dwóch (często trzech) wątków na każde połączenie klienckie [co, z powodu bezpieczeństwa, jest zaimplementowane przez wewnętrzne, odizolowane procesy klientów].]

Parę liczb, żeby to potwierdzić, testowałem 2.5.31-BK-curr na PIII 525 MHz, uzyskałem następujące opóźnienia fork+exit w lat_proc:

  liczba zadań w systemie            200   1000    2000    4000
  ------------------------------------------------------------------
  ./lat_proc fork+exit (mikrosekundy):  743.0  923.1  1153.4  1622.2

można zauważyć, że narzut na fork()+exit() podwaja się, a nawet więcej przy każdych dodatkowych 4000 zadań w systemie.

dla aplikacji z wątkami sytuacja wygląda nawet gorzej. Wątkowy test porównawczy, który testuje po prostu (liniowe) tworzenie i zakończenie 100 tysięcy wątków przy użyciu starej biblioteki glibc libpthreads, daje następujące wyniki:

  liczba zadań w systemie                200   1000    2000    4000
  ------------------------------------------------------------------
  ./perf -s 100000 -t 1 -r 0 -T
  w sekundach:	                             17.8   37.3    61.1   108.0

  opóźnienie jednowątkowego create+exit
  w mikrosekundach:                           178    373     611    1080

przy użyciu tego samego testu skonsolidowanego z nową libpthreads:

  liczba zadań w systemie                200   1000    2000    4000
  ------------------------------------------------------------------
  ./perf -s 100000 -t 1 -r 0 -T
  w sekundach:                                6.8   25.6    48.7    95.1

  opóźnienie jednowątkowego create+exit
  w mikrosekundach:                            68    256     487     951

występuje taka sama regresja, co w przypadku starego pthreads, ale przy (dramatycznie) niższej podstawie [którą zawdzięczamy innym optymalizacjom]. Przy stworzonej setce wątków, opóźnienia create+exit zaczynają dominować nad wielkim narzutem generowanym przez sys_exit().

wszystko w jednym - sys_exit() jest O(nr_tasks), i ponieważ tak jest, to nawet rozsądna liczba zupełnie jałowych zadań bardzo widocznie podnosi narzut na exit().

dlaczego sys_exit() jest takie kosztowne? Główny narzut znajduje się w forget_original_parent(), które musi być wołane dla każdego kończącego się wątku: jądro musi znaleźć wszystkie dzieci kończącego się zadania, które to zadanie utworzyło w trakcie swojego istnienia i musi zmienić im rodzica na jakieś inne zadanie. Obecna implementacja używa for_each_task() dla wszystkich zadań w systemie i znajduje takie, których prawdziwym rodzicem jest kończące się właśnie zadanie. To jest podstawa jądra, która nie może zostać zoptymalizowana - drzewo rodzice-dzieci musi zawsze pozostawać spójne.

ale iteracja for_each_task() jest nadmiarowa. Jest jednak subtelny powód by to stosować: ptrace zmienia rodzica debugowanego zadania na zadanie debugujące, które odłącza dziecko od pierwotnego rodzica. Stąd forget_original_parent() musi przeszukać całą listę zadań, aby upewnić się, że nawet debugowanym zadaniom właściwie zmieniono rodzica.

załączona łata (na BK-curr) zmienia implementację tego pomysłu w sposób skalowalny: kod pthreads utrzymuje także globalną listę debugowanych zadań, która zwykle, w normalnym systemie, jest pusta. Jest na niej najwyżej kilka zadań - te, które są obecnie debugowane. Posiadanie takiej listy w kilku strategicznych miejscach nie jest zbyt kosztowne.

forget_original_parent() przeszukuje wtedy listę dzieci kończącego się zadania oraz globalną listę ptrace. W zwykłym przypadku zadania, które nie ma dzieci i żadne zadania nie są debugowane, takie przeszukiwanie kosztuje tyle, co dwa sprawdzenia list_empty()!

czas przejść do wyników testów wydajnościowych na tej samej maszynce z PIII 525 MHz, lat_proc:

  liczba zadań w systemie                200     1000     2000     4000
  ----------------------------------------------------------------------
  ./lat_proc fork+exit (mikrosekundy):
                                      	    657.1    680.6    640.8    682.5

  (wyniki przy niezałatanym jądrze):       (743.0)  (923.1) (1153.4) (1622.2)

opóźnienie wynikające z tworzenia procesu jest ogólnie stałe, jest niezależne od liczby zadań w systemie. Nawet podstawowe wyniki zostają poprawione o więcej niż 10%. Dla 4000 zadań przyspieszenie wynosi więcej niż 130%.

przyspieszenie jest nawet większe dla aplikacji z wątkami, używających starego kodu pthreads:

  liczba zadań w systemie            200    1000    2000    4000
  --------------------------------------------------------------------
  ./perf -s 100000 -t 1 -r 0 -T
  w sekundach:                           12.6    12.8    11.9    11.9
  (wyniki bez łaty):                    (17.8)  (37.3)  (61.1) (108.0)

  opóźnienie jednowątkowego create+exit
  w mikrosekundach:                       126    128     119      119
  (niezałatane jądro):                   (178)   (373)   (611)  (1080)

  poprawa:                                 41%    191%   413%     807%

to znaczy, że w przypadku 4000 zadań poprawa jest prawie dziesięciokrotna!

testowanie libpthreads w nowej glibc pokazuje dramatyczną poprawę:

  liczba zadań w systemie                200   1000    2000    4000
  ------------------------------------------------------------------
  ./perf -s 100000 -t 1 -r 0 -T
  w sekundach:                             1.7    1.9     1.9     1.9
  (wyniki bez łaty):                      (6.8) (25.6)  (48.7)  (95.1)

  opóźnienie jednowątkowego create+exit
  w mikrosekundach:                         17     19      19      19
  (niezałatane jądro):                     (68)  (256)   (487)   (951)


  poprawa:                                 300%  1247%   2463%   4900%

W przypadku 200 zadań przyspieszenie jest czterokrotne, przy 4000 zadań, jest ono pięćdziesięciokrotne (!). Opóźnienie przy tworzeniu i usuwaniu wątku to stale 19 mikrosekund. Umożliwia to również bezpośrednie porównania starego pthreads i nowego libpthreads: nowe libpthreads jest więcej niż 6 razy szybsze. To jest to, co w końcu mógłbym nazwać dobrą wydajnością wątków.

najtrudniejszą częścią łatki było zapewnienie poprawności semantyki ptrace. Sądze, że zdołałem to przetestować przynajmniej przy typowych obciążeniach: testowałem złożone mieszanki sytuacji strace przy dużych obciążeniach, dla wątkowego i niewątkowego kodu, dla SMP i UP, zatem jestem w miarę pewien, że to działa dla takich rodzajów obciążeń, jakie występują na moich systemach [ Ale ptrace() jest tak niewiarygodnie złożone, że mogłem równie dobrze opuścić niektóre subtelne przypadki. ]

Krótko potem podesłał uaktualnienie, na które odpowiedział Linus Torvalds:

Hmm.. Wygląda dobrze, ale zastanawiam się, czy prawdziwy problem nie leży w tym, że nasze podejście do ptrace zawsze było trochę nadęte.

Zaczęliśmy od założenia, że tylko rodzice mogą śledzić swoje dzieci, zatem nigdy nie potrzeba było zmiany rodziców. Potem nadeszło PTRACE_ATTACH i zrobiliśmy zmianę rodzica. Sądzę, że właśnie w _tym_ miejscu popełniliśmy wielki błąd.

Powinniśmy mieć oddzielny wskaźnik ,,tsk->tracer'' zamiast używać perwersyjnego podejścia, w którym ,,mój rodzic mnie śledzi''. Nie powinniśmy naprawdę zmieniać relacji między rodzicem a dzieckiem tylko dlatego, że wątek jest śledzony.

Z przyjemnością zastosuję tę łatkę (znaczy poprawioną wersję), ale sądzę, że wolałbym zrobić więcej, to znaczy usunąć całą zmianę rodzica i trzymać listę wszystkich dzieci przez cały czas trwania procesu. Jak bolesne by to było?

Ingo odparł: "Nie widzę jak mogłoby to działać, chyba że cały interfejs ptrace zostałby zmieniony w niezgodny z obecnym sposób." Wyjaśnił: "problem polega na tym, że zadanie śledzące chce zrobić wait4() na wszystkich śledzonych dzieciach, a żeby mogło to zrobić, musi mieć te wszystkie dzieci na swojej liście dzieci. na przykład strace -f śledzi losową liczbę zadań, a po wołaniu PTRACE_CONTINUE, wait4 wykonane przez strace musi móc ,,odebrać zdarzenia'' od większości śledzonych zadań." Różni ludzie omawiali możliwe implementacje, a w pewnym momencie Linus napisał: "W porządku, przekonałeś mnie. Zmiany rodzica są dość brzydkie, ale wydaje się, że inne implementacje byłyby w sumie równoważne i cały problem sprowadza się do tego, na której liście się działa. "

21. Opieka nad SUNRPC

19 Aug 2002 (1 post) Archive Link: "SUNRPC maintainer"

Chuck Lever poprosił, aby wymienić go jako opiekuna SUNRPC w pliku /usr/src/linux/MAINTAINERS.

22. Obsługa układu IDE vt8235 w 2.4

19 Aug 2002 (1 post) Archive Link: "Add support for vt8235 IDE for 2.4"

People: Vojtech Pavlik

Vojtech Pavlik wysłał łatkę i ogłosił:

Ta łatka dodaje obsługę kontrolera IDE vt8235 w jądrze 2.4. Jest bardzo potrzebna, bo ten układ właśnie wchodzi do sklepów.

Taka sama łatka powinna wkrótce wejść do 2.5.

Możecie zaimportować zbiór zmian do BK przez przekierowanie tej wiadomości do: '| bk receive [ścieżka do repozytorium]', bądź zwyczajnie aplikując łatkę.

23. Lista opiekunów

19 Aug 2002 (1 post) Archive Link: "lk maintainers"

People: Denis Vlasenko

Denis Vlasenko napisał:

Ten dokument jest wysyłany na listę regularnie i będzie modyfikowany zawsze, gdy nowa ofiara zażyczy sobie umieszczenia na tej liście, albo gdy ktoś nie będzie mógł dłużej poświęcać swojego czasu na pracę opiekuna.

Jeśli chcesz, by notka o Tobie została dodana/uaktualniona/usunięta, to skontaktuj się ze mną.

------- tu odetnij ------ tu odetnij ------ tu odetnij ------ tu odetnij ------

Jeśli jesteś nowy wśród hakerów jądra Linuksa i chcesz przesłać raport o błędzie w jądrze, albo łatkę, ale nie wiesz jak to zrobić, ani _gdzie_ to zgłosić?

Przygotowanie raportu o błędzie:

Problemy z kompilacją: zgłoś to, co na wyjściu daje GCC, oraz wynik polecenia ,,grep '^CONFIG_' .config''
Oops: zdedkoduj go przy pomocy ksymoops
Proces nie do zabicia: Alt-SysRq-T i ksymoops na odpowiedniej części.
Tak. To znaczy, że powinieneś mieć zainstalowane i przetestowane ksymoops, co łatwo zrobić źle. Zbyt często tak robiłem.

Więcej informacji w FAQ dostępnym na http://www.tux.org/lkml/

Przesyłanie raportu o błędzie/łatki:

Obecni ludzie jądra

Zauważcie, że ta lista jest posortowana datami, w odwrotnej kolejności, to znaczy najpierw podaję najnowsze pozycje listy. Oznacza to, że pozycje na samym jej dole mogą być już nieważne :-(

Linux kernel mailing list <linux-kernel@vger.kernel.org>
        Wysyłaj tu wszystko związane z jądrem Linuksa, ale nic poza tym :-)

Dave Engebretsen <engebret@vnet.ibm.com> [15 aug 2002]
        Opiekun architektury PPC64. Proszę przesyłać łaty na PPC64 do mnie i na naszą
        listę, na adres <linuxppc64-dev@lists.linuxppc.org>

Ingo Molnar <mingo@elte.hu> [30 lip 2002]
        Ingo napisał nowy algorytm szeregujący dla 2.5.

Ralf Baechle <ralf@uni-koblenz.de> [30 lip 2002]
        Jestem opiekunem kodu AX.25

Victor Yodaiken <yodaiken@fsmlabs.com> [30 lip 2002]
        łatki, uaktualnienia, dodatki, sterowniki RTLinux.
        Pisz najpierw na listę: rtl@rtlinux.org

Pavel Machek <pavel@ucw.cz> [27 lip 2002]
        Jestem opiekunem sieciowych urządzeń blokowych.
        Odwiedź: http://nbd.sf.net.
        (patrz: Steven Whitehouse <steve@gw.chygwyn.com> na tej liście)
        Pracuję nad programowym zawieszaniem.

William Irwin <wli@holomorphy.com> [02 lip 2002]
        Wysyłaj do mnie raporty błędów i/lub prośby o nowe cechy związane z wieloma
        zadaniami, rmap, zużycie przestrzeni, alokacje. Jestem zaangażowany w:
        * rmap
        * alokację pamięci
        * redukcję przestrzeni zużywanej przez struktury danych (np. struct page)
        * problemy pojawiających się przy dużych obciążeniach, w związku z różnymi zadaniami
        * nadzorowanie kodu jądra
        Patrz także:
        Rik van Riel <riel@surriel.com>
        Andrea Arcangeli <andrea@suse.de>
        Martin Bligh <Martin.Bligh@us.ibm.com>
        Andrew Morton <akpm@zip.com.au>

Dave Jones <davej@suse.de> [23 kwi 2002]
        Zbieram różne kawałki i fragmenty kodu do włączenia w 2.5,
        szczególnie te małe i trywialne oraz uaktualnienia sterowników.
        Przekażę je Linusowi gdy (i jeśli) zostanie udowodnione, że są tego
        warte.

Andre Hedrick <andre@linux-ide.org> [09 kwi 2002]
        Architekt ATA/ATAPI Storage  [2.0,2.2,2.4]
        Deweloper interfejsu HBA
        Architekt szeregowego ATA [w przyszłych wersjach]
        Członek NCITS komitetu AT-Attachment z prawem głosu

Andrea Arcangeli <andrea@suse.de> [28 mar 2002]
        Przysyłajcie mi raporty błędów i łaty dotyczące VM.
        W szczególności interesują mnie następujące problemy z VM:
        * dużo RAMu i procesorów
        * NUMA
        * scenariusze z dużym udziałem partycji wymiany
        * wydajność przy dużych obciążeniach WE/WY (szególnie, gdy odbywa się
          dużo asynchronicznego czyszczenia buforów)
        Patrz także: Martin J. Bligh <Martin.Bligh@us.ibm.com>
        Piszcie także do:
        Arjan van de Ven <arjanv@redhat.com>

Martin J. Bligh <Martin.Bligh@us.ibm.com> [28 mar 2002]
        Jestem zainteresowany kwestiami związanymi z VM przy dużej
        (>4G przy i386) ilości RAM, wieloma procesorami, NUMA

Steven Whitehouse <steve@chygwyn.com> [27 mar 2002]
        Jestem opiekunem stosu sieciowego DECnet w Linuksie
        Odwiedź http://www.chygwyn.com/decnet/

Arnaldo Carvalho de Melo <acme@conectiva.com.br> [26 mar 2002]
        IPX, 802.2 LLC, NetBEUI, http://kerneljanitors.org,
        sterownik karty cyclom2x sync

John Cagle <jcagle@kernel.org> [19 mar 2002]
        Obecny opiekun devices.txt, listy przypisanych numerów urządzeń dla
        LANANA. Przeczytaj stronę w sieci (www.lanana.org) w celu uzyskania
        instrukcji jak przesyłać prośby o nowe numery urządzeń. Prześlij wszystkie
        prośby związane z urządzeniami na adres:
        <device@lanana.org>.

Tigran Aivazian <tigran@veritas.com>
        Jestem autorem i opiekunem systemu plików BFS i sterownika aktualizacji
        mikrokodu dla IA32

Rogier Wolff <R.E.Wolff@BitWizard.nl> [12 mar 2002]
        Robię ,,porty szeregowe specialix'':
        drivers/char/specialix.c (IO8+)
        drivers/char/sx.c        (SX, SI, SIO)
        drivers/char/rio/*.c     (RIO)

Martin Dalecki <martin@dalecki.de> [11 mar 2002]
        opiekun podsystemu IDE w 2.5
        (piszcie też do Vojtecha Pavlika <vojtech@suse.cz>)

Ed Vance <serial24@macrolink.com> [05 mar 2002]
        Opiekun podstawowego sterownika szeregowego, serial.c, dla
        jąder 2.2 i 2.4. Proszę, przesyłajcie łatki na adres
        linux-serial@vger.kernel.org z przetestowanymi poprawkami błędów
        albo żeby dodać obsługę nowych urządzeń szeregowych.
        Ograniczenia dostępnego czasu. Jeśli nie odpowiadam w ciągu
        tygodnia, wrzeszczcie na serial24@macrolink.com

deweloperzy netfilter/iptables <netfilter-devel@lists.samba.org> [23 feb 2002]
        Na tę listę, na której są deweloperzy netfilter, proszę zgłaszać
        wszystkie problemy związane z netfilter/iptables.
        Patrz także: http://www.netfilter.org/contact.html

Hans Reiser <reiser@namesys.com> [16 lut 2002]
        Przesyłajcie mi wszystkie łatki dotyczące reiserfs z
        cc: do reiserfs-dev@namesys.com, a raporty błędów na
        reiserfs-dev@namesys.com, żądania opłaconej obsługi przesyłajcie
        na support@namesys.com po zapłaceniu na
        www.namesys.com/support.html,
        wszelkie dyskusje (nie raporty błędów, no chyba, że zainteresują większość
        osób) ślijcie na reiserfs-list@namesys.com.
        Jeśli przez tydzień nie odpowiemy na twoją łatę, krzycz na nas, zasłużliśmy.
        Aby dowiedzieć się więcej o przesyłaniu nam łatek, pracy z nami i naszym
        systemie przesyłania i śledzenia łatek obejrzyj naszą stronę na www.namesys.com.

Paul Bristow <paul@paulbristow.net> [16 lut 2002]
        Jestem opiekunem sterownika stacji dyskietek na ide
        (ATAPI ZIP, LS-120/240 Superdisk, napędy Clik!).

Mike Phillips <phillim2@comcast.net> [15 lut 2002]
        Podystem Token ring i sterowniki.

Anton Altaparmakov <aia21@cam.ac.uk> [15 lut 2002]
        Jestem gościem od NTFS.

https://bugzilla.redhat.com/bugzilla [14 lut 2002]
        Zgłaszanie problemów z jądrami dostarczanymi przez Red Hat.

Alan Cox <alan@lxorguk.ukuu.org.uk> [14 lut 2002]
        Opiekun Linuksa 2.2 (tylko poprawki konserwujące).
        Utrzymuję zestawy łatek na nieutrzymywane rzeczy w 2.2/2.4.
        Opiekun drzewa 2.4-ac (2.4 z testowanymi rzeczami).
        I2O, dźwięk, opiekun 3c501 w 2.2/2.4.

Robert Love <rml@tech9.net> [14 lut 2002]
        Wywłaszczalne jądro jest moje.

Deweloperzy ALSA <alsa-devel@alsa-project.org> [12 lut 2002]
Jaroslav Kysela <perex@perex.cz> [12 lut 2002]
        Advanced Linux Sound Architecture
        Łatki ALSA są dostępne pod adresem:
        ftp://ftp.alsa-project.org/pub/kernel-patches/*

Neil Brown <neilb@cse.unsw.edu.au> [08 feb 2002]
        Jestem zainteresowany wszystkimi kwestiami, które dotyczą następującego kodu:
        serwer NFS        (fs/nfsd/*)
        programowego RAID (drivers/md/{md,raid,linear})
        lub innych związanych z tym plików

Maksim Krasnyanskiy <maxk@qualcomm.com> [08 lut 2002]
        Jestem autorem i opiekunem podystemu Bluetooth i sterownika urządzenia
        Universal TUN/TAP.
        Obecnie pracuję głównie nad rzeczami związanymi z Bluetooth.

Rik van Riel <riel@conectiva.com.br> [07 lut 2002]
        Przysyłajcie mi rzeczy związane z VM, z CC: do linux-mm@kvack.org, proszę.

Geert Uytterhoeven <geert@linux-m68k.org> [07 lut 2002]
        Pracuję nad podystemem bufora ramki, przeniesieniem na m68k (część dotycząca
        Amigi) i przeniesieniem na PPC (część CHRP LongTrail).
        Niestety, nie mam zbyt wiele wolnego czasu by naprawdę popracować nad tymi
        rzeczami. Moja praca zawodowa nie jest związana z Linuksem (na razie :-). Nie
        mogę nic obiecać w kwestii mojej wydajności jako opiekuna.

H. Peter Anvin <hpa@zytor.com> [07 lut 2002]
        kod uruchamiania dla i386
        protokół startowania dla i386, autofs3,
        skompresowane iso9660
        (ale przyjmę wszystkie zmiany związane z iso9660);
        kierownik stron kernel.org; proszę się ze mną kontaktować
        w sprawach związanych ze sponsorowaniem.

administratorzy kernel.org <ftpadmin@kernel.org> [07 lut 2002]
        Administratorzy kernel.org. Daj nam znać jeśli coś nie działa, a jeśli
        chcesz jakiejś zmiany, to upewnij się, że dajesz nam przynajmniej 1-2 tygodnie.
        Zwróć uwagę proszę, że dostajemy dużo próśb o nowości, a dużo z nich
        nie daje się pogodzić, albo po prostu nie są praktyczne; nie mamy czasu, by
        odpowiadać na wszystkie prośby.

Greg KH <greg@kroah.com> [07 lut 2002]
        Jestem opiekunem USB i PCI Hotplug.

Trond Myklebust <trond.myklebust@fys.uio.no> [07 lut 2002]
        Jestem opiekunem klienta NFS.

James Simmons <jsimmons@transvirtual.com> [07 lut 2002]
        Podsystemy konsoli i bufora ramki.
        Bawię się także warstwą wejścia. 

Richard Gooch <rgooch@atnf.csiro.au> [07 lut 2002]
        Opiekuję się devfs. Chciałbym żeby ludzie umieszczali mnie w Cc:, gdy zgłaszają
        problemy z devfs, ponieważ nie czytam wszystkich informacji na linux-kernel.
        Przesyłajcie łatki na devfs bezpośrednio do mnie, nie pomijajcie mnie
        wysyłając je Linusowi/Marcelo/Alanowi/Dave'owi itp.

Russell King <rmk@arm.linux.org.uk> [06 lut 2002]
        Opikeun architektury ARM. Proszę, przesyłajcie mi wszystkie łatki na ARM przez system
        łatek dostępny pod adresem:
        http://www.arm.linux.org.uk/developer/patches/
        Opiekun nowych sterowników portu szeregowego w 2.5. Przesyłaj łatki na
        rmk+serial@arm.linux.org.uk

Andrew Morton <akpm@zip.com.au> [05 lut 2002]
        Jestem wrażliwy na każdy reprodukowalny błąd w którymkolwiek miejscu jądra 2.4.
        Specjalizuję się w ext2, ext3 i sterownikach sieciowych.
        Nie myślę o 2.5.x w tej chwili.

Petr Vandrovec <vandrove@vc.cvut.cz> [05 lut 2002]
        system plików ncpfs, sterownik bufora ramki dla matrox,
        problemy związane z VMware - w 2.2.x, 2.4.x, jak i 2.5.x.

Lista deweloperów reiserfs <reiserfs-dev@namesys.com> [05 lut 2002]
        Wysyłaj wszystkie rzeczy związane z reiserfs włączając w to raporty, poprawki,
        propozycje, ale też wszystkie inne rzeczy.

Oleg Drokin <green@linuxhacker.ru> [05 lut 2002]
        SA11x0 USB-ethernet i SA11x0 watchdog są moje.

Vojtech Pavlik <vojtech@ucw.cz> [05 lut 2002]
        Nie wahaj się wysłać mi raportu o błędach i łatek na sterowniki urządzeń wejściowych
        (drivers/input/*, drivers/char/joystick/*)
        Chciałbym także dostawać raporty o błędach i łatki dla następujących sterowników USB:
        printer, acm, catc, hid*, usbmouse, usbkbd, wacom.
        Wszystkie inne (spoza listy) zmiany sterowników USB powinny iść do
        opiekuna USB (mam nadzieję, że jest jakiś na tej liście :-).
        Umieść mnie w CC jeśli wysyłasz informacje związane ze sterownikiem VIA IDE
        (jakkolwiek nie jestem opiekunem podystemu IDE).

======= Te pozycje zaproponowali ludzie na lkml ========

Ralf Baechle <ralf@gnu.org> [27 mar 2002]
        Jestem opiekunem mips/mips64.

David S. Miller <davem@redhat.com> [07 lut 2002]
        Jestem opiekunem Sparc64 i podstaw obsługi sieci.

======= Te napisałem sam ========
======= Czekam na potwierdzenie/poprawki od tych ludzi ========

Urban Widmark <urban@teststation.com> [13 lut 2002]
        smbfs

Jeff Garzik <jgarzik@mandrakesoft.com> [12 lut 2002]
        Jestem gościem od sterowników kart sieciowych (8139 na przykład).
        Umieść mnie i Andrew Mortona <akpm@zip.com.au> w CC: listów dotyczących
        łat na sterownik sieci.

Lista dyskusyjna video4linux <video4linux-list@redhat.com> [12 lut 2002]
Gerd Knorr <kraxel@bytesex.org> [12 lut 2002]
        video4linux

Tim Waugh <twaugh@redhat.com> [08 lut 2002]
        > Kto opiekuje się rzeczami związanymi z linux iomega?
        W 2.4.x, ja (teoretycznie). W tej chwili nie mam czasu na 2.5.x.

Alexander Viro <viro@math.psu.edu> [5 lut 2002]
        NIE jestem opiekunem podsystemu systemów plików. Ale nie zabiję cię, jeśli
        przyślesz mi jakieś raporty błędów generalnie dotyczące fs i (mam nadzieję) łatki.

Eric S. Raymond <esr@thyrsus.com> [5 lut 2002]
        Przesyłaj mi raporty błędów i propozycje dotyczące konfiguracji jądra.
        Będę też bardziej niż zadowolony, gdy dostanę pozycje ,,pomocy'' dla
        opcji konfiguracyjnych jądra (Configure.help)

G?rard Roudier <groudier@free.fr> [5 lut 2002]
        Jestem gościem od SCSI.

Jens Axboe <axboe@suse.de> [5 lut 2002]
        Jestem opiekunem podsystemu urządzeń blokowych.

Keith Owens <kaos@ocs.com.au> [5 lut 2002]
        ksymoops, kbuild, .. .. .. .. .  są moje.

Linus Torvalds <torvalds@transmeta.com> [5 lut 2002]
        Nie przysyłaj mi niczego, chyba, że jest to dla 2.5 i dobrze przetestowane,
        przedyskutowane na lkml i używane przez znaczącą liczbę ludzi.
        Przesyłanie mi małych poprawek i uaktualnień sterowników jest
        generalnie złym pomysłem; prześlij je opiekunom podystemów i/lub do integratorów
        ,,małych rzeczy'' (obecnie jest to Dave Jones <davej@suse.de>,
        zobacz pozycję na tej liście dotyczącą jego). Wybaczcie, nie mogę robić wszystkiego.

Marcelo Tosatti <marcelo@conectiva.com.br> [5 lut 2002]
        Nie przysyłaj mi niczego, chyba, że jest to dla 2.4 i dobrze przetestowane.
        Jeśli przysyłasz małe poprawki albo aktualizacje sterowników, prześlij kopię
        do opiekuna podystemu i/lub do integratorów ,,małych rzeczy'':
        - Alan Cox <alan@lxorguk.ukuu.org.uk>,
        - Rusty Russell <trivial@rustcorp.com.au>.

Rusty Russell <rusty@rustcorp.com.au> [5 lut 2002]
        > Oto pewne poprawki czyszczące kod w...
        Chcesz, żeby to dodał do zestawu trywialnych łatek, żeby zostało prześledzone?
        Jeśli tak, to pisz (lub wstaw adres w cc:) na trivial@rustcorp.com.au.

24. Stan podsystemu pamięci wirtualnej w 2.4

19 Aug 2002 - 20 Aug 2002 (5 posts) Archive Link: "=?iso-8859-1?Q?Re: Linux 2.4.20-pre4?="

Ktoś spytał, czy zmiany w podsystemie pamięci wirtualnej Andrei Arcangeli z jego drzewa -aa zostaną włączone w 2.4.20, czy może w którymś z późniejszych jąder 2.4, czy w ogóle zostną włączone; ktoś inny powiedział, że ma nadzieję, iż zostaną włączone szybko, bo wyglądają naprawdę dobrze. Rik van Riel powiedział, że nie stanie się tak do momentu, gdy ktoś podzieli wielką łatkę -aa na małe, niezależne kawałki, co znacznie zwiększy szanse na włączenie; Martin J. Bligh zauważył, że wedle stanu jego wiedzy, Andrew Morton już to zrobił. Ktoś inny to potwierdził, dodając, że w 2.4.19 znalazło się już kilka kawałków, a reszta czeka na wejście w 2.4.20.

25. Prealokowanie bloków na ReiserFS

20 Aug 2002 (1 post) Archive Link: "[bk] Reiserfs patch 1 of 1 for 2.4.20"

People: Hans Reiser

Hans Reiser ogłosił: "Podziękowania dla Olega Drokina. Ten zbiór zmian uaktywnia w domyślnej konfiguracji prealokację bloków w systemach plików reiserfs. Zapobiega to masowemu zakłócaniu układu plików oraz masowym odwołaniom do alokatora, które mogą negaywnie wpłynąć na wydajność, zwłaszcza przy obciążeniach z wielu procesów. Łatka przywraca domyślne zachowanie z 2.4.19, ale wykorzystuje nowy kod alokujący. Proszę o zaaplikowanie. Możecie ją pobrać z bk://thebsh.namesys.com/bk/reiser3-linux-2.4"

26. Dostępny jest devfs v199.16

20 Aug 2002 (1 post) Archive Link: "[PATCH] devfs v199.16 available"

People: