Linux E X P R E S

Facebook

Zrychlujeme KDE

Jedna z nejčastějších výtek odpůrců KDE je obrovská náročnost a pomalost celého prostředí. Jistě, doba startu je argument stejně jako procento zabrané paměti ihned po startu. Po vznesení námitek o komplexnosti celého prostředí, o sdílení kódu v rámci kdelibs a tak podobně, přetrvává ve spoustě myslích přece jenom kacířská myšlenka. Nemají oni nakonec pravdu? Nedá se KDE nějakým způsobem zrychlit?


Předehra

Než začnete s prováděním bezhlavé optimalizace, uvědomte si, že vývojáři během existence verze 3.x na optimalizace dbají a oni samotní mají nejvíce možností a schopností, jak celé prostředí učinit maximálně efektivním. Základní poučkou, která je analogií známého Knuthova (nebo Hoarova) výroku o optimalizaci, je "Nikdy se nesnažte optimalizovat příliš". Často to povede k velmi "zajímavým" důsledkům nebo dokonce k selhání systému. Jinými slovy, autor článku se alibisticky zříká veškeré zodpovědnosti za případnou nefunkčnost vašeho systému.

Obecné rady

Při řešení nějakého problému se obvykle velmi vyplácí začít především těmi nejjednoduššími případy a postupně pokračovat k složitějším. To znamená, pokud mi nejede tiskárna, tak první kontroluji napájecí kabel nebo připojení k počítači. Bohužel bývají takové rady dostatečně triviální na to, aby je spousta lidí ignorovala nebo o nich dokonce psala články do počítačových časopisů (alespoň do těch, které se profilují na odborníky).

To znamená, že první a nejjednodušší radou, pokud se vám KDE zdá příliš pomalé, je - pořídit si rychlejší hardware. Což se vás netýká, pokud vám procesor tepe na více než 1 GHz a/nebo máte více než 256 MB operační paměti, tam už zrychlení hardwaru takový přínos nemá, a tak vám nezbude nic jiného, než se snažit zrychlit souborový systém, vybrat lepší plánovač pro přístup k diskům a podobně.

Další základním nástrojem je průzkum běžících procesů (příkazy top, htop nebo KSystemGuard) a ukončení těch, které zatěžují systém. Cílem je snížit množství aplikací, které jsou uloženy v relaci a po spuštění KDE se znovu automaticky nastartují. S tím také souvisí prozkoumání složek, jejichž obsah je spuštěn při startu KDE.

  • $KDE/share/autostart - obsahuje zástupce (soubory .desktop nebo shell skripty) na automaticky spouštěné aplikace;
  • $KDEHOME/Autostart - to stejné, ale uživatelské nastavení;
  • $KDEHOME/env - obdoba adresáře Autostart;
  • $KDEHOME/shutdown - skripty spuštěné po ukončení KDE.

Mezi některé potenciálně neužitečné aplikace, které je možné bez obav vypnout, patří KHotKeys démon (od verze 3.4 součástí démonu KDED), KXKB applet nebo KOrganizer. Ovšem mezi asi nejvíce vypínanou službou patří artsd. Démon, který zahlcuje procesor a způsobuje občas bolesti hlavy, je všeobecně neoblíbenou aplikací. Pro uživatele Gentoo vše řeší USE flag -arts, který zajistí, že se tento démon ani nepřeloží. Ostatní uživatelé musí v Zvuk a Multimédia/Zvukový systém odznačit položku Používat zvukový systém. Pokud chtějí slyšet nějaké zvuky prostředí KDE, musí ve Zvuk a Multimédia/Systémová hlášení nastavit externí přehrávač (například klasický program play, případně aplay).

Obrázek: Zakažte zvukový server

Další možností je instalace minimálního prostředí KDE. Například osekané KDE z distribuce Slax startuje (z disku) velice rychle. Stejně jako minimální instalace rozděleného (splitted) KDE v distribuci Gentoo.

Konkrétní rady

KDE jako komplexní prostředí startuje poměrně dlouho, protože se do paměti zavádějí různé systémy a knihovny, které prostředí potřebuje. Na webu KDE potom naleznete stránku s návody, jak start prostředí zrychlit. Testováno v Kubuntu a Ubuntu.

Vypnout zvuky

Vypnutí zvuku, který se spouští při startu, může trochu zrychlit start KDE. Od verze 3.4 se dokonce zákazem zvuků zabrání spuštění Knotify notification daemon, čímž se ušetří jeden proces při startu. Mně vyšlo zrychlení v řádu desetin sekundy, což je spíše chyba měření.

Žádný splashscreen

Zkuste odstranit uvítací obrazovku během spouštění KDE. Do verze 3.4 byla jediná možnost ruční editace souboru $KDEHOME/bin/startkde a odstranění řádky ksplash -nodcop. V novějších verzích byly do Ovládacího centra přidány možnosti Jednoduchá, která spustí pouze jednoduchou optimalizovanou obrazovku a Nic, která splashscreen (uvítací obrazovku) úplně vypne. Vzhledem k tomu, že uvítací obrazovka v mnoha případech vůbec neodpovídá skutečnosti a může i zdržovat vlastní start, doporučuji vypnout.

Zkoušel jsem postupně čtyři uvítací obrazovky, Kubuntu, Jednoduchou, Nic a Finger Print. Jak ukazuje tabulka, splashscreen má poměrně velký vliv na dobu startu. Rozdíl mezi nejnáročnějším Finger Print a žádnou uvítací obrazovkou je téměř čtyři sekundy.

Kubuntu 12,8s
Jednoduchý 11,7s
Nic 10,1s
Finger Print 13,8

Znovupoužívání Konqueroru

Konqueror může být nastaven tak, aby běžel pouze v jednom procesu, místo spouštění nových. Nastavení je v Komponenty KDE/Výkon KDE položka Minimalizovat spotřebu paměti. Nastavení na Nikdy povede k vytváření nových procesů při otevírání nového okna, což je sice nejpomalejší, ale zato pád v jednom okně nepovede k pádu oken ostatních.

Další položka Pouze pro procházení souborů potom zapíná znovupoužívání při procházení souborů a poslední možnost vždy způsobí, že bude v každém okamžiku běžet pouze jeden proces Konqueroru.

Obrázek: Definice externího přehrávače

Preload Konqueroru

Na stejném panelu se vyskytuje i položka, která zajistí nahrání Konqueroru při startu do paměti, čímž dojde i k jeho zrychlenému spuštění. Je rovněž možné určit počet instancí Konqueroru, které se mají načíst dopředu. Pokud tento prohlížeč nepoužíváte, tuto volbu zakažte, protože tím jenom zpomalíte start KDE. Ovšem ne o nějaké závratné hodnoty, odchylky se opět pohybovaly v rámci statistické chyby.

Zákaz načítání nsplugins při startu

Prostředí KDE bývá nastaveno tak, že při každém startu vyhledává pluginy prohlížeče Netscape. To není optimální nastavení, protože se počet pluginů často nemění, a proto je silně doporučeno v nastavení Konqueroru (Nastavit/Moduly) odznačit položku Vyhledávat nové pluginy při startu KDE. Vypnutím ušetříte přibližně sekundu.

Obrázek:Nechceme vyhledávat pluginy Netscapu

Prescanning adresářů v KDM

Disk je velice pomalým zdrojem dat, především při operacích jako prohledávání obsahu adresářů. Během startu KDE je nutné nahrát veliký objem dat a přistupovat ke spoustě souborů. Jak jsou dané operace s diskem náročné, je vidět v případě, když se poprvé přihlásíme, ihned odhlásíme a opět přihlásíme. Díky tomu, že jádro cachuje obsah naposledy otevřených souborů v paměti, je druhý start KDE až o polovinu rychlejší.

KDM umožňuje spustit nějaký proces, který běží v době zobrazení přihlašovací obrazovky a je zrušen při startu grafického prostředí. Je možné jej nastavit tak, aby načetl určitá data ještě během zobrazení přihlašovacích informací, a tím zrychlil dobu startu KDE. Konfigurační soubor je v $KDEHOME/share/config/kdmrc nebo /etc/kde3/kdm/kdmrc. Nastavení vypadá přibližně takto

[X-*-Greeter]
Preloader=/usr/bin/preloadkde
A obsah skriptu preloadkde by potom mohl vypadat přibližně takto
# nastaveni pro Kubuntu
KDECONFIG=/etc/kde3
KDE=/usr
KDEHOME=/home/user/.kde

# pokud je $KDE /usr, zakomentuj jejich pouzivani 
exec find $KDECONFIG $KDEHOME $KDE/share/applications \\
$KDE/share/applnk $KDE/share/mimelnk $KDE/share/services \\
$KDE/share/servicetypes $KDE/share/config \\
$KDE/share/icons # $KDE

Pokud máte uživatele, který počítač používá nejčastěji, potom je vhodné mít jeho adresář v seznamu, ale pokud jich máte více, je lepší neprovádět přednačítání domovských adresářů. Příkaz exec je velice důležitý, protože nahradí proces skriptu novým procesem find, a tak bude zajištěno, že během logování bude přednačítání skutečně zrušeno.

Pokud používáte automatický login, přednačítání se nepoužije. Ale i tak je možné podobný skript umístit někam do startovacích skriptů tak, aby přednačítání proběhlo ještě před startem X serveru. Může se také stát, že masivní přístup k disku způsobí, že bude KDM reagovat na stisky kláves líně. Naštěstí v novějších systémech (respektive na systémech s novějším softwarem) můžeme použít příkaz ionice.

Mně se nepodařilo tento skript buďto vůbec rozjet, anebo správně nastavit, protože jsem nezaznamenal žádné zrychlení prvního startu.

Vypnutí kbuildsycoca

Nastavení KDE (nainstalované aplikace, MIME typy a podobně) bývá umístěno v souborech s příponou .desktop. Tento přístup má několik technických předností, nicméně prohledávání takového množství souborů je velice pomalé. Proto KDE obsahuje KSyCoCa (KDE systém Configuration Cache), což je cache, která udržuje obsah souborů v efektivnější formě a odstraňuje nutnost pomalého prohledávání množství souborů.

Protože se obsah .desktop souborů může v libovolném okamžiku změnit, existuje démon, který změny sleduje a obnovuje obsah cache. Ovšem při startu KDE jsou všechny .desktop soubory prozkoumány (respektive jsou porovnány jejich časové značky) a přestože je tento proces optimalizován, představuje poměrně velké zdržení startu KDE.

V menu Komponenty KDE/Výkon KDE v záložce Systém je volba Zakázat kontrolu nastavení při spuštění, čímž dojde ke zpoždění kontroly o 60 vteřin. To může v jistých případech vést k podivnému chování prostředí KDE, protože démon nebude reagovat na změny, které mohly mezitím nastat. Stejně tak přestane prostředí reagovat na instalace nebo odinstalace software (situace se dá vyřešit spuštění kbuildsycoca ručně, nebo prostě můžeme počkat oněch 60 vteřin). I proto nebývá tato volba doporučena.

Naproti tomu má opravdu velký výkonnostní dopad, start systému "za studena" (tj. první nahrávání) tato volba zkrátila o dvě sekundy, na znovuspuštěný systém už neměla pochopitelně vliv.

Rychlejší start aplikací mimo KDE

Pokud nepoužíváte prostředí KDE, ale přesto jste si oblíbili nějaké aplikace, určitě vám vadí jejich pomalý start. Je to z toho důvodu, že každá se spoléhá na několik démonů (kdeinit, dcopserver, klauncher, kded), které se musí spustit před spuštěním vlastní aplikace. Navíc se automaticky ukončí chvíli poté, co vypnete poslední KDE aplikaci.

Proto je vhodné KDE démony spouštět ručně tak, aby je aplikace mohly použít i bez spuštěného prostředí KDE. Do startovacích skriptů daného prostředí je nutné napsat kdeinit.

Jediným problémem může být skutečnost, že permanentně běžící démon může například zabránit odhlášení se z ssh relace, která používá X11 forwarding. Tomu lze předejít spuštěním dcopserver_shutdown, který zruší běžící démony.

Z prostředí fluxbox trvalo spuštění Konqueroru 6,6 sekundy, po předchozím spuštění kdeinit se čas snížil na 2,2 sekundy (protože kdeinit provedl preload Konqueroru do paměti).

Diskuze (5) Nahoru