DiskTester/README.md
2026-03-25 17:12:35 +03:00

102 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. Это заметно!
═══════════════════════════════════════════════════════════════