systemd/cgroup リソース制限 - ホスト間の他の動作

systemd/cgroup リソース制限 - ホスト間の他の動作

混乱しています。 Ubuntu 20.04を実行している物理サーバーとvagrantUbuntu 20.04を実行する(VirtualBox)仮想マシンがあります。どちらもhwe5.13カーネルを使用して実行されており、両方systemd 245 (245.4-4ubuntu3.17)で有効にsystemd.unified_cgroup_hierarchy=1なっていますcgroup-v2。再起動後は両方ともインストールcgroup-v2されていないため、v1システムはきれいですv2

最初の質問

最初の違いは、アクティブなプライマリコントローラです。cat /sys/fs/cgroup/cgroup.subtree_control:

  • cpuset cpu io memory pids仮想マシンで
  • io memory pids本物のマシンで

最初の質問:なぜですか? :)デフォルトで有効になっているコントローラをどのように制御できますか?設定してみましたが役に立ちDefaultCPUAccounting=yesませんでした。そしてecho "+cpu" >> ...それは一時的なものです。

2番目の質問

setlimitsを試してみましたcgroup。 IO帯域幅を制限することにしましIOWriteBandwidthMaxdd

sudo systemctl set-property --runtime user-1000.slice IOWriteBandwidthMax="/home 20M"

それから:

dd status=progress if=/dev/zero of=kamil.test bs=1M count=2000
  • これは仮想マシンで機能します。

    2079326208 bytes (2.1 GB, 1.9 GiB) copied, 102 s, 20.4 MB/s
    2000+0 records in
    2000+0 records out
    2097152000 bytes (2.1 GB, 2.0 GiB) copied, 102.964 s, 20.4 MB/s
    
  • ただし、物理ホストではそうではありません。

    2000+0 przeczytanych rekordów
    2000+0 zapisanych rekordów
    skopiowane 2097152000 bajtów (2,1 GB, 2,0 GiB), 1,10876 s, 1,9 GB/s
    

正しく設定された制限systemctl cat user-1000.slice::

# /usr/lib/systemd/system/user-.slice.d/10-defaults.conf
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=User Slice of UID %j
Documentation=man:[email protected](5)
After=systemd-user-sessions.service
StopWhenUnneeded=yes

[Slice]
TasksMax=33%

# /run/systemd/system.control/user-1000.slice.d/50-CPUQuota.conf
# This is a drop-in unit file extension, created via "systemctl set-property"
# or an equivalent operation. Do not edit.
[Slice]
CPUQuota=

# /run/systemd/system.control/user-1000.slice.d/50-IOWriteBandwidthMax.conf
# This is a drop-in unit file extension, created via "systemctl set-property"
# or an equivalent operation. Do not edit.
[Slice]
IOWriteBandwidthMax=
IOWriteBandwidthMax=/home 20000000

ああ、なぜこれは仮想マシンでは動作しますが、実際のマシンでは動作しませんか? (どちらのユーザーもUIDを持ち、1000両方のコマンドはそれぞれのホームディレクトリで実行されます。)ここで迷子になりました。説明をリクエストしてください:)

編集: 18:20

に追加するとoflag=sync制限ddが機能します。このフラグがない場合、最大速度は2 GB / sです。私は以下を設定しました/home 5M

dd status=progress if=/dev/zero of=kamil.test bs=1M count=2000 oflag=sync 
skopiowane 614465536 bajtów (614 MB, 586 MiB), 123 s, 5,0 MB/s^C
586+0 przeczytanych rekordów
586+0 zapisanych rekordów
skopiowane 614465536 bajtów (614 MB, 586 MiB), 123,062 s, 5,0 MB/s

ある種のキャッシュが疑われる。ファイルの生成がほぼ瞬時に行われると、コマンドを呼び出すとsyncシェルが停止します。つまり、転送を待っている可能性があります。systemd-cgtop今回は私のスライスに数MB / sが表示されました。

フレンドリーな安否

関連情報