Aktywne Wpisy
brednyk +143
***** TVN!
Wszystkie partie w piątkowym wydaniu Faktów pokazane rzeczowo jeśli chodzi o ostatni dzień kampanii a Konfederacja w negatywnym świetle i o tym że sondaże spadają, mimo że od miesiąca są na podobnym poziomie.
Oczywiście pompowanie Lewicy pokazanej najlepiej, w samych superlatywach.
Żenująca stacja, która ma być czymś innym niż TVP a jest takim samym szambem dezinformacyjnych. To mnie utwierdza w przekonaniu, że system trzyma się mocno.
Dlatego nie rozumiem jak
Wszystkie partie w piątkowym wydaniu Faktów pokazane rzeczowo jeśli chodzi o ostatni dzień kampanii a Konfederacja w negatywnym świetle i o tym że sondaże spadają, mimo że od miesiąca są na podobnym poziomie.
Oczywiście pompowanie Lewicy pokazanej najlepiej, w samych superlatywach.
Żenująca stacja, która ma być czymś innym niż TVP a jest takim samym szambem dezinformacyjnych. To mnie utwierdza w przekonaniu, że system trzyma się mocno.
Dlatego nie rozumiem jak
Heteroseksualiści i patrioci plusują, a waginosceptycy i wrogowie narodu siedzą cicho.
Piękna Ewunia - sól polskiej ziemi, wychowana na mleko od polskich krów, dorodna niewiasta, która jest pragnieniem każdego heteroseksualnego mężczyzny.
#slodkijezu #ladnapani #tyleczki
Piękna Ewunia - sól polskiej ziemi, wychowana na mleko od polskich krów, dorodna niewiasta, która jest pragnieniem każdego heteroseksualnego mężczyzny.
#slodkijezu #ladnapani #tyleczki
LKML, 10.11.2010 na temat tego patcha
Pamiętacie co robiliście w listopadzie roku pańskiego dwa tysiące dziesiątego?
Nie? W sumie nic dziwnego przecież to było aż 19 lat temu ( ͡° ͜ʖ ͡°), w czasach kernela 2.6.37, gdy procesory miały najczęśćiej dwa rdzenie a dyski SSD były rzadko spotykane. Natomiast ja pamiętam całkiem dobrze - tak jak setki użytkowników Linuksa śledziłem dyskusje dotyczące patcha nad którym zawchwyca się Linus w powyższym cytacie.
Dobrze, to co w jednym zdaniu robi ten patch?
Dodaje on do planisty zadań(schedulera) funkcjonalność automatycznego tworzenia grup szeregowania procesów.
Pewnie nie wyjaśniło wam to zbyt wiele, więc spróbuję opisać jak działa świat i jaki problem rozwiązuje ten patch.
Przypomnijmy sobie co jest zadaniem tego całego schedulera - oczywiście jest nim rozdzielanie czasu procesora pomiędzy działające w systemie procesy. W jaki sposób działa to w Linuksie?
CFS czyli nowy domyślny scheduler [wprowadzony w 2007 roku]( https://lwn.net/Articles/230501/) stara się odwzorować działanie czysto teoretycznego 'idealnie wielozadaniowego procesora' na rzeczywistym sprzęcie.
Ingo Molnar(autor CFS, pracownik Red Hata) wyjaśnia to w ten sposób:
Najmniejszą jednostką którą szereguje CFS jest wątek, więc mając w systemie N procesów mających łącznie K wątków o takim samym priorytecie scheduler będzie dążył do tego by każdy wątek dostawał średnio 1/K części mocy obliczeniowej procesora.
Mała uwaga, mimo że to wszystko brzmi dość prosto i wydaje się oczywiste to wcale takie nie jest.
Linux jest bodajże jedynym systemem operacyjnym z prawdziwego zdarzenia szeregującym zadania w ten sposób.
Windows oraz OS X oraz inne systemy szeregują zadania przy pomocy wariacji algorytmu wielopoziomowej kolejki ze sprzężeniem zwrotnym. Szeregowanie zadań przy pomocy tego typu algorytmów będzie dawało prawdopodobnie lepsze efekty w przypadku typowego użytkowania systemu na desktopie. Jak wiecie, desktop to nie jest główne zastosowanie Linuksa.
Skoro wiemy jak z grubsza działa CFS to możemy przejść do opisu problemu, który rozwiązuje ten patch.
Ogólnie rzecz biorąc to abstrakcja w postaci wątku nie do końca odpowiada potocznemu pojęciu 'zadania'.
Wyobraźmy sobie, że chcemy chcemy jednocześnie napisać maila oraz skompilować kernel.
Mamy dwa zadania, pierwsze stworzy zapewne jeden proces z maksymalnie kikoma wątkami, natomiast drugie może stworzyć dziesiątki procesów.
Równe rozdzielanie czasu procesora per wątek będzie miało przykrą konsekwencję, że nasze zadanie w postaci pisania maila będzie dostawało sumarycznie małą ilość czasu procesora ponieważ ma sumarycznie małą ilość wątków w stosunku do drugiego zadania. Mówiąc wprost nasz klient poczty będzie w c!@j zlagowany. Żeby nie być gołosłownym to poniżej filmik przedstawiający ten efekt:
https://www.youtube.com/watch?v=uk70SeGA7pg
W naszym przypadku chielibyśmy by nasze dwa zadania w ujęciu całościowy dostawały taką samą ilość czasu procesora.
Oczywiście można uskuteczniać dzikie tańce w postaci ustawiania odpowiednich priorytetów, tylko jest to upierdliwe, ma ograniczoną funkcjonalność i zapewne nie będzie to do końca dobrze działać.
W oczywisty sposób brakuje abstrakcji umożliwiającej łączenie różnych procesów w logiczne grupy i rozdzielania mocy procesora per grupa.
Problem ten został zauważony również w data center poważnych graczy takich jak IBM czy Google.
Funkcjonalność schedulera została roszerzona przez pracownika IBM o możliwość szeregowania juz nie pojedynczych wątków i procesów ale właśnie ich grup. Koncepcja ta została rozwinięta przez pracowników Google poprzez dodanie bardziej ogólnego mechanizmu grupowania procesów i podziału również innych zasobów pomiedzy grupami. Funkcjonalność ta jest obecnie znana jako cgroups i jest jednym z filarów niezwykle dzisaj popularnej technologi jaką sa kontenery(Docker, itp).
Wracając do naszego patcha, sprawia on że ta cała technologia z data center jest łatwo dostępna dla zwyklego zjadacza chleba na desktopie.
Dzięki niemu kernel automatycznie stara się pogrupować powiązane ze sobą procesy bez żadnej dodatkowej konfiguracji przez użytkownika.
W jaki sposób się odbywa to automatycznie grupowanie?
Jak domyślacie się kernel nie ma kryształowej kuli, która z całą pewnością powie mu, które procesy są ze sobą powiązane.
Potrzeba tutaj pewnej heurystyki, pierwsza wersja patcha grupowała razem procesy przypięte do danego terminala.
Z tym podejściem jest jeden problem, co jeśli dany proces nie ma żadnego terminala?
Taka sytuacja ma miejsce w przypadku demonów działający w tle i nie będą one poprawnie automatycznie grupowane.
Tak się składa, że wokół terminali istnieje jeszcze ogólniejsze pojęcie sesji, które również pokrywa przypadek demonów.
Patrząc na to bardziej niskopoziomowo, w ostatecznej wersji patcha nowa automatyczna grupa szeregowania jest tworzona w momencie utowrzenia nowej sesji przu pomocy syscalla setsid. Każdy proces potomny w tej samej sesji jest przypisywany do tej samej automatycznej grupy szeregowania.
Nie jest to idealna może idealna heurystyka ale działa całkiem sensownie i co najważniejsze automatycznie.
Dlaczego Linusa akurat tak ucieszył ten patch?
Ponieważ pisanie maili i kompilowanie kernela jest jego głównym zastosowaniem komputera, a ten elegancki i mały(~200 linijkowy) kawałek kodu mocno usprawnił komfort jego codziennej pracy.
Filmik przedstawiający działanie patcha, porównajcie z poprzednim jak zmieniła się responsywność systemu:
https://www.youtube.com/watch?v=prxInRdaNfc
#linux #programista15k #komputery #cytatywielkichludzi #cytaty #heheszki #programowanie #gruparatowaniapoziomu
int ret;
w osobnej linijce? Jest to jakaś konwencja w kernelu?
https://www.kernel.org/doc/html/latest/process/coding-style.html
natomiast jest jeszcze skrypt checkpatch.pl którym sie sprawdza patch przed wysłaniem i wygeneruje on taki warning gdy nie bedzie pustej linii
Komentarz usunięty przez autora
No to tak, ogólnie o systemach operacyjnych masz książkę 'Podstwy systemów operacyjnych' Silberschatza.
Problem z nią jest taki ze w języku polskim jest ona dostępna w wydaniu piątym, więc jest niektualna trochę.
Jak masz możliwość pożyczenia to możesz to zrobić, a jeśli znasz angielski to możesz sobie kupić najnowsze wydanie z tamtego roku. Ja czytałem lata temu wydanie polskie, więc o tym najnowszym angielskim zbyt dużo nie mogę powiedzieć, ale