systemd를 사용하여 IO 대역폭을 제한하는 방법은 무엇입니까?

systemd를 사용하여 IO 대역폭을 제한하는 방법은 무엇입니까?

서비스(또는 프로세스/명령)의 IO 사용을 제한하려고 합니다. (네트워크가 아닌 하드웨어 장치의 IO 읽기/쓰기 제한입니다.)

systemd에서 IOAccounting을 찾았습니다.

systemd-run --scope --user -p "IOReadBandwidthMax=/dev/zero 1M" -p "IOAccounting=true" \
    time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync

systemd-run --scope --user -p "IOWriteBandwidthMax=/dev/sdd 1M" -p "IOAccounting=true" \
    time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync

명령이 빠르게 종료되고 200/300MB/s를 보고합니다. 명령을 실행하면 systemd-run 래퍼 없이 결과가 정확히 동일합니다.

또한 systemd-run을 사용하지 않고 systemd 서비스 작성을 시도했습니다. IO 대역폭 제한이 작동하지 않습니다.

추천 메뉴가 무엇인가요?

답변1

시스템 테스트 systemd(루트 인증 필요)를 실행하면 IO 조절이 작동하고 있으며 10초가 소요되는 것으로 표시됩니다.

systemd-run --scope -p IOWriteBandwidthMax='/dev/sda 10M' time dd if=/dev/zero count=1 bs=100M of=/tmp/foo conv=fdatasync

systemd사용자는 기본적으로 IO를 제어할 수 없으므로 사용자에 대한 실행 제한은 작동하지 않습니다. Arch 위키에는 이에 대한 유용한 정보가 있습니다.

https://wiki.archlinux.org/title/cgroups#As_unprivileged_user

누군가 사용자 서비스에 대리자를 사용하도록 제안했습니다. 또한 모든 프로세스에 대해 제어 그룹을 사용할 수 있습니다(예:우편 엽서) 사용자는 IO를 직접 제어하고 제한을 설정할 수 없습니다.

관련 정보