Использование CPUQuota в systemd

Я пытаюсь установить жесткий предел в использовании ЦП для команды dd. Я создал следующий файловый файл

[Unit]
Description=Virtual Distributed Ethernet

[Service]
ExecStart=/usr/bin/ddcommand
CPUQuota=10%

[Install]
WantedBy=multi-user.target

которые вызывают следующие простые script

#!/bin/sh
dd if=/dev/zero of=/dev/null bs=1024k

Как я видел в этом руководстве: http://www.freedesktop.org/software/systemd/man/systemd.resource-control.html Использование ЦП для моей службы dd не должно превышать 10%. Но когда я запускаю команду system-cgtop, использование составляет около 70-75%.

Любые идеи о том, что я делаю неправильно, и как я могу это исправить?

P.S. Когда я выполняю systemctl show dd, я получаю следующие результаты относительно CPU

CPUShares=18446744073709551615
StartupCPUShares=18446744073709551615
CPUQuotaPerSecUSec=100ms
LimitCPU=18446744073709551615

Ответы

Ответ 1

Еще одна вещь, которую вы могли бы попробовать, - запустить cpulimit в качестве демона. Я не тестировал это; это просто идея.

В репозиториях ubuntu:

sudo apt install cpulimit

Используйте systemd, если хотите. Это должно ограничивать все экземпляры dd до 20% CPU.

[Unit]
Description=dd CPU Limiter

[Service]
ExecStart=/usr/bin/cpulimit -e dd -l 20

[Install]
WantedBy=multi-user.target

источник

Ответ 2

Альтернативные способы ограничения использования процессора: 1. Используйте команду tasket. 2. Используйте контрольные группы. 3. Используйте докеры и ограничьте использование процессора с помощью cpuset. 4. Уменьшите количество потоков в приложении. При таком подходе требуется некоторый расчет.

Ответ 3

Подразумевает "CPUAccounting = true" Так что это должно быть

[Service]
ExecStart=/usr/bin/ddcommand
CPUAccounting=true
CPUQuota=10%

Ответ 4

Опция "CPUQuota =" зависит от количества процессоров в системе, поскольку она гарантирует, что выполняемые процессы никогда не получат больше, чем% процессорного времени на ONE CPU; и я думаю, что использование процессора%, которое вы получаете с помощью системы cmd d -cgtop, находится на всех процессорах системы.