10 KiB
Поддерживаемые операции в DiskTest v1.1
Обзор операций
DiskTest поддерживает 7 типов операций для тестирования различных аспектов производительности файловой системы.
1. write - Запись файла
Описание
Полная перезапись файла случайными данными.
Что делает
- Выбирает случайный файл из тестового набора
- Генерирует данные случайного размера (между
file_size.minиfile_size.max) - Полностью перезаписывает файл новыми данными
- Измеряет время записи
Метрики
- IOPS - операций записи в секунду
- Throughput - MB/s записанных данных
- Latency - p50/p95/p99
Пример конфигурации
operations:
- type: write
weight: 50
2. read - Чтение файла
Описание
Полное чтение файла в память.
Что делает
- Выбирает случайный файл
- Читает весь файл целиком в память
- Измеряет время чтения и количество прочитанных байт
Метрики
- IOPS - операций чтения в секунду
- Throughput - MB/s прочитанных данных
- Latency - p50/p95/p99
Пример конфигурации
operations:
- type: read
weight: 50
3. stat - Получение метаданных файла
Описание
Получение информации о файле без чтения его содержимого.
Что делает
- Выбирает случайный файл
- Вызывает
os.Stat()для получения метаданных - НЕ читает содержимое файла
- Возвращает: размер, время модификации, права доступа
Метрики
- IOPS - операций stat в секунду
- Latency - p50/p95/p99
- Throughput не измеряется (нет передачи данных)
Целевые значения
- Отлично: p99 < 5ms
- Хорошо: p99 5-10ms
- Плохо: p99 > 50ms
Пример конфигурации
operations:
- type: stat
weight: 70 # Dovecot делает МНОГО stat
4. fsync - Принудительная запись на диск 🆕
Описание
Форсирует физическую запись данных на диск (гарантия durability).
Что делает
- Открывает случайный файл
- Вызывает
f.Sync()- форсирует запись буферов на диск - Гарантирует что данные физически записаны (не в cache)
- Измеряет время синхронизации
Метрики
- IOPS - операций fsync в секунду
- Latency - p50/p95/p99 (КРИТИЧЕСКАЯ метрика для БД!)
Целевые значения
- Отлично: p99 < 5ms
- Хорошо: p99 5-10ms
- Приемлемо: p99 10-50ms
- Плохо: p99 > 50ms
Почему важно
- Fsync p99 > 10ms → медленные транзакции в БД
- Fsync p99 > 50ms → неприемлемо для OLTP систем
Пример конфигурации
operations:
- type: write
weight: 45
- type: fsync
weight: 45 # После каждой записи - fsync
- type: read
weight: 10
5. mkdir - Создание каталога 🆕
Описание
Создание нового каталога в файловой системе.
Что делает
- Создаёт временный каталог с уникальным именем
- Измеряет время создания
- Сразу удаляет каталог (cleanup)
Метрики
- IOPS - операций mkdir в секунду
- Latency - p50/p95/p99
Целевые значения
- Отлично: p99 < 5ms
- Хорошо: p99 5-20ms
- Плохо: p99 > 100ms
Почему важно
Docker build медленный? Проверьте mkdir latency!
Пример конфигурации
operations:
- type: mkdir
weight: 30
- type: rmdir
weight: 30
6. rmdir - Удаление каталога 🆕
Описание
Удаление пустого каталога.
Что делает
- Создаёт пустой временный каталог
- Измеряет время удаления пустого каталога
- Вызывает
os.Remove()на каталоге
Метрики
- IOPS - операций rmdir в секунду
- Latency - p50/p95/p99
Пример конфигурации
operations:
- type: mkdir
weight: 30
- type: rmdir
weight: 30
- type: readdir
weight: 40
7. readdir - Чтение содержимого каталога 🆕
Описание
Чтение списка всех файлов и подкаталогов в директории.
Что делает
- Выбирает случайный каталог из тестовой структуры
- Вызывает
os.ReadDir()- читает список всех файлов/каталогов - Подсчитывает количество entries
- Измеряет время операции
Метрики
- IOPS - операций readdir в секунду
- Throughput - entries/second (сколько файлов прочитано)
- Latency - p50/p95/p99 (зависит от количества файлов!)
Целевые значения
Latency зависит от количества файлов в каталоге:
- 100 файлов: p99 < 10ms
- 1,000 файлов: p99 < 50ms
- 10,000 файлов: p99 < 200ms
Особенность
Latency растёт нелинейно с количеством файлов в каталоге.
Почему важно
lsв большом каталоге медленный? Проверьте readdir!- Backup долго сканирует? Проверьте readdir latency!
Пример конфигурации
operations:
- type: readdir
weight: 60
- type: stat
weight: 30 # часто используются вместе
- type: read
weight: 10
Сравнительная таблица
| Операция | Читает данные? | Пишет данные? | Изменяет файл? | Критично для |
|---|---|---|---|---|
| write | ❌ | ✅ | ✅ | Mail, DB, Logs |
| read | ✅ | ❌ | ❌ | Mail, DB, Media |
| stat | ❌ | ❌ | ❌ | Dovecot, Sync |
| fsync | ❌ | ✅ (flush) | ❌ | PostgreSQL, MySQL |
| mkdir | ❌ | ✅ (metadata) | ✅ (FS) | Docker, Build |
| rmdir | ❌ | ✅ (metadata) | ✅ (FS) | Cleanup |
| readdir | ✅ (metadata) | ❌ | ❌ | Backups, Browsers |
Типичные комбинации операций
Mail Server (Dovecot)
operations:
- type: stat
weight: 70 # Проверка писем
- type: read
weight: 20 # Чтение писем
- type: write
weight: 10 # Новые письма
Критическая метрика: stat p99 < 10ms
Transactional Database (PostgreSQL)
operations:
- type: write
weight: 45 # Запись данных
- type: fsync
weight: 45 # Коммит транзакций
- type: read
weight: 10 # Чтение
Критическая метрика: fsync p99 < 10ms
Container Runtime (Docker)
operations:
- type: mkdir
weight: 40 # Создание слоёв
- type: write
weight: 30 # Запись в слой
- type: readdir
weight: 20 # Проверка кэша
- type: rmdir
weight: 10 # Очистка
Критическая метрика: mkdir p99 < 20ms
Backup System
operations:
- type: readdir
weight: 50 # Сканирование каталогов
- type: stat
weight: 30 # Проверка изменений
- type: read
weight: 20 # Чтение для backup
Критическая метрика: readdir p99 < 100ms (для больших каталогов)
Build System (make, ninja)
operations:
- type: stat
weight: 40 # Проверка timestamps
- type: mkdir
weight: 25 # Создание build dirs
- type: read
weight: 20 # Чтение исходников
- type: write
weight: 15 # Объектные файлы
Критическая метрика: stat p99 < 5ms, mkdir p99 < 10ms
Как выбрать операции для теста
1. Определите приложение
- Mail server → stat + read + write
- Database → write + fsync + read
- Containers → mkdir + rmdir + write
- Backup → readdir + stat + read
2. Определите критичные метрики
- Dovecot → stat p99 (< 10ms)
- PostgreSQL → fsync p99 (< 10ms)
- Docker → mkdir p99 (< 20ms)
- Backup → readdir p99 (< 100ms)
3. Подберите веса операций
- Основная операция: 60-70%
- Вторичные: 20-30%
- Редкие: 5-10%
4. Запустите тест
./disktest -config your_config.yaml -csv results.csv
5. Анализируйте результаты
Смотрите на p99 latency критичных операций!
Примеры запуска
Тест всех операций
./disktest -config examples/balanced.yaml
Тест БД workload
./disktest -config examples/database.yaml -csv db_results.csv
Тест directory operations
./disktest -config examples/directory_ops.yaml
Тест Dovecot workload
./disktest -config examples/dovecot.yaml