Подсистема cgroups blkio не рассчитывает количество байтов записи блока для приложений conatiner - PullRequest
0 голосов
/ 11 октября 2018

Я работаю над версией ядра Linux 3.14 и включил в ней подсистему cgroup и blkio для проверки количества байтов записи блочного устройства из приложений контейнера и хоста.

Но явозникают проблемы с получением записанных байтов из функции регулирования cgroup blkio для приложения-контейнера.

Работает для основной иерархии (например, /sys/fs/cgroup/blkio/blkio.throttle.io_service_bytes), но не для более глубоких (например, / sys / fs / cgroup / blkio / lxc / web)(имя контейнера web ))

Я создал небольшой тестовый скрипт (checkWrite), который просто введет группу, в которой он запущен (pwd), и создаст 1M.

  #!/bin/bash

SIZE=1M
DST="/home/root"
#check if we are in the /sys/fs/cgroup/ dir
if [ ! -e ./tasks ]; then
    echo "Error, this script must be started in a cgroup blkio directory"
    echo "Start in or below /sys/fs/cgroup/blkio !"
    exit -1
fi

echo "Using the cgroup: ${PWD##*/cgroup}"

# add myself to cgroup
echo $$ > tasks

mygroup=`cat /proc/$$/cgroup | grep blkio`
echo "we're now in bklio cgroup: ${mygroup}"

# call sync to let kernel store data
sync
sleep 1

# fetch current writen bytes count for eMMC 
before=$(cat blkio.throttle.io_service_bytes | grep "179:24 Write")
echo "before writing: ${before}"

echo "writing ${SIZE} random data to ${DST}/DELME ..."
dd if=/dev/urandom of=${DST}/DELME bs=${SIZE} count=1

sync
sleep 2

# fetch current writen bytes count for eMMC 
after=$(cat blkio.throttle.io_service_bytes | grep "179:24 Write")
echo "after writing: ${after}"
written=$((${after##* }-${before##* }))
written=$((written/1024))
echo "written = ${after##* }B - ${before##* }B = ${written}kB"

rm -rf ${DST}/DELME

Выход есть;

/sys/fs/cgroup/blkio# ~/checkWrite 
Using the cgroup: /blkio
we're now in bklio cgroup: 3:blkio:/                                                         <- this task is in this blkio chgroup now
before writing: 179:24 Write 200701952                                                   <- from blkio.throttle.io_service_bytes
writing 1M random data to /var/opt/bosch/dynweb/DELME ...
1+0 records in
1+0 records out
after writing: 179:24 Write 201906176
written = 201906176B - 200701952B = **1176kB**                                  **<- fairly ok**

/sys/fs/cgroup/blkio/lxc/web# ~/checkWrite 
Using the cgroup: /blkio/system.slice
we're now in bklio cgroup: 3:blkio:/system.slice
before writing: 179:24 Write 26064896
writing 1M random data to /var/opt/bosch/dynweb/DELME ...
1+0 records in
1+0 records out
after writing: 179:24 Write 26130432
written = 26130432B - 26064896B = **64kB**                                              **<- much too less**

Не понимаю ли я обработку?

Если она не работает, то как контролировать / смотреть /чтение блочного устройства и запись из контейнера приложений.

...