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).
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.
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.
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).