kded und seine Module

Die heute aktuelle KDE 4.7.0 Inkarnation beglückt einem nach dem Starten der KDE Session mit 100% CPU Auslastung durch kded4

kded4 ist der KDE daemon der vorzugsweise via D-Bus Abfragen vornimmt, die Plasma Widgets dann grafisch darstellen (notifier).
Gefüttert wird der daemon durch seine Module, die sofern sie fehlerhaft sind, wie momentan

kded_networkstatus.so (in /usr/lib64/kde auf einem x64_86 System)

dann leicht in einen busy endlos-loop gerät – bei dem erwähnten Modul pollt er sich zu Tode.
Leider ist die Fehlersuche relativ mühselig – anstatt auf der Oberfläche in den KDE Systemsettings rumzuklicken, würde ich alle Verknüpfungsdateien für kded in

/usr/share/kde4/services/kded

zuerst entfernen und dann wieder Stück für Stück hineinkopieren und anschliessend in KDE einloggen um direkt die Auswirkungen des speziellen Moduls zu sehen.

Qt Creator 2.2

Die kontinuierliche Verbesserung der Qt IDE Creator bringt nun in der aktuellen Version 2.2 ein wirklich sehr nützliches Feature bzgl. Teamfähigkeit – Die Editoreinstellungen können projektweise vorgenommen werden.
Hört sich unspektakulär an, bringt Creator aber in komplexen Setups wesentlich besser ins Spiel und ist mir zumindest ein Blogeintrag wert 🙂

Nepomuk und Akonadi im Griff

Seit geraumer Zeit werde ich nach jedem Login in einem KDE4.x System zeitverzögert mit folgender Meldung beglückt:

„Nepomuk Indexing agents have been disabled“

Zusätzlich kommt noch einiges an blabla bzgl. akonadi Beschwerden.
Die Sache ist, dass ich in den KDE Systemeinstellungen nepomuk deaktiviert habe und keine KDE PIM Programme verwende. So what?

Nachdem ich mir hier nochmals die Terminologie der KDE Lieblingsprojekte verinnerlicht habe, wurde die Ursache schnell klar, auch wenn die Hintergründe es immer noch nicht sind.

Akonadi als PIM Datenzugriffsframework benötigt unbedingt nepomuk für die Umsetzung der Suche.
Warum aber starten denn überhaupt die akonadi agents? Schon der Versuch die nicht benötigten Softwarekomponenten (alles was mit akonadi und KDEpim zu tun hat) zu löschen, schlug fehl. Sie sind so stark mit dem restlichen KDE System verzahnt, dass man entweder gleich das ganze KDE System löschen oder sie eben behalten muss.
Auch ein löschen der (aus welchem Grund auch immer) schon angelegten akonadi Resourcen in den KDE Sytemeinstellungen brachte akonadi beim KDE Start nicht zum schweigen. Es scheint, dass akonadi von banalsten Programmen wie der Plasma-Uhr, benutzt wird. An dieser Stelle gab ich nach und aktivierte nepomuk (allerdings ohne den Strigi Indexer).

Dies führte dann zu dem dubiosen Fehler, dass sich nepomuk beschwerte nicht starten zu können, da das soprano backend redland fehlt. Tatsächlich waren aber alle redland Komponenten installiert. Da ich aber in den KDE Systemeinstellungen zu nepomuk nur eine Konfigurationseinstellung bzgl. des virtuoso backends gesehen habe, schwante mir wieder eine Inkosistenz – geschuldet mangelhafter Transitionsprozesse während der fortlaufenden KDE updates in der 4.x Reihe. Abhilfe schafft das Löschen folgender nepomuk Dateien:

~/.kde4/share/config/nepomuk*
~/.kde4/share/apps/nepomuk/*

Seitdem läuft nepomuk und akonadi ohne Fehlermeldungen und v.a. ressourcenschonend im Hintergrund. Lediglich nach dem Einloggen erscheinen für wenige Augenblicke die Prozesse

nepomukservicestub
akonadi_maildispatcher_agent

mit CPU Belastung.
Übrigens war dies während der inkonsistenten Phase ganz anders. Dort liefen teilweise akonadi Prozesse, sowie das benutze mysql, wild und CPU-fressend durch die Gegend.

praxis tipps: atop

Das nächste Echtzeit Performance Monitoring Tool. Ist aber so kompakt und einfach gehalten, dass es einfach auch hier erwähnt werden muss

AT Computing’s System & Process Monitor

Teilt den Bildschirm wie top in einen oberen Systembereich und unteren Prozessbereich auf.
Positiv fällt sofort auf, dass der Systembereich auch mit RAID/LVM und den physikalischen zugrundeliegenden Datenträgern zurechtkommt und die Last auf den einzelnen OSI Netzwerkschichten darstellen kann.

Die wichtigesten Shortcuts lauten folgendermassen:

Parameter Bedeutung
G Allgemeine Ansicht
M Hauptspeicher Ansicht
D Massenspeicher Ansicht
S Scheduler Ansicht
P Ansicht nach Program
U Ansicht nach Benutzer
C Ansicht Befehlszeile
Shift+C Sortieren nach CPU-Auslastung
Shift+M Sortieren nach RAM-Auslastung
Shift+D Sortieren nach Massenspeicher-Auslastung
Shift+A Sortieren nach meistgenutzer Resource
Shift+P Filtern nach Prozessname
Shift+U Filtern nach Benutzername
Z Pause
T Auslösen einer manuellen Messung

praxis tipps: Pfad der .icc Dateien

Die 10. Suchaktion nach den .icc files auf meinen Rechnern, ist der Anlass diese Zusammenfassung zu schreiben:

Auf Mac OS X werden die .icc’s in folgenden Pfaden abgelegt:

global:
/Library/ColorSync/Profiles/
lokal:
~/Library/ColorSync/Profiles/

ev. existiert unterhalb dieser Verzeichnisse noch ein Display directory.

Auf Linux und Solaris gibt es keine Regel, d.h. der File Hierarchy Standard gibt keine Richtlinie aus – wohl aber haben sich Standardpfade eingebürgert, welche auf der OpenIccDirectoryProposal Webseite ausführlich dargelegt sind. In Kürze sind das:

global:
das Unterverzeichnis /color/icc der Verzeichnisse aus den Systemvariablen
$XDG_DATA_DIRS
$XDG_CONFIG_DIRS

..also normalerweise..
/usr/share/color/icc
/usr/local/share/color/icc
..oder eventuell auch..
/var/lib/color/icc

lokal:
$XDG_DATA_HOME/color/icc
normalerweise: ~/.local/share/color/icc

$XDG_CONFIG_HOME/color/icc
normalerweise: ~/.config/color/icc

auch hier können sicher unterhalb dieser Verzeichnisse Subdirectories, bspw. device befinden.

Realtime Linux mit der RedHawk Distribution

Nachdem mit Kernel 2.6.39 der Big Kernel Lock (BLK) endgültig entfernt wurde, stellt jeder Vanilla Kernel ein vollständig konfigurierbares RT System dar.

Warum man dennoch mit Speziallösungen wie der Realtime Linux Distribution RedHawk nicht schlecht fährt liegt meist an Frontend Features welche die Wartbarkeit deutlich erhöhen.

Beispiele, gerade aus der Distribution RedHawk sind CPU-set shielding und CPU-set affinity. Beides wird mit Shell Kommandos unterstützt.

  • shield kann on-the-fly CPU(s) aus der Verfügbarkeit des Operating Systems herausnehmen und wieder hinzufügen.
  • run kann bestimmte Prozesse mit RT-Priorität einem bestimmten CPU-set exklusiv zuweisen (affinity).

Diese Beispiele sowie allgemeine Aktualisierungen sind in der aktuellen Fassung meines Dokumentes über Realtime Linux enthalten.

serial square wave generator

Um die Möglichkeiten verschiedener UART’s genauer unter die Lupe zu nehmen – v.a. die des Oxford 16c950 – schrieb ich ein Testprogramm, welches auf TX einfach ein Rechtecksignal ausgibt. Um die Signale, auch in Hinblick auf die gewählten Parameter, zu beurteilen, kommt man um einen Oszi nicht herum.

Um ein uniformes Rechtecksignal hinzubekommen, muss natürlich das Start- und Stopbit miteinbezogen werden, das Paritätsbit lässt man dabei weg (Die Coding Idee stammt von DDL / srcpd)

Das Testprogramm erlaubt dabei folgende Parameter zu setzen:

  • Baudrate in bps (beliebig wählbar)
  • RT Priorität (1-99)
  • Dauer des Signals (in Sekunden)

Das Programm setzt auf die aktuellsten POSIX und Linux Schnittstellen auf:

  • Linux Capabilities (keine root Rechte mehr erforderlich)
  • serielle Schnittstelle nach POSIX IEEE Std 1003.1-2001
  • POSIX/NPTL threads
  • ISO C-99

Und hier kann man das Programm herunterladen:
squerial

Der einzigste Wermutstropfen ist, das momentan das setzen der nicht-standardisierten Baudraten über einen Mechanismus geht, der im seriellen Treiber als deprecated gekennzeichnet ist… Fortsetzung folgt!

Realtime Prozesse aus dem Userland

Mit den Systemaufrufen:

struct sched_param sp;
sched_setscheduler(pid,SCHED_RR,&sp);

lässt sich – sofern man über CAP_SYS_NICE Capabilities verfügt – jederzeit unter Linux der Prozess pid in einen soften Realtime Mode bringen. Hierbei übernimmt das Kernelmodul sched_rt das Prozessscheduling von sched_fair (Complete Fair Scheduler).

Beachtenswert hierbei ist wieder die gewöhnungsbedürftige Invertierung der RT-Prioritäten. Der Aufruf

struct sched_param sp;
sp.sched_priority = 14;

setzt die RT-Priorität auf 14 – welches im Linux Prioritätenarray dann 99-14=85 ergibt. Dies bestätigt die Ausgabe Prio des folgenden Befehls:

cat /proc/<pid>/sched

Die Capability CAP_SYS_NICE muss übrigens nicht zwangsläufig bedeuten, dass nur root den Prozess starten muss. Mittels den libcap-progs kann auch folgender Befehl dem Programm auf Filesystemebene diese Capability zugestehen.

setcap cap_sys_nice=ep /pfad/zu/meinem/programm

Erforderlich dazu ist, dass der Kernel mit CONFIG_SECURITY_FILE_CAPABILITIES=y kompiliert wurde. Die Linux Kernel welche von Novell gebaut wurden (SLES,openSUSE) müssen noch mit dem Bootparameter file_caps=1 gestartet werden, da diese die Fähigkeit zwar auch einkompiliert haben, aber standardmässig deaktiviert ist.
Der Bootparameter ist übrigens exklusiv nur auf Novell Systemen vorhanden – der offizielle Vanilla Kernel Bootparameter bzgl. Capabilities lautet no_file_caps ,um die Fähigkeit beim Start zu deaktivieren.

wordpress 3.0

Bin endlich dazugekommen, die Blogsoftware auf den neuesten Stand zu bringen. Das Update von wordpress 2.3 auf 3.0 verlief überraschend problemlos. Nur die plugins mussten manuell neu installiert werden, es gab hierfür keinen Update Mechanismus.

Ansonsten gibt es nur ein neues header Bild, um die Themen des Blogs gleich mal klarzustellen. Ganz rechts ist die zukünftige Kategorie – Modelleisenbahn Elektronik – genauer gesagt, die Erzeugung der Digitalsignale für die gängigen Steuerprotokolle.

praxis tipps: ps

Einfach ps in einem Terminal eingegeben, ist es eine Enttäuschung, denn nur die zum aktuellen Terminal assozierten Prozesse werden angezeigt (normalerweise eine bash und der ps Befehl). Folgende Optionsparameter (können auch aneinandergehängt werden, z.B. -efLm) sind nützlich (wiederum Groß- und Kleinschreibung beachten):

  • -e zeigt alle Prozesse auf dem System an
  • -f formatiert die Tabelle ausführlicher

im Zusammenhang mit SMP (Symmetric Multiprocessing) gibt es noch folgende Parameter

  • -L zeigt die Threads an (LWP-Spalte, steht für Lightweight Prozess) die von einem Prozess gestartet werden
  • -m rückt die LWP’s baumartig ein, so dass ein guter Überblick über die SMP-fähigen Programme ergibt
  • -p <PIDLIST> schränkt die Ausgabe auf die in der PIDLIST angegeben Prozesse aus.

Somit erzeugt bspw.

ps -Lmp <PIDLIST>

eine übersichtliche Ausgabe eines (oder mehrerer) Prozesse(s) mit allen LWP’s (=Threads)