Я хочу измерить IO (чтение / запись данных на жесткий диск) приложения, работающего в контейнере Docker. Потому что есть больше контейнеров,
Я решил отслеживать файлы blkio соответствующего контейнера. Проблема в том, что ни один из файлов blkio
обновляются при записи большого количества данных в контейнер.
Что я делаю:
- Я создал контейнер на основе fedora:
docker run -ti fedora /bin/bash
- Запустите следующую команду внутри контейнера:
dd if=/dev/urandom of=./outfile bs=1M count=1000
(создан файл 1 ГБ)
- Во время работы
dd
я просматривал все файлы blkio в
/sys/fs/cgroup/blkio/docker/[containerID]/
каталог с использованием watch -n 0.2 cat *
Проблема в том, что файлы не были обновлены во время выполнения, ни после окончания dd
.
(Я дважды проверил containerID
, чтобы убедиться, что смотрю нужный контейнер.)
Чтобы убедиться, что данные записаны на диск, а не в буферах ОС, я выполнил ту же команду в контейнере
но я смотрел blkio файлы всей системы watch -n 0.2 cat /sys/fs/cgroup/blkio*
. В этом случае файлы были
обновляется во время выполнения dd
и после него (пока ОС сбрасывается в буферы).
Я также установил /proc/sys/vm/dirty_bytes
на 50 МБ [1], что должно гарантировать, что данные записываются на диск и не буферизируются в памяти.
Я использую Fedora 28 и Docker 18.03.1-ce. ПК имеет 32 ГБ оперативной памяти и 500 ГБ жесткого диска.
Почему операции ввода-вывода не записываются в blkio файлах контейнера?
[1] https://www.kernel.org/doc/Documentation/sysctl/vm.txt