Linux kernel hacking: real-time backup con i kernel tracepoints

I tracepoint (Documentation/trace/tracepoints.txt) sono degli hook “lightweight” che possono essere piazzati in determinati punti nel codice del kernel per registrare l’occorrenza di determinati eventi.

Un tracepoint definisce automaticamente la “probe function” che potrà essere piazzata in punti desiderati all’interno del codice del kernel (instrumentation).

Ogni volta che l’esecuzione passa da tali punti la “probe function” viene invocata e l’infrastruttura di tracing provvede a salvare il contesto dell’evento e le informazioni desiderate all’interno di un tracing buffer. Il tracing buffer sarà poi accessibile dallo userspace tramite il debugfs (/sys/kernel/debug/tracing/trace).

I kernel tracepoint sono utilizzati tipicamente come strumento di debug per tracciare in tempo reale l’occorrenza di particolari eventi, raccogliere statistiche, ecc.

In questo articolo vedremo un utilizzo dei tracepoint un po’ diverso dal solito e sfrutteremo la capacità di tracking in tempo reale e la leggerezza dell’infrastruttura dei tracepoint per realizzare un sistema di notifiche efficace e soprattutto a basso overhead.

[Read more…]

Linux Kernel Hacking: Un semplice filesystem

Il VFS (Virtual File System) è il layer di Linux per gestire i file system. Si tratta di uno dei componenti più importanti del kernel non solo perché permette l’organizzazione e la gestione dei dati sui nostri sistemi di storage ma anche perché è un modo molto comodo per far dialogare lo userspace con il kernel. Progetti importantissimi come SeLinux utilizzano un filesystem per la loro configurazione. In questo articolo vedremo come realizzare un semplice filesystem per l’organizzazione di dati su un dispositivo a blocchi.

[Read more…]