Обновить README.md

This commit is contained in:
denis 2026-03-25 17:12:35 +03:00
parent fdeb286025
commit 528f27f51f

View File

@ -2,4 +2,100 @@
Тестер дисковой подсистемы на Go с упором на операции
с метаданными файловой системы (stat), что критично для приложений
типа Dovecot и других систем, активно работающих с атрибутами файлов.
активно работающих с атрибутами файлов.
### КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ:
Операции:
* 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. Это заметно!
═══════════════════════════════════════════════════════════════