RealtimeKit

Data: 3 lipca, 2009

Lennart Poettering, deweloper który popełnił PulseAudio, wpadł na pomysł rozwiązania problemu przerw w dostawie dźwięku do karty w Linuksie.

Problem ten jest szeroko znany użytkownikom Linuksa – pojawia się, gdy w systemie pracuje kilka programów i jednocześnie odtwarzana jest muzyka. Wtedy jeśli odtwarzacz nie ma określonego odpowiednio niskiego poziomu nice, mogą się pojawić przerwy w dostawie materiału grającego do karty dźwiękowej.

Popularnym rozwiązaniem tego problemu jest ustawienie odpowiednio niskiego poziomu nice dla procesu odtwarzacza. Jednak, żeby ustawić bardzo niski poziom nice, trzeba użyć konta administratora i wydać dwa polecenia – mało wygodne, jeśli często wyłącza się odtwarzacz lub używa różnych programów (kiedyś dało się zautomatyzować). Lennart zaproponował trochę inne rozwiązanie – zmianę polityki szeregowania dla wybranych procesów na SCHED_RR używaną dla programów ograniczonych czasowo (RT).

To rozwiązanie ma oczywiście jedną dużą wadę – jeśli taki program przestanie poprawnie działać, to bardzo trudno będzie go zabić. Uważni czytelnicy pewnie zauważą – zaraz, ale przecież to już było! Faktycznie, ale tym razem problem rozwiązuje Lennart Poettering, deweloper PulseAudio, a jego nowe dzieło nazywa się RealtimeKit 🙂

Podobne wpisy

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone


    1. whogivesaflyingsh pisze:

      ALSA czy OSS tu nic do tego nie mają – chodzi tylko o przestrzeń użyszkodnika.

      1. gothmori pisze:

        zatem chodzi o JACK tak? ;>

      2. gothmori pisze:

        ale w sumie… fajnie, że pulse audio się rozwija tak czy inaczej i że autor niesie dobrą nowinę 🙂

      3. Sławek pisze:

        Najbardziej mnie denerwują ludzie twierdzący, że PulseAudio, to sterownik dźwięku(odpowiednik ALSA).

        PulseAudio jest właśnie czymś w stylu esd, artsd, jack. Jest to serwer dźwięku. Nie wiem dlaczego zdobył on taką popularność. Więcej dla dźwięku pod Linuksem zrobili twórcy KDE niż autorzy PulseAudio.

        1. Paweł Ciupak pisze:

          Fakt. Twórcy KDE wywalili swój zabugowany, nikomu niepotrzebny serwer dźwięku (aRts), a twórcy PulseAudio… właśnie takie coś stworzyli – także zabugowane i nikomu niepotrzebne.

        2. Swift Geek pisze:

          Mi się przydaje… A jak kto chce FullAutomat to jest EarCandy – moich wymagań jeszcze nie spełnia ale kto wie może za parę lat ;]

  1. Sławek pisze:

    Jeżeli, to co autor napisał jest prawdą, to bardzo dobry news! Widać, że ban się przydał 😉 ! O realtimekit słyszałem już wcześniej. Ma być połączony z PolicyKit. Trzeba jednak zdefiniować dwa poziomy nice: standardowy użytkownika, jak również wyższy od niego(jeżeli PolicyKit by na to pozwalał). Przypisanie poziomu wyższego od domyślnego wymagałoby podania tylko hasła użytkownika. Podania poziomu nice ujemnego wymagałoby już podania hasła root-a. To są tylko moje fantazje, ale mogą okazać się prawdą. Sesja przy starcie automatycznie podwyższałaby sobie nice.

    1. Sławek pisze:

      Chodziło o standardowy nice, jak również ujemy(napisałem: wyższy). Program działający o podwyższonym nice miałby dwie drogi do jego zmniejszenia – poprosić użytkownika, poprosić administratora.

  2. Sławek pisze:

    "popełnił PulseAudio"
    Bardzo dobre sformułowanie, proszę jednak umieszczać własne zdanie w komentarzu.

  3. Sławek pisze:

    Sprawa faktycznie działa. Moduły do pracy w trybie RT chyba nazywane są modułami Curtz-a.
    PS: Nie wystarczy wykonać renice na wyższych uprawnieniach?
    PS2: Przecież, jak program działa w RT w określonym przedziale czasu, to jego popsucie nie powinno wpłynąć na pracę systemu. Przecież po wyczerpaniu się limitu czasu sterowanie znowu przejmuje jądro, które przydziela czas kolejnemu procesowi.

  4. norbert_ramzes pisze:

    Problem ten jest szeroko znany użytkownikom Linuksa – pojawia się, gdy w systemie pracuje kilka programów i jednocześnie odtwarzana jest muzyka.

    Hmm? Ileś lat używam Debiana, prawie zawsze mam odpalone kilka, kilkanaście (czasami nawet kilkadziesiąt) programów użytkowych korzystające z GTK, QT czy innych bibliotek i nie przypominam sobie żebym musiał często używać renice. Bywało u mnie tak że jakiś soft obciążał tak cpu że nawet kursor stawał a muzyka spokojnie sobie grała. Miewałem tak dopiero jak kilka programów (np. domowej roboty) zapętlało się bez celu i bez wywołania usleep().

    W normalnej sytuacji, soft który nic nie robi (np. krusader który używam codziennie) zajmuje 0.0% czasu CPU. Co innego gdybym to samo oprogramowanie używał na np. 486…

    1. Sławek pisze:

      Z tym zapętlaniem, to już przeszłość. Obecnie wszystkie procesy dostają procesora po równo, a nie wg. zapotrzebowania. Przynajmniej system Ci nie obciąży się zbyt mocno.

      1. stilgar pisze:

        serio? po równo? to dość… nieoptymalnie.

        1. Sławek pisze:

          Jest to dosyć nieoptymalne, ale kod nowego sheludera jest szybszy, a poza tym czemu jakieś zadanie miałoby móc wziąć zbyt wiele czasu procesora. Oczywiście w przypadku, gdy jakiś proces czeka, to nie jest brany pod uwagę.

        2. whogivesaflyingsh pisze:

          "Jest to dosyć nieoptymalne, ale kod nowego sheludera jest szybszy, a poza tym czemu jakieś zadanie miałoby móc wziąć zbyt wiele czasu procesora. Oczywiście w przypadku, gdy jakiś proces czeka, to nie jest brany pod uwagę."

          Nie wiem o czym mówisz, ale chyba nie o CFS 🙂

    2. whogivesaflyingsh pisze:

      "Ileś lat używam Debiana"

      O, to pewnie dla tego. U mnie nie działało (i u kilku procent użytkowników niezadowolonych z poziomu podsystemów audio w Linuksie) bo używałem innej dystrybucji. W Debianie to cały kernel jest przepisany tak, żeby działał 🙂

      P.S. Debiana kiedyś przez jakiś czas używałem – dawno temu i nie prawda ;). Nie mam zamiaru już nigdy nigdzie go używać, gdy się dowiedziałem, że jego deweloperzy robią poprawki do kodu, którego nie rozumieją…

      1. norbert_ramzes pisze:

        jego deweloperzy robią poprawki do kodu, którego nie rozumieją…

        Jak pracuje się nad dużym projektem który pisał ktoś inny to coś takiego jest normalne. Sam tak robię.

        Chcesz zrobić poprawkę albo ulepszyć kod czegoś co źródła zajmują 10MiB albo więcej to albo czytasz całość/prawie całość, albo czytasz mały fragment żeby jako tako zrozumieć i ten fragment poprawić.

        Np. spróbuj dodać mgłę do Nexuiza 2.4.2 (po stronie serwera) bez możliwości zmiany przez konkretnego usera, ale z możliwością głosowania. Mnie to zajęło jakieś dwa tygodnie bez zbytniego wgłębiania się w szczegóły (np. jak działają funkcje z których korzystam [ile osób wie jak dokładnie działa printf?]). Gdybym miał zagłębiać wszystkie tajniki to zeszłoby mi ze 5 lat a nie 2 tygodnie.

        1. whogivesaflyingsh pisze:

          Nie o to mi chodzi. Nie do tego piję 🙂

          Chodziło mi o tą słynną poprawkę do OpenSSL. Gość nie rozumiejąc kodu zrobił "poprawkę" (wyrzucił jedną linijkę kodu czy coś w tym stylu) na jakiś ezoteryczny problem wykryty za pomocą valgrinda.

          Zdaję sobie sprawę z tego, że w żadnej dystrybucji Linuksa nie ma wystarczającej kontroli nad tym jakie poprawki deweloperzy wrzucają do pakietów – każdy niekompetentny koleś może wrzucać wszystko co mu się podoba, bo jest opiekunem pakietu, deweloperem Debiana, panem i władcą na krańcu świata. Jednak w mojej skromnej opinii poziom niekompetencji i zadufania u deweloperów Debiana jest na tyle wysoki, że nie warto poświęcać czasu na walkę z nimi i tym systemem.

          (Debian nie jest pierwszym systemem na mojej liście – nie warto na to tracić czasu – pierwszy jest oczywiście Gentoo – –enable-jestem-szybki-jak-Kubica-intel7)

        2. norbert_ramzes pisze:

          nie ma wystarczającej kontroli

          A w innych dystrybucjach albo w MS jest inaczej?

        3. ak47 pisze:

          Te mistrzu .
          w GENTOO kompiluje UŻYTKOWNIK nie developer. Zrozumiałeś? UŻYTKOWNIK

        4. @whogivesaflyingsh: mówisz o fragmencie kodu, który pobierał losowe dane z niezainicjalizowanej zmiennej? Z punktu widzenia teorii programowania developer Debiana postąpił słusznie, inna sprawa, że akurat twórca OpenSSL chciał w ten sposób liczby losować ;].

          @norbert_ramzes: dlaczego odnosisz problem braku kontroli nad aplikacjami wchodzącymi w skład dystrybucji do MS? MS zdaje się robi system operacyjny, a nie kompletną dystrybucję z masą programów (przynajmniej często słychać argument pt. "z Windowsem nic nie dostaję")?

        5. norbert_ramzes pisze:

          dlaczego odnosisz problem braku kontroli nad aplikacjami wchodzącymi w skład dystrybucji do MS?

          Chodziło mi o to że brak kontroli może występować wszędzie indziej.

        6. pdemb pisze:

          @whogivesaflyingsh: mówisz o fragmencie kodu, który pobierał losowe dane z niezainicjalizowanej zmiennej? Z punktu widzenia teorii programowania developer Debiana postąpił słusznie, inna sprawa, że akurat twórca OpenSSL chciał w ten sposób liczby losować ;].

          To jest poleganie na niezdefiniowanym przez specyfikację języka programowania zachowaniu kompilatora. Z tego co piszesz wynika, że ten developer OpenSSL to ryzykant. W sumie dziwne jak na programistę od szyfrów.

        7. @pdemb: Niezdefiniowane zachowanie kompilatora? A co tutaj jest niezdefiniowanego? Po kolei: kompilator przydziela fragment pamięci na daną zmienną i nie wpisuje pod jej adres żadnych danych. Od strony kompilatora wszystko jest jasne. Moim zdaniem niezdefiniowana jest tylko i wyłącznie zawartość zmiennej ;). Ryzyko polega głównie na tym, że dana pamięć będzie np. wyzerowana (bo akurat program dostał wyzerowany obszar) i nie będzie robiła za dobre źródło losowe.

      2. AdamK pisze:

        To nie bya wina developera Debiana (w sensie zmiany kodu). To co wykorzystywalo OpenSSL, to trick, ktory w 99.999% wypdkow jest powaznym bledem popelnionym przez programiste, wiec wykozystanie takiego tricku powinno byc dokladnie obkomentowane przez autora. Nie bylo – i to byl blad developerow OpenSSL.

        Blad developera Debiana polegal na tym ze nie zglosil 'poprawki' do autorow OpenSSL – wowczas mogloby to wygladac zupelnie inaczej

        1. moloh pisze:

          Oczywiście że poprawka była zgłoszona na liście OpenSSL, tylko nie tej co deweloperzy czytają…

        2. krzychoocpp pisze:

          To też nie do końca tak. Developer nie wiedział do końca o co chodzi, spytał się na odpowiedniej liście (nie do końca szczegółowo) i dostał odpowiedź że proponowane zmiany nie spowodują problemów. http://research.swtch.com/2008/05/lessons-from-de…

  5. hering pisze:

    Mam same problemy z tym pulseaudio. Ustawienie nagrywania dźwięku dla skype to koszmar bo oczywiście po instalacji nie jest prawidłowo ustawione (Ubuntu/Mint). Jak miałem dystrybucję z samą Alsą to wszystko było super.

    1. Sławek pisze:

      Obecnie też z PA nie ma problemów większych. Ostatnio na niego psioczyłem, bo miałem ustawiony master na full, a PCM na wyciszenie. Zrobiłem to celowo, bo chciałem zobaczyć, jaki będzie tego efekt w grach pod WINE. Potem jednak wyleciało mi to z głowy. By naprawić problem zdowngratowałem nawet PA do starszej wersji.

      Wszystko jednak działa. PA może być tak skonfigurowane, że aplikacje ALSY korzystają z niego. Może Ubuntu ma z tym jakieś problemy? Znasz jeszcze jakieś inne aplikacje z tym problemem? Nie ma konta na Skype, a poza tym nie chce mi się tego instalować.
      Moje PA, to 0.9.14 .

    2. Sławek pisze:

      W każdym razie PA miało spore problemy, i pewnie nadal ma. Można jednak z niego korzystać przy obecnej wersji.

    3. Maciej Piechotka pisze:

      Z tego co wiem to Skype ma swoje założenia dotyczące API Alsy a PA implementuje to domyślnie z jakiś powodów inaczej. Przynajmniej PA tak twierdzi…

  6. jarek pisze:

    Podrecznikowy przyklad rozwiazania w stylu: nic na sile, wszystko mlotkiem.

  7. pjure efil pisze:

    można użyc po prostu demona verynice który automatycznie ustawi odpowiedni poziom nice dla odpowiednich aplikacji.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Newsletter OSnews raz w tygodniu. Bez reklam.