Есть ли способ легко замедлить определенный каталог для юнит-теста?
Моя цель - запустить тест на файловой системе, которая намеренно медленна, чтобы протестировать показатели производительности в хаотических сценариях хранения. В том же смысле, что есть способы ограничить память и процессор с помощью 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
%
Хотя это требует небольшого количества кода, преимущество этого маршрута в том, что вы имеете полный контроль почти над всеми существенными атрибутами и качествами файловой системы.