|
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 |
linux-kernel FAQ | zapisz się na linux-kernel | archiwa linux-kernel | kernelnotes.org | Nawigator po źródłach Linuksa LxR | Wszystkie jądra | Porty jądra Linuksa | Dokumentacja do jądra | Encyklopedia Gary'ego: jądro Linuksa | #kernelnewbies
Table Of Contents
| 1. | 25 Sep 2001 - 28 Sep 2001 | (8 posts) | Nazywanie zrzutów pamięci |
| 2. | 26 Sep 2001 - 28 Sep 2001 | (24 posts) | Testy i błędy w nowym VM z 2.4 |
| 3. | 27 Sep 2001 - 29 Sep 2001 | (10 posts) | Kilka testów wydajnościowych VM |
| 4. | 27 Sep 2001 - 1 Oct 2001 | (13 posts) | Gdy koderzy krakują: status 0.01 |
| 5. | 27 Sep 2001 - 3 Oct 2001 | (7 posts) | Stan NFS i TCP w 2.4 |
| 6. | 27 Sep 2001 - 1 Oct 2001 | (20 posts) | Developerzy cały czas pracują nad starą VM w jądrach serii -ac |
| 7. | 28 Sep 2001 - 4 Oct 2001 | (16 posts) | Kolejna porcja reakcji developerów na rozległe zmiany w 2.4 |
| 8. | 28 Sep 2001 - 29 Sep 2001 | (11 posts) | Stan ext3 i VM w jądrach serii -ac |
| 9. | 29 Sep 2001 | (6 posts) | Sukces i problemy z nową obsługą pamięci wirtualnej |
Introduction
Tym, którzy są zainteresowani zrozumieniem aktualnej sytuacji na Bliskim Wschodzie chciałem polecić kilka rzeczy, które ostatnio miałem okazję przeczytać. Pierwszą pozycją jest krótka, ogólna historia, Arabowie w historii autorstwa Bernarda Lewisa. Bez zarzucania czytelnika zbyt dużą liczbą detali i analiz, bardzo dobrze i ciekawie przedstawia społeczną i polityczną historię Bliskiego Wschodu. Wybrałem tę pozycję jako pierwszą, ponieważ chciałem móc zrozumieć bardziej zaawansowane analizy napisane na ten temat, takie jak praca Edwarda Saida, intelektualisty Palestyńskiego. W chwili obecnej czytam jego Pytanie o Palestynę. To jest niewiarygodna książka, napisana z wielką uwagą. Bardzo ją polecam. Aby poczuć jego styl, przeczytajcie jego esej na temat ataków z 11 września.
Przez kilka ostatnich tygodni słyszałem wiele opinii, dlaczego te ataki miały miejsce, od mało prawdopodobnych do absurdalnych. Jedna z bardzo zaprzyjaźnionych ze mną osób powiedziała mi, że Arabowie, w wyniku swojego surowego pustynnego życia, nie mają poczucia humoru, i że jest ,,naszym'' obowiązkiem, jako chrześcijan, pójść tam, aby nawrócić Arabów na chrześcijaństwo, tak aby dzielić się z nimi naszym błogosławieństwem oraz aby nauczyli się śmiać.
Nie sądzę żebym miał dużo lepsze rozeznanie sytuacji niż owa osoba. Moje błędne koncepcje mogą być mi bliższe, i z tego powodu bardziej uzasadnione, ale cały czas opierają się na niedoinformowaniu. Dla mnie, wiedza na temat historii stojącej za tymi atakami jest niezbędna, abym mógł wyrobić sobie sensowną opinię na ten temat. Co inteligentni Palestyńczycy i inni Arabowie myślą o tym, co się teraz dzieje? To jest to, co chciałbym zrozumieć.
Mailing List Stats For This Week
We looked at 1422 posts in 6050K.
There were 529 different contributors. 229 posted more than once. 192 posted last week too.
The top posters of the week were:
1. Nazywanie zrzutów pamięci
25 Sep 2001 - 28 Sep 2001 (8 posts) Archive Link: "[PATCH] opcja do nazywania plików ze zrzutami pamięci"
People: Eli Carter, Bill Davidsen, Alan Cox, Don Dugger
Eli Carter poinformował o łacie, która umożliwia nadawanie zrzutom pamięci (ang. core dump) unikalnych nazw. Jak to określił "gdy niebo runie nam na głowy, byłoby miło gdyby spadło w kilka miejsc." Jego łatka była przeznaczona dla jąder 2.2, ale powiedział, że jeśli będzie zainteresowanie, to przeniesie ją na 2.4. Bill Davidsen odparł:
Ponieważ Ty dodajesz taką funkcjonalność i wygląda na to, że inni dodają podobne rzeczy, byłoby *bardzo* sensownie, aby umożliwić umieszczanie wszystkich zrzutów w jednym, wybranym miejscu (moje pierwsze skojarzenie to /var/core), tak aby nie skończyło się miejsce na dysku w przypadku uzyskania wielu zrzutów.
Nazwa katalogu mogłaby być ustalona w /proc/sys/coredir (czy jakoś tak) z domyślną wartością "." oczywiście.
Poza tym podoba mi się pomysł, chociaż uważam, że ,,nazwa'' procesu może spowodować wiele konfliktów pomiędzy wątkami, a pidy są powtarzalne. Być może jest lepszy pomysł, ale większość moich jest niedorobiona. To naprawdę ułatwiłoby większość analiz zrzutów.
Eli odpowiedział, że nie miał czasu na implementację tych wszystkich rzeczy, chociaż przyznał, że rzeczywiście mogą być użyteczne. Gdzie indziej, Padraig Brady zasugerował użycie 'core.PID' zamiast 'core.nazwaprocesu', jak to ma miejsce u Eliego. Zasugerował nawet zastosowanie 'core.PID' dla każdego wątku procesu, a Alan Cox odpowiedział: "Drzewo -ac i ostatnie -linus już mogą używać core.pid dla każdego wątku." Eli sprawdził to, ale zauważył, że nie ma tego w serii 2.2. Spytał zatem, czy są plany aby przenieść to z 2.4, na co Don Dugger rzekł: "Aby sprawić, by jądra z serii 2.2.x tworzyły `core.pid', wystarczy zmienić jedynie 2 linie w `fs/binfmt_elf.c', zwiększając rozmiar tablicy, która trzyma nazwę pliku oraz `sprintfując' do niej pid. Mam łatę na jądra 2.2.x, która zrzuca pamięć dla wszystkich wątków i zapisuje te zrzuty w plikach `core.pid'." Eli zauważył: "Cóż, gdy spytałem o to Alana, powiedział ,,Zrobienie tego w 2.2 jest bardzo trudne z powodów wewnętrznego blokowania''... Nie jestem gotów aby się tym zająć. Jeśli masz łatę, która robi to poprawnie, wyślij ją Alanowi. Jednak chciałbym mieć możliwość wyboru tej opcji, którą zaproponowałem i wysłałem, jako część 2.2 *phi*... to jest po prostu przywracanie funkcjonalności, która była we wcześniejszych wersjach Linuksa jako opcja kompilacji. (Z tego co rozumiem, to jest coś podobnego do tego, co zostało już jakiś czas temu zrobione w BSD... ale jako, że jestem młodym żółtodziobem, to w zasadzie nie jestem pewien.)"
Koniec wątku.
2. Testy i błędy w nowym VM z 2.4
26 Sep 2001 - 28 Sep 2001 (24 posts) Archive Link: "VM w 2.4.10(+tweaks) vs. 2.4.9-ac14/15(+inne)"
People: Craig Kulesa, Andrea Arcangeli, Rik van Riel
Craig Kulesa zgłosił:
Tak jak o to proszono, tu są wyniki testów, które przeprowadziłem na ostatnich łatach VM. Testy są opisane w poprzedniej wiadomości dostępnej tutaj:
http://www.uwsg.indiana.edu/hypermail/linux/kernel/0109.3/0033.html
Wyniki:
Wydajność 2.4.10 jest o niebo lepsza w porównaniu do 2.4.[7-9], ale testy cały czas pokazują, że jest jeszcze miejsce na poprawki w VM z 2.4.10. 2.4.10 i 2.4.10(+00_vm-tweaks-1) zachowywały się podobnie. Łata vm-tweaks poprawiła działanie swapa, ale ani liczba stron wyswapowywanych, ani liczba stron zeswapowywanych się specjalnie nie zmieniły. Zatykanie systemu brudnymi stronami przy pomocy 'dd' cały czas powoduje przeskakiwanie w XMMS.
Przetestujemy dokładniej kod starzenia/porządkowania listy przez większe obciążanie systemu w kroku d), dodając mozillę do testów aplikacji zwykłego użytkownika. Będziemy także odgrywać strumień audio mp3 przez cały test.
2.4.10(+00_vm-tweaks-1)
48 sekund - ładowanie StarOffice
28 sekund - obrót obrazka 2560x2560 w GIMP-ie
82400 KB wyswapowanych, 92148 KB zeswapowanych z powrotem
2.4.9-ac14 + starzenie (ang. aging
33 sekundy - ładowanie StarOffice
25 sekund - obrót obrazka w GIMP-ie
30072 KB wyswapowanych, 22252 KB zeswapowanych z powrotem
2.4.9-ac15 + starzenie + czyszczenie (ang. launder)
33 sekundy - ładowanie StarOffice
24 sekundy - obrót obrazka w GIMP-ie
57556 KB wyswapowanych, 25900 KB zeswapowanych z powrotem
Sesje 'vmstat 1' dla wszystkich trzech przypadków są dostępne pod adresem: http://loke.as.arizona.edu/~ckulesa/kernel/
Widać, że 2.4.10+ pracuje DUŻO ciężej, aby trzymać cache dentry i i-węzłów w pamięci, i bardziej wyswapowuje, aby to zrównoważyć. Jądra ac14/ac15 znacznie swobodniej operują na tym cache'u, i nie wyswapowują stron pamięci używanych przez aplikację tak czytelnie.
Sprawdźmy to nie wypełniając uprzednio cache'u i-węzłów i dentry przy użyciu 'slocate' i przeprowadzając ten sam test:
2.4.10(+00_vm-tweaks)
26 sekund - ładowanie StarOffice
24 sekundy - obrót obrazka w GIMP-ie
48332 KB wyswapowanych, 33521 KB zeswapowanych z powrotem
2.4.9-ac14 + starzenie
32 sekund - ładowanie StarOffice
26 sekund - obrót obrazka w GIMP-ie
37392 KB wyswapowanych, 11952 KB zeswapowanych z powrotem
2.4.9-ac15 + starzenie + czyszczenie
32 sekundy - ładowanie StarOffice
22 sekundy - obrót obrazka w GIMP-ie
23884 KB wyswapowanych, 10828 KB zeswapowanych z powrotem
2.4.10 tym razem sprawuje się znacznie lepiej; w szczególności ładowanie StarOffice, które było tak obciążone przez wyswapowywanie, spowodowane przez cache'owanie dentry/i-węzłów poprzednio, przebiegło o wiele lepiej. Jednakże, cały czas jest więcej stronicowania niż w 2.4.9-ac1[4-5].
Zróbmy jeszcze jeden eksperyment ze starzeniem/porządkowaniem listy. Zamiast najpierw tworzyć obrazek 2560x2560 w GIMP-ie, a potem ładować StarOffice i inne aplikacje (aby rozpocząć swapowanie i spowodować, aby strony GIMP-a były kandydatami do zabrania) -- tym razem załadujmy StarOffice najpierw, a dopiero później stwórzmy obrazek w GIMP-ie. To powinno utrzymać strony obrazka w GIMP-ie 'młodszymi' i przypuszczalnie nie powinny stronicować się z powrotem do pamięci (obrót powinien być szybszy). Jednakże StarOffice może dużo intensywniej swapować.
2.4.10(+00_vm-tweaks)
25 sekund - ładowanie StarOffice
29 sekund - obrót obrazka w GIMP-ie
64427 KB wyswapowanych, 77422 KB zeswapowanych z powrotem
2.4.9-ac14 + starzenie
30 sekund - ładowanie StarOffice
24 sekundy - obrót obrazka w GIMP-ie
22147 KB wyswapowanych, 8922 zeswapowanych z powrotem
2.4.9-ac15 + starzenie + czyszczenie
31 sekund - ładowanie StarOffice
21 sekund - obrót obrazka GIMP-ie
17204 KB wyswapowanych, 8224 zeswapowanych z powrotem
Zachowanie 2.4.10 zaskoczyło mnie. Strony GIMP-a są młodsze w pamięci, ale obrót obrazka został spowolniony przez swapowanie -- wolniejszy niż poprzednio. Do tego więcej stron StarOffice zostało wyswapowanych, więc musiały zostać zeswapowane, aby zamknąć aplikację. Jestem zakręcony. Zachowanie ac14/ac15 było bliższe moim oczekiwaniom; strony GIMP-a były młode i nie swapowane. Tylko najwcześniejsze strony StarOffice musiały zostać przywołane.
To są przykłady raczej 'zwykłego' obciążenia, przy którym 2.4.10 musi wykonać trochę pracy przy obsłudze; jądro ac15 sprawuje się przynajmniej przy tym zestawie testów lepiej (ac15 również nie powoduje skoków XMMS przy tworzeniu dużej liczby brudnych stron przy pomocy 'dd'). Ale wszystkie trzy jądra w czasie testów nie powodowały zamrożenia systemu, co jest znacznym postępem w stosunku do wcześniejszych wersji 2.4. Bardzo fajnie.
Uwaga odnośnie page_lander(). ac14 ma najsprawniejsze swapowanie, z małymi kawałkami czyszczonymi za jednym razem. W ac14+starzenie oraz ac15+starzenie+czyszczenie wyswapowują duże (10-20 MB) kawałki za jednym razem. Trzeba jednak przyznać, że interfejs użytkownika odpowiadał cały czas, a XMMS nie przeskakiwał, ale większość z wyswapowanych 60MB w pierwszym teście w ac15+łaty wyszło z jedynie TRZECH linijek z rezultatu 'vmstat 1'. Poza tym nie było żadnego swapowania.
W odpowiedzi na fragmenty dotyczące tego, że 2.4.10 swapowało mocniej z powodu trzymania cache dentry i i-węzłów w pamięci, Andrea Arcangeli odpowiedział: "2.4.10 więcej wyswapowuje także dlatego, że nie śledzę, które strony w swapie są aktualne. To powinno zostać wkrótce poprawione, jak tylko uda mi się przekonać get_swap_page do pobierania ze stron swapu zamapowanych wyłącznie w cache swapu." Rik van Riel zasugerował, że try_to_swap_out() mogło być lepszym miejscem na to, ale Andrea odparł: "To jest oczywiście jedna z możliwości, ale w takim wypadku musielibyśmy zduplikować to we wszystkich miejscach, gdzie wołamy get_swap_page, rozumiesz? Sądzę, że o wiele lepiej pasuje to ukryć w get_swap_page: semantyka get_swap_page() to ,,daj wołającemu kawałek nowozaalokowanego swapa''. Także MSZ to jest we własnym interesie tej funkcji zaniechać naszych ,,optymalizacji'', aby wygenerować wolny kawałek swapa, gdy już cały swap został zaalokowany."
W tym miejscu Robert Macaulay zgłosił blokadę w nowym VM. Po krótkich łowach na babola, Andrea stwierdził, że błąd jest nie w jego kodzie, ale w logice NOHIGHIO. Wysłał łatę, która miała to naprawić, ale Linus Torvalds znalazł wyścigi powodowane przez nią. Wysłał własną łatę, aby zobrazować swój pomysł. Andrea zgodził się, że łata poprawia błąd, ale jest mniej zgrabna niż jego. Rik wtrącił swoje trzy grosze: "Ja bym to uznał jako cechę. Nieudokumentowane subtelne rzeczy zazwyczaj umierają w ciągu 6 miesięcy, często nawet w wyniku zmian dokonanych przez autora oryginalnego triku." Było jeszcze trochę dyskusji i wątek się zakończył.
3. Kilka testów wydajnościowych VM
27 Sep 2001 - 29 Sep 2001 (10 posts) Archive Link: "[BENCH] Problemy z przepustowością i uczciwością WE/WY w 2.4.10 i 2.4.9-ac15"
People: Robert Cohen
Robert Cohen ogłosił:
Po ostatnich pokręconych zmianach w podsystemie VM w jądrze Linuksa, zdecydowałem się przeprowadzić parę testów. Testy polegają na badaniu wydajności systemu plików. Pierwszy raz przeprowadziłem ten test mniej więcej rok temu z dość mizernymi wynikami, byłem więc ciekaw, jak się różne rzeczy poprawiły.
Dobra wiadomość -- poprawiło się. Zła wiadomość -- dalej nie jest dobrze.
Do testu użyłem serwera linuksowego, który działał jako serwer plików (wykorzystując netatalk) oraz 5 klientów macintosh. Każdy klient zapisywał 30MB plik i następnie go odczytywał. Każdy klient wykonywał te operacje 10 razy. Łączna suma przesłanych danych to 1.5GB danych zapisanych i 1.5GB danych odczytanych.
Testy zostały przeprowadzone z następującymi jądrami
2.4.10: oficjalne jądro 2.4.10
2.4.10-aa1: jądro 2.4.10 z łatą aa1 Andrei, włączając w to vm-tweaks-1
2.4.10-p: 2.4.10 z łatą wywłaszczającą jądro Roberta Love
2.4.9-ac15: ostatnie jądro Alana
2.4.9-ac15-al: 2.4.9-ac15 z łatami Rika ze starzeniem i czyszczeniem
2.4.9-ac15 nie spisało się za dobrze, ale łaty Rika pomogły rozwiązać te
problemy, więc zostawiam 2.4.9-ac15 do dyskusji.
Sprzęt to jednoprocesorowy P-II 266 z 256MB pamięci i dyskami SCSI podłaczonymi do kontrolera Adapteca. Klienci i serwer byli podłączeni do switcha 100Mbit. Sprzęt nie jest rewelacyjny ale dyski i LAN są w stanie osiągnąć przepustowość 10MB/s.
W trakcie testu każdy z klientów działa na 30MB plikach. 5 klientów daje 150MB używanej przestrzeni dyskowej. Przy 256MB pamięci, wszystkie pliki się w niej mieszczą. Nie sądzę, aby to był realistyczny test serwera plików, ponieważ, jeśli wszystkie pliki na serwerze plików mieszczą się w pamięci, oznacza to, że jest tej pamięci za dużo :-).
Tak więc do wszystkich testów, oprócz bazowego testu, pamięć serwera została przy pomocy LILO ograniczona do 128MB.
Cechy serwera plików, które uważam za istotne to przede wszystkim szybkość serwerowania plików. Ale także sprawiedliwość przy obsłudze klientów powinna zapewnić mniej więcej równy podział przepustowości. Tak więc we wszystkich testach podaję czas zakończenia ostatniego klienta, który określa całkowitą szybkość działania, a także czas zakończenia działania pierwszego klienta, który nie powinien być wiele wcześniejszy niż ostatniego klienta.
Podsumowanie wyników
======================
W bazowym teście z 256MB pamięci, wszystkie jądra sprawiały się bez zarzutu. Mniej więcej 10MB/s przepustowości było sprawiedliwie rozdzielone pomiędzy klientów.
W rzeczywistych testach z 128MB pamięci nie było już tak różowo. Wszystkie jądra działały podobnie, ale żadne zadowalająco. Problem, który zaobserwowałem polegał na tym, że wszyscy klienci w pewnym momencie zaczynali dostawać dane z mniejszą szybkością - jedynie kilku MB/s łącznie na wszystkich maszynach. Towarzyszyło temu głośne jeżdżenie po dysku (tak było słychać). Potem jeden z klientów stał się ,,wybrańcem''. Ten klient uzyskali pełne 10MB/s pasma, a pozostałe były w tym czasie głodzone. Ten klient doszedł tak do końca, podczas gdy pozostałe były na początku pracy. Gdy ten klient skończył, dysk zaczał pracować jak szalony przez kilka chwil ograniczając znacznie transfer, dopóki kolejny klient nie stał się ,,wybrańcem''. Taka sytuacja trwała do momentu, gdy zostało 2-3 klientów, a pliki zaczęły się w całości mieścić w pamięci.
Ogólnie, całkowita szybkość działania nie jest taka zła, ale fakt, że jest to osiągane przez obsługę jednego klienta na raz, przy jednoczesnym głodzeniu innych jest niedopuszczalny w serwerze plików.
Uwaga: to nie jest dokładny test w tym sensie, że czasy wykonania nie są raczej powtarzalne. To znaczy, że nie bardzo można ich wykorzystać do cyzelowania jądra. Ale w tej chwili nie skupiam się na podrasowywaniu, ale na wielkiej, otwartej dziurze w wydajności serwowania plików w Linuksie. Przypuszczalnie, takie niepowtarzalne wyniki same w sobie stanowią problem. Z lepiej dostrojonym jądrem wyniki byłby znacznie bardziej powtarzalne.
Szczegółowe wyniki
===============
Tu są czasy działania testów dla różnych jąder. Czasy są w formacie minuty:sekundy. Każdy test przeprowadziłem dwa razy. Wyniki vmstat 5 są dostępne pod adresem http://tltsu.anu.edu.au/~robert/linux_logs/ Jednak żaden z wyników vmstata nie pokazywał problemów. Żadne jądro nie używało zbytnio swapa. I nie widziałem żadnych problemów z demonami takimi jak kswapd zużywającymi czas.
Test podstawowy z 256MB
Przebieg 1 Czas pierwszego 4:05 Czas ostatniego: 4:18
Uwagi: to jest najlepsza zanotowana wydajność
linux-2.4.10: Przebieg 1 Czas pierwszego 2:15 Czas ostatniego: 5:36 Przebieg 2 Czas pierwszego 1:41 Czas ostatniego: 6:36 Linux-2.4.10-aa1 Przebieg 1 Czas pierwszego 3:38 Czas ostatniego: 8:40 Przebieg 2 Czas pierwszego 1:35 Czas ostatniego: 7:07
Uwagi: nieco gorzej niż czyste 2.4.10
Linux-2.4.10-p Przebieg 1 Czas pierwszego 1:39 Czas ostatniego: 8:33 Przebieg 2 Czas pierwszego 1:46 Czas ostatniego: 6:10
Uwagi: wcale nie lepiej niż 2.4.10, oczywiście jądro z wywłaszczaniem nie jest polecane na serwery, ale skoro problem, który obserwowałem wynikał z niesprawiedliwego rozdzielania zasobów, to miałem nadzieję, że coś pomoże.
Linux-2.4.9-ac15-al Przebieg 1 Czas pierwszego 2:00 Czas ostatniego: 5:30 Przebieg 2 Czas pierwszego 1:45 Czas ostatniego: 5:07
Uwagi: tu jest nieco lepiej niż w 2.4.10 w tym sensie, że 2 klientów naraz staje się ,,wybrańcami'' i kończą wcześniej niż kolejnych 2 itd.
Analiza
========
W bazowym teście z 256MB, ponieważ wszystkie pliki mieszczą się w pamięci, nie ma żadnego odczytu. Tylko zapis. VM zdaje się obsługiwać tę sytuację poprawnie.
W testach z 128MB mieliśmy zarówno odczyty, jaki i zapisy, ponieważ różnie rzeczy były wyrzucane z cache'u stron. VM nie radzi sobie z tym za dobrze. Symptom rzężenia dyskiem, który zaobserwowałem podczas testów, wiążę z kiepską wydajnością windy (ang. elevator). Jeśli winda nie grupuje wystarczająco żądań, dostajesz zachowanie dysku takie: ,,mały odczyt, szukanie, mały odczyt, szukanie'', zamiast grupowania rzeczy w większe kawałki przy jednym odczycie, bądź kilkukrotnych odczytów pomiędzy szukaniem.
Problem, gdy jeden klient dostaje całą szerokość pasma musi być związany z jakąś blokadą. Normalnie podejrzewałbym, że zablokowany proces zostanie wyswapowany, ale w tym przypadku swap nie jest w ogóle używany. Przypuszczam, że strony procesów klientów mogły zostać zapisane, aby dostać wolne miejsce na cache stron. Ale to zaowocowałoby wzrostem rozmiaru cache'u stron w vmstat. A tak się nie dzieje.
Sądzę, że, jak na ironię, jest to związane ze zbyt agresywnym sortowaniem żądań przez windę. Wszystkie dane plików dla procesów, które są zablokowane, muszą zostać wzięte z cache'u stron i zapisane, i zablokowany proces nie może pobrać wystarczająco dużo danych, aby zanotować jakikolwiek postęp. Operacje dyskowe dla ,,dobrego'' procesu przebiegają wystarczająco szybko, aby zajmować dysk i są przesortowywane na górę windy, ponieważ są blisko obecnej pozycji głowicy. I nikt inny nie jest w stanie zanotować żadnego postępu.
Były sugestie, że problemy mogą być specyficzne dla netatalk. Nie byłem jednakże w stanie znaleźć niczego, co by wskazywało, że netatalk robi coś dziwnego. Strace'owanie procesów serwera plików pokazuje, że są wykonywane po prostu odczyty i zapisy bloków 8KB. Pliki nie są otwierane O_SYNC, a proces serwera plików nie wykonuje żadnych odwołań do fsync. Tym bardziej, że to wszystko działa dobrze przy 256MB pamięci.
Nie byłem w stanie znaleźć jakiegoś niesieciowego testu, który pokazałby te same problemy. Testy takie jak 5 równoczesnych bonnie czy tiotest z 5 wątkami niewątpliwie robią to samo, ale nie byłem w stanie zauwazyć podobnych problemów.
W tej chwili uważam, że przyczyna tkwi w tym, że skoro 5 klientów walczy o pasmo sieci, to pakiety od każdego klienta przychodzą przemieszane. Więc ziarnistość operacji, które wykonuje serwer jest w porządku. W lokalnym teście, takim jak 5 bonnies, każdy proces dostaje pełny kawałek czasu do dostępu do swojego pliku, zanim następny plik zostanie obsłużony. To prowadzi do większej ziarnistości. Sądzę zatem, że zmodyfikowana wersja tiotest, która wykonuje sched_yeild po każdej operacji zapisu lub odczytu może mieć identyczne problemy. Nie sprawdziłem jednak jeszcze tej teorii.
4. Gdy koderzy krakują: status 0.01
27 Sep 2001 - 1 Oct 2001 (13 posts) Archive Link: "[PATCH] Blokada dysku w Linuksie 0.01"
People: Mikulas Patocka, Arnaldo Carvalho de Melo, Paul Gortmaker, Aaron Tiensivu, Richard Gooch, Rob Landley, Alan Cox
Mikulas Patocka, w poważnej psychozie, zauważył:
W Linuksie 0.01 jest błąd w sortowaniu żądań dysku - jeśli w momencie wystąpienia przerwania sortowanie jest włączone, procedura przerwań nie wyczyści do_dh - i tak dysk będzie zablokowany na zawsze.
W funkcji add_request również brakuje zabezpieczeń pamięci - kompilator mógłby zmienic porządek wpisów do zmniennych i wpisów do kolejki żądań - tworząc wyścig.
Nieszczęście Mikulas okazało się być zaraźliwe. Arnaldo Carvalho de Melo napisał: "Cudownie! Kto jest teraz opiekunem kernela z serii 0.x? Wydaje mi się, że 2.0 to Dave, 2.2 to Alan, 2.4 Linus, musimy zatem znaleźć kogoś do 1.2 i wreszcie otrzymać 1.2.14, ludzie, jak ja chciałem wtedy mieć jądro z kodem dynamicznego PPP... 8)"
Paul Gortmaker odpowiedział:
Cóż, IIRC, Alan i DaveM byli głównymi opiekunami 1.2.x z różnymi łatkami -ac i "ISS" (dodatkowe punkty dla tego, kto pamięta, co "ISS" oznaczało). Prawdopodobnie gdzieś mam jakieś łatki do 1.2.13...
Co do 1.0.9, w którymś momencie, lata temu, uaktualniłem je (cf. linux-lite), aby dało się kompilować z "nowym" gcc-2.7.2, kiedy RAM kosztował wielkie $$$ - nie wyobrażam sobie, aby ktokolwiek od tamtej pory tego dotykał.
$ ls -l date
-rwxr-xr-x 1 root root 13624 Sep 4 1992 date$ ldd ./date
/lib/libc.so.4 (4.0)$ ./date
łoooo! :) Gdybym tak miał Decwritera dla konsoli szeregowej...
W odpowiedzi na wyzwanie związane z "ISS" Aaron Tiensivu powiedział: "Internet Shit Slinger, jeśli dobrze pamiętam. :) Było także 1.2.14-LMP, Linux Maintenance Project.. miało nawet swoją listę dyskusyjną."
Szczęślwie, Richardowi Goochowi udało się utrzymać odporność i zauważył trzeźwo: " Ee, dlaczego zajmować się usuwaniem błędów w tak starożytnym kernelu, zamiast uaktualnić do nowocześniejszego 0.98:-)? To jak znaleźć błąd w 2.3.30 i naprawić go, zamiast zabrać się do 2.4.10 i sprawdzić, czy kłopot wciąż istnieje. " Odpowiedź Mikulas brzmiała: "Cóż - czemu nie? Algorytm blokowania przerwań dysku w 0.01 jest piękny (z wyjątkiem błedu - ale to da się naprawić). To coś, czego nie widzi się w 2.4.10 z tymi wszystkimi __cli, __sti, __save_flags, __restore_flags. Czemu więc nie wysłać zawiadomienia o błędzie i łatki z okazji dziesięciolecia Linuksa?"
Gdzie indziej Linus Torvalds zaproponował Mikulasowi przejęcie oficjalnej opieki nad serią 0.01.xx, ale Mikulas, w przebłysku rozsądku, odmówił. Powiedział: " Fajnie byłoby mieć dystrybucję opartą na linux-0.01. Zacząłem używać Linuksa w czasach 2.0, nie jestem więc zapewne właściwą osobą do opieki nad tym. Nie wiem nawet, gdzie mam szukać programów do tego i nie wątpię, że nie będzie działać na moim 4G dysku." Rob Landley odrzekł:
Możesz spróbować przeczytać archiwa listy dyskusyjnej z 1991 i początku 1992 roku:
http://www.kclug.org/old_archives/linux-activists/
Zmontowałem podsumowanie kilku ciekawszych wcześniejszych listów z 1991 i początków 1992 roku do pisanej przeze mnie ksiązki o historii komputerów...
Alan Cox dodał:
Lista z późnego 1993->95 jest zarchiwizowana na
http://www.linux.org.uk/Old-LK/Old-linux-kernel
Nie wiem teraz, czy reszta 1992-> późnego 1993 istnieje
A Rob dodał:
Archiwa kclug utrzymują, że sięgają drugiego tygodnia października 1993 roku. Jeszcze nie przegryzłem się przez nie tak daleko.
http://www.kclug.org/old_archives/linux-activists/
Nie wykorzystujcie ich, proszę, ZBYTNIO, wydaje mi się, że są na linii ISDN lub czymś podobnym...
(Powodem ograniczenia poszukiwań do połowy 1992 jest fakt, że wtedy dotyczyły już 0.95, 0.01 nie było więc aktualne...)
5. Stan NFS i TCP w 2.4
27 Sep 2001 - 3 Oct 2001 (7 posts) Archive Link: "stan nfs i tcp w 2.4"
People: James D Strandboge, Trond Myklebust
James D Strandboge zapytał, "Jaki jest stan tcp i nfs w jądrach 2.4? Strony na sourceforge'u (dotyczące tego) nie zmieniły się od jakiegoś czasu, a NFS FAQ na sourceforge'u stwierdza, że: ,,nfsv3 przez tcp nie działa - kod dla 2.4.x jak dotąd nie jest włączony''. Jakie poczyniono postępy w kierunku zakończenia tego? " Trond Myklebust odparł, "Żadne: AFAIK nikt jeszcze nie napisał jakiekolwiek kodu, który działałby jako serwer. Jakkolwiek klient działa... " James zapytał jak bardzo trzeba by się poświęcić żeby napisać kod dla TCP skoro napisano już kod dla UDP. Trond odpowiedział:
Największym problemem jest zapewnienie, że serwer pozbędzie się wszystkich wątków, gdy klient będzie zapchany.
W kodzie UDP używamy nieblokującego wy/we i po prostu ignorujemy wszystkie odpowiedzi, które nie przeszły. Dla TCP ignorowanie odpowiedzi nie będzie dobre, jako że klient będzie przysyłał ponownie żądanie co ~60 sekund. Obecnie kod używa blokującego we/wy czyli, że jeśli gniazdo się blokuje, zaczyna brakować wolnych wątków nfsd...
Są dwa możliwe sposoby postępowania:
Zacząłem pracę nad (2) zeszłej jesieni, ale nie miałem czasu zrobić dużo od tamtej pory. Jednakże jest to na mojej liście priorytetów w 2.5.x, więc jeśli nikt inny nie będzie chciał tym brudzić rąk to wrócę...
James poprosił Tronda o łatę z jego pracą nad drugą strategią, a Trond podrzucił odnośnik do http://www.fys.uio.no/~trondmy/src/pre_alpha/linux-2.4.0-test6-rpctcp.dif, wyjaśnił przy tym, "To jest łatka na linux-2.4.0-test6 i w zasadzie jest ona na etapie 'zabawki'. Na pewno nigdzie blisko wypuszczenia. IIRC względnie dobrze działa. " Mieli jeszcze krótką techniczną dyskusję, która wyjaśniła parę pomysłów i wątek się zakończył.
6. Developerzy cały czas pracują nad starą VM w jądrach serii -ac
27 Sep 2001 - 1 Oct 2001 (20 posts) Archive Link: "2.4.9-ac16 dobrze działa?"
People: Thomas Hood, Rik van Riel
Thomas Hood zgłosił, "Albo 2.4.9-ac16 ma, w porównaniu do poprzednich jąder serii 2.4, bardzo poprawioną wydajność systemu pamięci wirtualnej, albo ktoś wślizgnął się zeszłej nocy do mojego mieszkania i gdy spałem zauktualizował moją maszynę. Skłaniam się ku ostatniemu wytłumaczeniu." Rik van Riel odparł, "Teraz, gdy obsługa pamięci wirtualnej w jądrach -ac jest stabilna od paru tygodni, pomyślałem, że być może jest to czas, by w końcu wprowadzić parę dużych zmian wydajnościowych. Wydaje się, że działają ;)" Bill Davidsen zgłosił, że na maszynach z małą ilością pamięci obsługa się spowolniła i spowodował trochę dyskusji, zbyt technicznych do prezentacji.
7. Kolejna porcja reakcji developerów na rozległe zmiany w 2.4
28 Sep 2001 - 4 Oct 2001 (16 posts) Archive Link: "jądro się zmienia"
People: Pavel Zaitsev, Alan Cox, Andrew Ebling, Dan Maas
Pavel Zaitsev poskarżył się, "Zastanawiam się, czy kiedykolwiek nastąpi zwrot w kierunku starego zwyczaju i źródła jądra najpierw będą stablilne, a potem będzie rozpoczynana nowa gałąź rozwojowa. Administratorzy w mojej pracy są nieufni wobec przeniesienia się na linuksa z solarisa ze względu na zmiany jądra powodujące błędy, takie jak wymiana kodu monitorującego hardware, przepisanie sterowników kart sieciowych - to wszystkoe zepsuło inne oprogramowanie, albo po prostu nie działało. Osobiście uaktualniam jądro jak tylko czas mi pozwoli, zwykle co 0.0.2+. Spędziłem niemal 2 dni śledząc problemy z siecią, a to śledzenie skończyło się w kodzie źródłowym sterownika, który został radykalnie zmieniony na ,,lepsze''. Teraz nie ufam już, że jądra serii 2.4 będą *w ogóle* działać." Alan Cox odpowiedział, "Oczywiście nie jesteś jedyny. 2.4.10 naprawdę mnie ruszyło i nie przetrwało nawet jednej doby na moim testowym pudełku." Andrew Ebling odrzekł, "Lepiej by było zbyt wcześnie wystartować z 2.5.x niż ryzykować popsucie opinii Linuksowi udając, że nie niesprawdzone jądra są stabilne. Zacznijmy 2.5.x i pozwolić Alanowi oczyścić 2.4.x."
W pewnym miejscu dyskusji Dan Maas napisał:
Wydaje mi się bardzo zawstydzającym fakt, że podstawowe sterowniki takie jak aic7xxx, emu10k1, tulip, itp. regularnie nie działają w jądrach głównej linii. Nie miałem żadnych kłopotów z takimi rzeczami w Windows od paru lat... Oczywiście sterowniki dla Windows są parę procent wolniejsze, ale jak raz napisał Nathan Myers, ,,Nie ma sensu porównywać efektywności jednego systemu z drugim, który może wykonywałby pewne operacje szybciej, gdyby tylko się nie wywalał.''
Myślę, że główne podziękowania winni jesteśmy Alanowi Coksowi, który najbardziej stara się utrzymać porządek w domu, wśród chaosu w jakim rozwija się jądro (chwała panu Coksowi za wystarczająco długie, aż do uzyskania stabilności, utrzymywanie obsługi pamięci wirtualnej autorstwa Rika)
8. Stan ext3 i VM w jądrach serii -ac
28 Sep 2001 - 29 Sep 2001 (11 posts) Archive Link: "Linux 2.4.9-ac17"
People: Alan Cox, Hristo Grigorov, John Jasen, Mike Fedyk
Alan Cox ogłosił 2.4.9-ac17, a Mike Fedyk zapytał kiedy mniej więcej będzie włączona obsługa ext3 w jądra tej serii. Alan odpowiedział, "Wtedy kiedy człowiek od ext3 mnie o to poprosi. " Hristo Grigorov napisał, " A co kiedy my, zwykli użytkownicy prosimy żebyś to włączył?" Nie pojawiła się na to żadna odpowiedź, ale w przeszłości Alan jasno wypowiadał się, że będzie włączał jedynie takie łaty, których developerzy uważają, że są one gotowe. Prawdopodobnie chodzi o to, że w każdej sytuacji, w której kod jest nietrywialny, to właśnie developerzy najlepiej wiedzą, która wersja łaty jest najlepsza i którą należałoby włączyć. Umieszczenie po prostu najnowszej wersji łaty w jądrze -ac może spowodować sporo błędów.
Innym razem John Jasen spytał, "Ty (-ac) i linus (2.4.10 i .11-pre) podzieliliście się w kwestii obsługi VM, na wersję Rika i Andreasa, mam rację?" A Mike Fedyk spytał, " która obsługa pamięci wirtualnej będzie w 2.4.10-ac1?" Alan odpowiedział, "vm Rika i oprócz tego żadnych okropnych sztuczek z cache stron/urządzeniami blokowymi, które nadają się do 2.5. Naprawdę używam wersji, które wypuszczam i chciałbym żeby moje maszyny działały."
9. Sukces i problemy z nową obsługą pamięci wirtualnej
29 Sep 2001 (6 posts) Archive Link: "2.4.10 VM, aktywne strony cache i OOM"
People: Tobias Ringstrom, Linus Torvalds
Tobias Ringstrom zgłosił, że nowa obsługa pamięci wirtualnej jest, ogólnie patrząc, dużym sukcesem. Powiedział "2.4.10 VM świetnie działa na moim desktopie i domowym serwerze, znacznie lepiej niż poprzednie wersje. Nie wypróbowałem tylko jąder Alana." Jednakże udało mu się pokazać mały programik, który może spowodować, że system przestanie odpowiadać, pamięć mu się skończy i zacznie unicestwiać procesy. Napisał:
Następujący bardzo prosty program ilustruje taką sytuację:
#include <unistd.h>
int main()
{
char buf[512];}
while (read(0, buf, sizeof(buf)) == sizeof(buf));
return 0;
Program powinien czytać z urządzenia blokowego, ale wielki plik prawdopodobnie spowoduje to samo.
./a.out < /dev/hde1
Podczas działania programu wszystkie strony w cache ustawiają się na liście stron aktywnych, a kiedy pamięć jest wypełniona stronami aktywnymi, komputer zaczyna te strony usuwać z pamięci, w tym czasie właściwie przestaje odpowiadać, a po około pół minuty okazuje się, że brakuje mu pamięci (OOM) i zaczyna zabijać procesy. W tym czasie jest całe mnóstwo wolnej przestrzeni wymiany. W logach pojawiło się także sporo błędów typu nieudana alokacja rzędu zero.
Linus Torvalds odpowiedział, "w sytuacji kiedy masz _dużo_ więcej stron aktywnych niż nieaktywnych, nie poprawiony podsystem obsługi pamięci wirtualnej z 2.4.10 nie przeterminowywuje listy stron aktywnych dostatecznie szybko." Dodał, że problem ten został rozwiązany w ostatnich łatach Andrei Arcangeli. Przedyskutowali niektóre pomysły dotyczące rozwiązań tego problemu i Tobias napisał, że wypróbuje łaty Andrei.
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. |