DiskTester/ARCHITECTURE.md

2.3 KiB
Raw Blame History

Архитектура выполнения

┌─────────────────────────────────────────────────────────────┐
│                    TestRunner                                │
│  Создаёт N workers (по умолчанию 4)                         │
└──────┬──────────┬──────────┬──────────┬─────────────────────┘
       │          │          │          │
       ▼          ▼          ▼          ▼
   Worker 1   Worker 2   Worker 3   Worker 4
       │          │          │          │
       │          │          │          │
   ┌───▼──────────▼──────────▼──────────▼───┐
   │     Общий пул из 1000 файлов            │
   │  file_0.dat, file_1.dat, ... file_999   │
   └─────────────────────────────────────────┘

Каждый worker работает в бесконечном цикле:

for {
    1. Выбрать операцию на основе весов
       (30% write, 30% read, 40% stat)
    
    2. Выбрать случайный файл из пула
    
    3. Выполнить операцию
    
    4. Записать метрики
    
    5. Повторить
}

Ключевые моменты

  1. Независимость workers
  • Каждый worker работает сам по себе
  • Никакой синхронизации между ними
  • Могут одновременно работать с одним файлом
  1. Случайность выбора
  • Файл выбирается случайно из всего пула
  • Один файл может быть выбран несколько раз
  • Другой файл может не быть выбран вообще
  1. Размеры динамические
  • Write каждый раз выбирает новый размер
  • Read читает текущий размер файла
  • Stat - метаданные