Модуль ядра Linux для создания виртуальных блочных устройств с отслеживанием статистики операций ввода-вывода.
DMP модуль создает прокси-устройства поверх существующих блочных устройств и собирает детальную статистику всех операций I/O. Статистика доступна через интерфейс sysfs.
- Создание proxy блочных устройств поверх существующих
- Сбор статистики операций чтения и записи
- Подсчет среднего размера блоков
- Интерфейс sysfs для просмотра статистики
- Поддержка всех стандартных операций device mapper
- Количество запросов на чтение - общее число операций чтения
- Количество запросов на запись - общее число операций записи
- Средний размер блока на чтение - средний размер блока для операций чтения
- Средний размер блока на запись - средний размер блока для операций записи
- Общее количество запросов - суммарное количество всех операций
- Средний размер блока - средний размер блока для всех операций
- Linux kernel headers
- GCC compiler
- Make
make# Загрузка модуля
sudo insmod dmp.ko
# Или установка в систему
sudo make installСначала создайте базовое блочное устройство (например, zero target):
# Создание устройства размером 1GB (2097152 сектора по 512 байт)
sudo dmsetup create zero1 --table "0 2097152 zero"Создайте DMP устройство поверх базового:
# Создание proxy устройства того же размера
sudo dmsetup create dmp1 --table "0 2097152 dmp /dev/mapper/zero1"Теперь можно работать с устройством /dev/mapper/dmp1 как с обычным блочным устройством:
# Запись данных
sudo dd if=/dev/random of=/dev/mapper/dmp1 bs=4k count=10
# Чтение данных
sudo dd if=/dev/mapper/dmp1 of=/dev/null bs=4k count=10Статистика доступна через sysfs:
cat /sys/module/dmp/dmp/stat/volumesПример вывода:
read:
reqs: 500
avg size: 4096
write:
reqs: 100
avg size: 4096
total:
reqs: 600
avg size: 4096
# Удаление proxy устройства
sudo dmsetup remove dmp1
# Удаление базового устройства
sudo dmsetup remove zero1sudo rmmod dmpВ комплекте предоставляется скрипт для автоматического тестирования:
# Сделать скрипт исполняемым
chmod +x dmp_test.sh
# Запустить тест (требуются права root)
sudo ./dmp_test.shСкрипт автоматически:
- Загружает модуль
- Создает тестовые устройства
- Выполняет операции I/O
- Проверяет статистику
- Очищает тестовое окружение
.
├── dmp.c # Исходный код модуля
├── Makefile # Файл сборки
├── dmp_test.sh # Тестовый скрипт
└── README.md # Документация
Модуль использует фреймворк Device Mapper ядра Linux для создания виртуальных блочных устройств. Каждое DMP устройство выступает как прозрачный прокси, перенаправляя все операции на подлежащее устройство и одновременно собирая статистику.
- Статистика собирается на уровне bio структур
- Используются атомарные операции для thread-safe обновления счетчиков
- Статистика агрегируется глобально для всех DMP устройств
Статистика предоставляется через файл /sys/module/dmp/dmp/stat/volumes в текстовом формате, удобном для чтения человеком и парсинга скриптами.
- Чтение (READ)
- Запись (WRITE)
- Flush операции
- Discard операции
- Статистика агрегируется глобально для всех устройств
- Не поддерживается статистика per-device
- Требует права администратора для работы
Для отладки можно использовать:
# Просмотр логов модуля
dmesg | grep dmp
# Проверка загруженных модулей
lsmod | grep dmp
# Информация об устройствах device mapper
dmsetup info
dmsetup tableGPL v2
Rusin A.N.