Dlaczego warto wybrać jądro o niskim opóźnieniu w stosunku do ogólnego lub działającego w czasie rzeczywistym?

105

Po zainstalowaniu Ubuntu Studio 12.04 odkryłem, że używa on jądra o niskim opóźnieniu. Szukałem, dlaczego i jak zmienić z powrotem na zwykły lub ogólny. Ale wygląda na to, że ta część Linuksa nie była tak bardzo omawiana.

P: Dlaczego warto wybrać jądro o niskim opóźnieniu w stosunku do standardowego lub działającego w czasie rzeczywistym?

PS: Przeczytałem już odpowiedzi na to pytanie i ten post.

Starx
źródło
3
+1, ponieważ to musi być całkiem dobre pytanie, czy wszyscy są zakłopotani. JESZCZE nie znam różnicy między jądrem o niskim opóźnieniu, ogólnym i rzeczywistym. Jeśli -realtimejest czas rzeczywisty, to co oznacza -rt? A co jest z -preemptjądrem? Będę wdzięczny gemue2010, wykonał całkiem dobrą robotę, tłumacząc to, ale wciąż nie wszystko wyjaśnia.
Hitechcomputergeek

Odpowiedzi:

61

Oto kilka prostych wskazówek, które pomogą ci zrozumieć, które jądro oraz w jakiej kolejności powinieneś przetestować, aby dopasować je do twojego przypadku użycia.

  • Jeśli nie potrzebujesz niskiego opóźnienia dla swojego systemu, użyj jądra -generic.
  • Jeśli potrzebujesz systemu o niskim opóźnieniu (np. Do nagrywania dźwięku), użyj jądra -preempt jako pierwszego wyboru. Zmniejsza to opóźnienia, ale nie poświęca funkcji oszczędzania energii. Jest dostępny tylko dla systemów 64-bitowych (zwanych także amd64).
  • Jeśli jądro -preempt nie zapewnia wystarczająco niskiego opóźnienia dla twoich potrzeb (lub masz 32-bitowy system), powinieneś wypróbować jądro -lowlatency.
  • Jeśli jądro -lowlatency nie wystarczy, powinieneś spróbować jądra -rt
  • Jeśli jądro -rt nie jest dla ciebie wystarczająco stabilne, powinieneś spróbować jądra -realtime

Źródło pomocy Ubuntu

To zależy od tego, co zrobisz ze swoją dystrybucją studyjną. Dla większości użytkowników potrzebujących szybkiego czasu reakcji użytkownika końcowego ogólne wystarczy, a dla innych, którzy potrzebują profesjonalnej edycji wideo, gdzie nawet proste upuszczenie klatki jest niedopuszczalne, potrzebne jest jądro w czasie rzeczywistym.

Aby uzyskać bardziej wyczerpujący i łatwy do zrozumienia post na blogu, przeczytaj ten link

wentylator ubuntu
źródło
1
Przeczytałem już poprzedni artykuł, który opublikowałeś. Po drugie, na ile wiarygodne są te fakty?
Starx
Cóż, wspomniane tam testy mówią same za siebie. Jeśli zespół Ubuntu wybrał Opóźnienie w pierwszej kolejności, musi to być jego powód. Więc chciałeś poznać różnice, teraz to wiesz. Problem rozwiązany ?
fan ubuntu
5
Nie .. Nie sądzę, że problem został rozwiązany. Jeśli twoja odpowiedź coś robi, to zwiększa moją ciekawość.
Starx
9
Czy coś takiego jest nadal aktualne w 2015 roku? Te -preempt, -rt, i -realtimejądra no-przestały istnieć
naught101
51

Jestem autorem posta na blogu połączonego z fanem ubuntu: http://sevencapitalsins.wordpress.com/2007/08/10/low-latency-kernel-wtf/

Ten post na blogu nie przedstawia żadnego faktu, to tylko teoria . W rzeczywistości działa tak: procesor „zatrzymuje się” częściej, aby sprawdzić, czy są jakieś procesy wymagające natychmiastowej uwagi. Oznacza to, że procesy te będą wykonywane przed innymi, więc nie będziesz pomijać ramek podczas kodowania, ani nie będziesz miał dużych opóźnień między kliknięciami myszy a śmiercią wroga. Nie oznacza to, że wszystkie procesy zakończą się wcześniej: w rzeczywistości procesor traci większą część swojego czasu decydując, który proces zostanie wykonany w następnej kolejności i dokonując zmiany kontekstu. Tak więc całkowity czas wykonania jest dłuższy i dlatego nikt nie uruchamia jądra możliwego do uniknięcia na serwerze WWW lub maszynie baz danych. Ale jądro o częstotliwości 300 Hz (a nawet 1000 Hz) jest najlepsze dla serwerów gier.

Ale obecnie procesory mają wiele rdzeni, więc gdy jest niewiele procesów wymagających uwagi, można je łatwo przypisać do innego rdzenia, zamiast czekać na rdzeń, aby go przejąć.

(Stackexchange wymaga ode mnie referencji / osobistych doświadczeń: jestem elektronicznym inżynierem, żądnym krwi noobgamer obsługującym kilka serwerów gier na http://www.gamezoo.it ).

Tak więc, ogólnie rzecz biorąc, powiedziałbym: jeśli twój procesor jest potężnym czterordzeniowym trzaskiem o wysokiej częstotliwości ORAZ zwykle nie otwierasz ton stron podczas kodowania / dekodowania / grania (huh), możesz po prostu wypróbuj ogólne (lub i686 lub amd64, jeśli istnieją) jądro i uzyskaj najwyższą możliwą przepustowość (tzn. procesor może przetwarzać surowe liczby). Jeśli napotkasz problemy (powinny być naprawdę niewielkie) lub twoja maszyna jest nieco mniej wydajna niż czołówka na rynku, skorzystaj z opcji -preempt.

Jeśli korzystasz z niskiej klasy komputera, który ma tylko jeden lub dwa rdzenie, wypróbuj opcję -lowlatency. Możesz także wypróbować opcję -realtime, ale przekonasz się, że ma ona tendencję do blokowania procesów, dopóki „w czasie rzeczywistym” nie zakończą swojej pracy. Wierzę, że jądro czasu rzeczywistego nie jest „waniliowe”, ale ma zastosowaną łatkę CONFIG_PREEMPT_RT. Myślę, że jądra czasu rzeczywistego są przeznaczone tylko dla tych, którzy muszą zbudować pojedynczą aplikację na systemach wbudowanych, więc zwykli użytkownicy komputerów stacjonarnych nie powinni mieć rzeczywistych korzyści, ponieważ zwykle uruchamiają sporej liczby aplikacji w tym samym czasie.

Wreszcie, najbardziej odpowiednie opcje jądra, jeśli chcesz samodzielnie skompilować jądro, aby mieć pulpit o niskim opóźnieniu:

PREEMPT=y

i:

CONFIG_1000_HZ=y

Aby dodać oszczędność energii, możesz to sprawdzić:

CONFIG_NO_HZ=y
siedem
źródło
Zauważyłem, że wspominałeś o utrzymywaniu serwerów, staram się znaleźć najlepsze jądro dla serwera dedykowanego dla źródła zaworu (konkretnie CSGO). większość znalezionych przeze mnie wątków związanych jest z goldsrc, który wymagał jądra 1000Hz. Czy w przypadku srcds lowlatency jest zły? jeśli to nie ma znaczenia, po prostu trzymam się lowlatency, ponieważ właśnie to mam (izoluję rdzenie procesora dla 128 serwerów srcds tik, ponieważ tak naprawdę to nie korzysta z wielowątkowości).
Vincent De Smet
Przydatne, aby poznać te wskazówki, całkowicie zmienię się na uprzedzenie. Nie spieszy mi się tak bardzo, że chcę, aby moje jądro zachowywało się jak brudny pirat.
userDepth 07.04.16
4

Z dokumentu cytowanego powyżej ( http://www.versalogic.com/mediacenter/whitepapers/wp_linux_rt.asp )

  1. miękki system czasu rzeczywistego zapewnia zmniejszone średnie opóźnienie, ale nie gwarantuje maksymalnego czasu reakcji.
  2. Twardy system czasu rzeczywistego zawsze dotrzymuje pożądanych terminów (100 procent), nawet w najgorszym przypadku obciążenia systemu.
  3. Według Yaghmour [4], „Real-time zajmuje się gwarancjami, a nie surową prędkością”.

Artykuł mówi, że twarde jądro czasu rzeczywistego bez odpowiedzi lub czas jest najważniejszą właściwością, więc czasami opóźniają niekrytyczną aktywność, która prowadzi do opóźnienia, ale dla lowlatency lub innego miękkiego jądra w czasie rzeczywistym starają się zmniejszyć ogólne opóźnienie, które pomaga w większości przypadków. Z powodu zmniejszonego opóźnienia system wydaje się być szybki. Przeczytaj uważnie artykuł.

Mayank Suman
źródło
To prawda, ale musimy wiedzieć, który wariant jądra pasuje do której „twardości” systemu w czasie rzeczywistym.
Melebius
0

Mam ten stary laptop z podwójnym procesorem AMD A6-4400M o częstotliwości 1600 MHz, którego używam oszczędnie, kiedy jestem poza biurem, głównie do czytania wiadomości e-mail i przeglądania zwykłych stron internetowych. Było coś, prawdopodobnie związanego z aktualizacjami oprogramowania, co powoduje, że nie odpowiada. Coś jak wpisanie kilkunastu znaków bez zobaczenia pierwszego. Często widżet pyta, czy powinienem wymusić zakończenie procesu.

Po sudo apt-get install linux-lowlatencyponownym uruchomieniu komputer stał się płynny i responsywny. (uname -r 5.0.0-20-lowlatency.) Cudownie, powinienem był zmienić lata temu. Pozwólcie, że podkreślę odpowiedź Seven: jeśli nie chcesz wycisnąć maksimum z serwera do łamania liczb, skorzystaj z opcji -preempt !

Ale
źródło