# 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 ═══════════════════════════════════════════════════════════════ ### ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ: ```txt --- 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. Это заметно! ═══════════════════════════════════════════════════════════════