Skip to content
This repository has been archived by the owner on Nov 12, 2022. It is now read-only.

A Linux kernel module implementing a multi-flow device driver. Threads are able to read and write data segments from and to the flows, which are characterized differently. The driver supports ioctl and enabes parameters for state checking. Synchronization aspects are taken into account. This project has been realized for academic purpose.

IronMatt97/Linux-multiflow-device-driver

Repository files navigation

README / MODULE USAGE

Per installare il modulo basta usare, come da forma, il comando 'make' e 'sudo insmod multi-flow-device.ko'. Una volta inserito, è possibile leggere il MAJOR number del driver dal circular buffer usando 'dmesg'. Al fine di permettere una semplificata attività di testing del modulo, ho realizzato tre differenti utility. Tipi di testing:

  1. Test delle funzionalità di base (directory functions_test): Dopo la compilazione, il comando gli argomenti per l'esecuzione sono './tester /dev/mfdev MAJOR MINORS'. Tenere presente che il numero massimo di MINORS pilotabili a disposizione è 128. In questa demo verrà avviato un prompt che permetterà, in maniera single threaded, di effettuare un'operazione alla volta su un device alla volta. Ciò risulta molto utile al fine di controllare l'esito di ogni singola operazione. Ogni comando possibile nello script di quelli messi a disposizione effettua una singola operazione per sessione per motivi di semplicità, ma è possibile aggiungerne liberamente inserendone altre nel file sorgente.
  2. Test di concorrenza (directory concurrency_test): Gli argomenti per l'esecuzione sono gli stessi del function_test. Verrà avviato un test che si occuperà di spawnare diversi test al fine di stressare il sistema e testarne la gestione della concorrenza. Il test che ho lasciato prevede 3 sottofasi per ogni minor da testare, una in cui vengono avviati solo thread di scrittura, una dove ci sono solo thread di lettura, ed una finale in cui ci sono diversi thread tutti insieme. Sono stati scelti thread di natura diversa tra l'altro (che scrivono su flussi differenti e con modalità bloccante/non bloccante differenti). Anche qui è possibile aggiungere altri test dal main o modificare l'attività di quello già presente.
  3. Test temporale (directory performance_test): A differenza dei due precedenti questo test non prende come parametri il numero di minors da testare, ma lavora sul minor 0 di default, dato il differente scopo del programma. Il test punta infatti a misurare, ripetutamente, l'attività di un certo numero di thread che tentano di effettuare operazioni sul sistema (prima in maniera concorrente, poi uno per volta). Sia il numero di thread, sia le ripetizioni sono modificabili dal sorgente. Questo programma è stato realizzato per mettere in luce le performance del sistema in situazioni di stress o in situazioni normali. I risultati vengono loggati in un file locale alla directory. Ho personalmente riportato e analizzato i dati su un foglio di calcolo lasciato nella directory.

Il modulo espone anche dei parametri, consultabili all'interno di /sys/modules/multi-flow-device/parameters/, che permettono di conoscere lo stato dei device abilitati e disabilitati, lo stato dei thread in attesa di compiere delle operazioni e la quantità di bytes presenti negli stream.

About

A Linux kernel module implementing a multi-flow device driver. Threads are able to read and write data segments from and to the flows, which are characterized differently. The driver supports ioctl and enabes parameters for state checking. Synchronization aspects are taken into account. This project has been realized for academic purpose.

Topics

Resources

Stars

Watchers

Forks