DiskTester
Тестер дисковой подсистемы на Go с упором на операции с метаданными файловой системы (stat), что критично для приложений активно работающих с атрибутами файлов.
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ:
Операции:
- read - чтение файлов
- write - запись файлов
- stat - получение метаданных
- fsync - Принудительная запись на диск
- mkdir - Создание каталога
- rmdir - даление каталога
- readdir - Чтение содержимого каталога
Конфигурация:
- YAML файлы + command-line flags
- Гибкие веса операций (например: 70% stat, 20% read, 10% write)
- Настройка размеров файлов, глубины каталогов
- Количество workers, длительность теста
Метрики:
- IOPS (операций в секунду)
- Throughput (MB/s для read/write)
- Latency percentiles (p50, p95, p99)
- Раздельная статистика по типам операций
- JSON, csv отчеты
А также:
- Автоматическое создание тестовых данных
- Проверка существующих данных (не пересоздаёт)
- Warmup фаза для стабильности
- Thread-safe метрики
- Graceful shutdown
═══════════════════════════════════════════════════════════════
ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ:
--- Stat Operations ---
Count: 50339 ← выполнено 50,339 операций
IOPS: 838.98 ← 838 операций в секунду
Latency (p50): 234µs ← типичная операция: 0.234ms
Latency (p95): 1.123ms ← 95% операций: < 1.123ms
Latency (p99): 3.456ms ← 99% операций: < 3.456ms
Что такое Latency (задержка)?
Latency - это время выполнения одной операции. Например:
Записать файл заняло 2.5 миллисекунды Прочитать файл заняло 1.2 миллисекунды Stat файла занял 0.3 миллисекунды
В массив latencies собирается время выполнения КАЖДОЙ операции:
Зачем Percentiles (процентили)?
Среднее значение (average) - плохая метрика! Вот почему:
Пример 1: Обманчивое среднее У вас 100 операций:
- 95 операций: 1ms
- 5 операций: 100ms
Среднее: (95×1 + 5×100) / 100 = 5.95ms Но это НЕ отражает реальность! 95% пользователей видят 1ms, а среднее говорит про 6ms.
Percentiles решают эту проблему: p50 (медиана) - 50% операций быстрее этого значения:
"Половина операций выполняется быстрее чем X" Типичная производительность
p95 - 95% операций быстрее этого значения:
"95 из 100 операций выполняются быстрее чем X" Показывает "почти всегда" производительность
p99 - 99% операций быстрее этого значения:
"99 из 100 операций выполняются быстрее чем X" Показывает "худшие случаи" которые всё ещё регулярны
Интерпретация:
- p50 = 500µs: Типичный stat выполняется за полмиллисекунды
- p95 = 2ms: В 95% случаев stat занимает ≤ 2ms
- p99 = 50ms: Но 1% операций (100 из 10,000) занимают до 50ms!
Проблема! Эти 100 медленных операций - это когда пользователь открывает почтовый ящик и ждёт 50ms. Это заметно!
═══════════════════════════════════════════════════════════════