diff --git a/README.md b/README.md index e6c0b12..f308d8e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,101 @@ # DiskTester -Тестер дисковой подсистемы на Go с упором на операции -с метаданными файловой системы (stat), что критично для приложений -типа Dovecot и других систем, активно работающих с атрибутами файлов. \ No newline at end of file +Тестер дисковой подсистемы на 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. Это заметно! + +═══════════════════════════════════════════════════════════════ +