2026-03-25 17:12:35 +03:00
2026-03-25 17:12:35 +03:00

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

═══════════════════════════════════════════════════════════════

Description
Тестер дисковой подсистемы на Go с упором на операции с метаданными файловой системы (stat), что критично для приложений типа Dovecot и других систем, активно работающих с атрибутами файлов.
Readme 36 KiB
Languages
Markdown 100%