Nepomuk

Z funus.net

Nepomuk to indekser i wyszukiwarka plików z paroma dodatkowymi funkcjami, zintegrowana z KDE 4.4. W bełkotliwej nowomowie autorów projektu, program ów to podstawa social semantic desktop i wykonuje rozliczne, ważne i ezoteryczne funkcje (dzięki którym zapewne udało się wyrwać ładną kasę w ramach dofinansowania nowatorskich projektów przez Komisję Europejską[1]).

Ja co prawda tych wszystkich odkrywczych funkcjonalności nie dostrzegłem, za to upgradzie debiana z wersji 5 do 6 i związanej z tym aktualizacji KDE z wersji 3.5 do 4.4.5 szybko zauważyłem, że dyski rzężą, wentylator na procku kręci się jak oszalały, wolna pamięć kurczy się w zastraszającym tempie a swap puchnie.

Po krótkiej inwestygacji odkryłem winowajcę: kilka procesów o dziwacznych nazwach w rodzaju nepomuk-cośtam czy virtuoso bezlitośnie pożerało zasoby mojego nienajmłodszego już przecież peceta. Poszukałem o tym całym nepomuku w guglu. Okazuje się, że rzesze userów pragną gorąco pozbyć się tego potwora, no ale autorzy wiele sobie z tego nie robią (nic dziwnego, w końcu wyrwali na to paraście baniek...). Trzeba więc sobie jakoś z tym poradzić.

Początkowo postanowiłem dać temu ustrojstwu szansę: może, wbrew pozorom, będzie z tego jakiś pożytek? Chciałem jednak ograniczyć trochę zużycie zasobów oraz sprawić niejaką ulgę moim już paroletnim dyskom. Odszukałem w ustawieniach odpowiednią pozycję i zmieniłem z domyślnej indeksacji całego katalogu domowego na nieco przemyślniej dobrany zestaw katalogów. Można też ustawić rozmiar bazy danych nepomuka, było fabrycznie 50 MB, ale szybko się okazało, że to ustawienie jest ignorowane.

Powyższe jednak to było za mało. Procesy nepomuka nadal puchły, szybko dochodząc pod 1 GB pamięci wirtualnej. Po paru próbach doszedłem do dość sensownego, jak mi się wydaje, rozwiązania, polegającego na podstawieniu jednej z binarek skryptem, w którym narzuciłem kilka ograniczeń. Ta binarka to był program nepomukservicestub. Co prawda bardziej obiecująco wyglądał program nepomukserver, będący parentem chyba wszystkich pozostałych. Jednak jego podmiana okazała się kłopotliwa, gdyż czasami odtwarzał się jako element KDE-owskiej sesji i wówczsa mój skrypt-zamiennik nie był uruchamiany. Ale sam "serwer" wiele zamieszania nie robił, więc skupiłem się na "serwisie".

Żeby zrobić to "jak trzeba" użyłem polecenia dpkg-divert do przemianowania oryginalnego programu:

dpkg-divert --divert  /usr/bin/nepomukservicestub.real  --rename /usr/bin/nepomukservicestub

a pod oryginalną nazwą umieściłem następujący skrypt:

#! /bin/bash

echo "$0 $@" >&2
set -x
renice 19 $$
chrt -i -p 0 $$
ionice -c3 -p$$
ulimit -v $((256 * 1024))
sleep 1
exec /usr/bin/nepomukservicestub.real "$@"

(Przy okazji odkryłem polecenie chrt, będące interfejsem do funkcji systemowych sched_setscheduler i sched_getscheduler; kilka lat temu sam musiałem na swoje potrzeby napisać tego rodzaju programik.)

Co robi ten skrypcik? Po kolei:

  • renice 19 $$ – ustawia najniższy uniksowy priorytem bieżącego procesu
  • chrt -i -p 0 $$ – ustawia politykę schedulera dla bieżacego procesu na idle, tzn. teoretycznie proces dostanie przydział czasu procesora tylko wtedy, gdy nie będzie niczego ciekawszego do roboty
  • ionice -c3 -p$$ – ustawia scheduling I/O na idle, co teoretycznie oznacza, że operacje wejścia/wyjścia procesu będą wykonywane tylko wówczas, kiedy nie będzie nic lepszego do roboty
  • ulimit -v $((256 * 1024)) – ogranicza pamięć wirtualną (RAM + swap) przydzieloną procesowi do 256 MB

A następnie uruchamia oryginalną binarkę /usr/bin/nepomukservicestub.real.

Mimo to po jakimś czasie stwierdziłem, że wszystkie rzekome pożytki płynące z "semantycznych desktopów" nie rekompensują nadpobudliwego nepomuka i całej ferajny (strigi, virtuoso) i po prostu wyłączyłem w ustawieniach KDE całe to badziewie. Niestety, wyłączenie to obowiązuje dla konkretnego użytkownika. W moim przypadku nie jest to wielki problem, ale na wszelki wypadek pozostawiłem powyższy skrypt ograniczający zżeranie zasobów. W efekcie chodzi mi tylko nepomukserver, zżera "tylko" 64 MB pamięci, na razie go zostawię, ale być może w przyszłości spróbuję bardziej stanowczo unieszkodliwić to semantyczne nieporozumienie.

przypisy