Есть ли способ легко замедлить определенный каталог для юнит-теста?

Моя цель - запустить тест на файловой системе, которая намеренно медленна, чтобы протестировать показатели производительности в хаотических сценариях хранения. В том же смысле, что есть способы ограничить память и процессор с помощью cgroups в контейнерах, я считал, есть ли ограничение io, которое я могу наложить.

  • Есть ли способ смонтировать простую файловую систему в каталог, который намеренно замедлен?
  • В качестве альтернативы, есть ли способ заставить docker-контейнер ограничивать дисковую операцию qoutas в контейнере, выполняя операцию командной строки (не то, чтобы здесь была важна часть операции командной строки - потому что, если я выполню это в docker-контейнере, это будет началось внутри для меня из kubernetes).

1 ответ

FUSE дает один путь к этому. Я клонировал пример по адресу https://github.com/fntlnz/fuse-example.git и добавил sleep() позвонить fuse-example.c в стратегическом месте:

 21   if (strcmp(path, filepath) == 0) {
 22     stbuf->st_mode = S_IFREG | 0777;
 23     stbuf->st_nlink = 1;
 24     stbuf->st_size = strlen(filecontent);
 25     sleep(1); // Right here
 26     return 0;
 27   }

Затем я установил это:

./bin/fuse-example -d -s -f /tmp/example

И дал ему шанс:

% cd /tmp/example
% time cat file
I'm the content of the only file available there
cat file  0.00s user 0.00s system 0% cpu 1.008 total
%

Хотя это требует небольшого количества кода, преимущество этого маршрута в том, что вы имеете полный контроль почти над всеми существенными атрибутами и качествами файловой системы.

Другие вопросы по тегам