gs_cgroup

    gs_cgroup工具为使用数据库的操作系统用户创建Cgroups配置文件,并且在操作系统中生成用户设定的Cgroups。同时为用户提供增加、删除Cgroups、更新Cgroups资源配额、设定Cgroups的CPU或IO限额、设定异常处理阈值及相应操作等服务。此工具只负责当前操作系统节点的Cgroups操作,使用时需在各个节点上调用相同命令语句进行统一配置。

    这里假设读者已经了解了负载管理的相关原理,具体请参考《开发者指南》中“资源负载管理”章节。

    • 使用普通用户或数据库管理员执行命令。

      1.前置条件:需设置GAUSSHOME环境变量为数据库安装目录;且root用户已创建普通用户默认的控制组。

      2.创建控制组及设置对应的资源配额,以便在数据库中运行作业时,指定到此控制组,使用此控制组管理的资源;通常数据库管理员为每个数据库用户创建Class组。
      a. 创建Class控制组和Workload控制组。

      创建当前用户新的Class Cgroups命名为“class1”,资源配额为总Class的40%。

      创建当前用户新的“class1” Cgroups下属的Workload控制组,命名为“grp1”,资源配额为“class1” Cgroups的20%。

      b. 删除grp1控制组和Class控制组。

      1. gs_cgroup -d -S class1 -G grp1

      ​ 删除当前用户已建的“grp1”Cgroups。

      1. gs_cgroup -d -S class1

      ​ 删除当前用户已建的“class1”Cgroups。

    3.更新已创建控制组的资源配额。
    a. 更新动态资源配额。

    1. gs_cgroup -u -S class1 -G grp1 -g 30

    ​ 更新当前用户的class1 Cgroups下属grp1 Cgroups资源配额为class1 Cgroups的30%。

    b. 更新限制资源配额。

    ​ 更新当前用户的class1 Cgroups下属grp1 Cgroups限制使用CPU核数范围占上一级class1可用核数的30%。

    4.更新Gaussdb的CPU核数范围。

    1. gs_cgroup -u -T Gaussdb -f 0-20

    更新Gaussdb进程使用的CPU核数为0-20。

    说明:
    -f参数只适用于对Gaussdb设置核数范围。对于其他各控制组,如需设置核数范围,需要使用—fixed参数。

    4.设置异常处理信息(class:wg组需存在)。
    a. 设置组class:wg下的作业阻塞到1200秒或执行2400秒时执行终止动作:

    1. gs_cgroup -S class -G wg -E "blocktime=1200,elapsedtime=2400" -a

    b. 设置组class:wg下的作业下盘数据量达到256MB或大表广播数据量达到100MB时执行终止动作:

    1. gs_cgroup -S class -G wg -E "spillsize=256,broadcastsize=100" -a

    c. 设置组Class下的作业在所有DN上CPU总时间到达100s时执行降级动作:

    1. gs_cgroup -S class -E "allcputime=100" --penalty

    d. 设置组Class下的作业在所有DN上执行时间到达2400秒,倾斜率达到90时执行降级动作:

    6.设置控制组使用的核数范围。

    设置组class:wg的核数范围占Class控制组的20%

    1. gs_cgroup -S class -G wg -g 20 --fixed -u

    gs_cgroup - 图4 须知: Class或Workload核数范围必须通过指定—fixed参数设置。

    7.回退上一个步骤。

    1. gs_cgroup --recover

    8.查看已创建的控制组信息。
    a. 查看配置文件中控制组信息。

    1. gs_cgroup -p

    控制组配置信息

    1. gs_cgroup -p
    2. Top Group information is listed:
    3. GID: 0 Type: Top Percent(%): 1000( 50) Name: Root Cores: 0-47
    4. GID: 1 Type: Top Percent(%): 833( 83) Name: Gaussdb:omm Cores: 0-20
    5. GID: 2 Type: Top Percent(%): 333( 40) Name: Backend Cores: 0-20
    6. GID: 3 Type: Top Percent(%): 499( 60) Name: Class Cores: 0-20
    7. Backend Group information is listed:
    8. GID: 4 Type: BAKWD Name: DefaultBackend TopGID: 2 Percent(%): 266(80) Cores: 0-20
    9. GID: 5 Type: BAKWD Name: Vacuum TopGID: 2 Percent(%): 66(20) Cores: 0-20
    10. Class Group information is listed:
    11. GID: 20 Type: CLASS Name: DefaultClass TopGID: 3 Percent(%): 166(20) MaxLevel: 1 RemPCT: 100 Cores: 0-20
    12. GID: 21 Type: CLASS Name: class1 TopGID: 3 Percent(%): 332(40) MaxLevel: 2 RemPCT: 70 Cores: 0-20
    13. Workload Group information is listed:
    14. Timeshare Group information is listed:
    15. GID: 724 Type: TSWD Name: Low Rate: 1
    16. GID: 725 Type: TSWD Name: Medium Rate: 2
    17. GID: 726 Type: TSWD Name: High Rate: 4
    18. GID: 727 Type: TSWD Name: Rush Rate: 8
    19. GID: 20 Type: EXCEPTION Class: DefaultClass
    20. PENALTY: QualificationTime=1800 CPUSkewPercent=30
    21. GID: 21 Type: EXCEPTION Class: class1
    22. PENALTY: AllCpuTime=100 QualificationTime=2400 CPUSkewPercent=90
    23. GID: 86 Type: EXCEPTION Group: class1:grp1:2
    24. ABORT: BlockTime=1200 ElapsedTime=2400

    上述示例查看到的控制组配置信息如下表所示。

    表 1 控制组配置信息

    ​ b. 查看操作系统中树形结构的控制组信息
    ​ gs_cgroup -P显示控制组树形结构信息,其中shares代表操作系统中CPU资源的动态资源配额“cpu.shares”的数值,cpus代表操作系统中CPUSET资源的动态资源限额“cpuset.cpus”的数值,指的是该控制组能够使用的核数范围。

    • -a [—abort]

      对满足设定的异常阈值的作业执行终止动作。

    • -b pct

      Backend Cgroups占用Top Backend资源的百分比,需同时指定“-B backendname”参数。

      取值范围

      • 为1 ~ 99。在不进行设置的情况下,默认CPU配额设置为Vacuum控制组占20%,DefaultBackend控制组占80%。Vacuum和DefaultBackend控制组配额之和设置应小于100%。
    • -B name

      Backend Cgroups名称,仅可指定“-u”参数来更新此Cgroups的资源配额。

      -b percent和-B backendname参数共同作用来控制数据库后备线程的资源比例。

      取值范围:字符串,最长为64个字节。

    • -c

      创建Cgroups并指定其标识。

      普通用户指定“-c”和“-S classname”可以创建新的Class Cgroups,如果再指定“-G groupname”则创建属于Class Cgroups的Workload Cgroups,新的Workload Cgroups位于Class Cgroups的最底层(4层是最底层)。

    • -d

      删除Cgroups及标识。

      普通用户指定“-d”和“-S classname”可以删除已有的Class Cgroups,如果再指定“-G groupname”则删除属于Class Cgroups的Workload Cgroups,并将附属的线程重置到“DefaultClass:DefaultWD:1”Cgroups中;若删除的Workload Cgroups位于Class Cgroups的高层(1层是最高层),则需调整低层的Cgroups的层级,重建新的Cgroups附属的线程加载到新的Cgroups。

    • -E data

      设定异常阈值,目前阈值包括:blocktime、elapsedtime、allcputime、spillsize、broadcastsize以及qualificationtime和cpuskewpercent,指定多个阈值时用“,”分隔。参数值0表示取消设置,设置不合法的值时会提示。

      表 2 异常阈值类型

      异常阈值类型

      说明

      取值范围(0表示取消设置)

      支持的异常操作

      blocktime

      作业的阻塞时间,单位秒。包括全局并发排队以及局部并发排队的总时间。

      0~UINT_MAX

      abort

      elapsedtime

      作业的已被执行时间,单位秒。从开始执行到当前所消耗的时间。

      0~UINT_MAX

      abort

      allcputime

      作业在所有DN上执行时所耗费的CPU总时间,单位秒。

      0~UINT_MAX

      abort,penalty

      cpuskewpercent

      作业在DN上执行时的CPU时间的倾斜率,依赖于qualificationtime的设置。

      0~100

      abort,penalty

      qualificationtime

      检查作业执行cpu倾斜率的间隔时间,单位秒,需同cpuskewpercent一起设置。

      0~UINT_MAX

      none

      spillsize

      作业在DN上下盘的数据量,单位MB。

      0~UINT_MAX

      abort

      broadcastsize

      作业在DN上算子大表广播数据量,单位MB。

      0~UINT_MAX

    • -h [—help]

      显示命令帮助信息。

    • -H

      用户环境中$GAUSSHOME信息。

      取值范围:字符串,最长为1023个字符。

    • -f

      设置Gaussdb控制组使用的核数范围,范围必须是a-b或a的形式。其他控制组可以使用—fixed进行设置核数范围。

    • —fixed

      设置控制组使用的核数范围比例占上一层级的百分比或者设置IO资源。

      设置核数范围比例时—fixed设置核数范围与’-s’ ‘-g’ ‘-t’ ‘-b’ 一起使用。

      核数比例范围0-100,同一层级的核数比例总和小于或者等于100,0代表核数与上一层级相同,对于所有的控制组,CPU限额默认设置为0。-f和—fixed不能同时设置。设置—fixed之后,-f设置的范围自动失效。设置的比例以quota值在-p中进行显示。

      设置IO资源配额时,与’-R’ ‘-r’ ‘-W’ ‘-w’一起使用。

    • -G name

      指定Workload Cgroups的名称,需同时指定“-S classname”参数来表示该group属于哪个Class Cgroups;可以连同“-c”参数创建新的Cgroups、“-d”参数删除此Cgroups及“-u”更新此Cgroups的资源配额;需要注意,此名称不可是Timeshare Cgroups的默认名称,如“Low”、“Medium”、“High”或“Rush”。

      如果用户自己创建Workload控制组,指定名称时不能指定带 ‘:’ 的名称。不能创建同名控制组。

      取值范围:字符串,最长为28个字节。

    • -N [—group] name

      可以将组名简写成class:wg。

    • -p

      显示Cgroups配置文件的信息。

    • -P

      显示Cgroups树形结构信息。

    • —penalty

      对满足设定的异常阈值的作业执行降级动作,如果没有设定任何操作,则该操作将为默认操作。

    • -r data

      仅用于更新I/O资源读数据上限,用于设置“blkio.throttle.read_bps_device”的数值;为字符串类型,该字符串由“major:minor value”构成,其中major为要访问的磁盘的主设备号,minor为要访问的磁盘的次设备号,value为设备每秒读操作次数上限数值,取值范围为0 ~ ULONG_MAX,其中取值0用来初始化此字段为空;需和“-u”参数及Cgroups名称一同使用;如果Class Cgroups和Workload Cgroups的名称同时指定,则只应用到Workload Cgroups。

      取值范围:字符串,最长为32个字符。

    • -R data

      仅用于更新IO资源每秒读操作次数上限,用于设置“blkio.throttle.read_iops_device”的数值;取值信息同“-r”参数;需和“-u”参数及Cgroups名称一同使用;如果Class Cgroups和Workload Cgroups的名称同时指定,则只应用到Workload Cgroups。

      取值范围:字符串,最长为32个字符。

    • —recover

      仅用于回退Class控制组和Workload控制组的增删改操作,且只能回退一步。

    • —revert

      恢复控制组为默认状态。

    • -D mpoint

      指定的挂载点,默认的挂载点“/dev/cgroup/subsystem”。

    • -m

      挂载cgroup。

    • -M

      取消挂载cgroup。

    • -U

      数据库用户名称。

    • —refresh

      刷新控制组状态。

    • -s pct

      指定Class Cgroups的资源占用“Top Class”Cgroups资源的百分比,需同时指定“-S classname”参数;用于创建“-c”或更新“-u”Class Cgroups。

      取值范围为1-99。默认Class控制组的CPU配额设置为20%,R6C10版本中,Class控制组的CPU配额设置为40%,升级过程中,不会对此配额做更新。新创建的Class控制组的CPU配额以及默认的DefaultClass之和应小于100%。

    • -S name

      指定Class group的名称;可以连同“-c”参数创建新的Cgroups、“-d”参数删除此Cgroups及“-u”更新此Cgroups的资源配额。创建子Class名称不能带‘:’。

      取值范围:字符串,最长为31个字节。

    • -t percent

      指定Top Cgroups(Root、Gaussdb:omm、Backend和Class Cgroups)占用资源的百分比,需同时指定“-T name”参数。若指定“-T Root”所在的Cgroups,其在Cgroups配置文件中显示的名称为“Root”,此数值代表的含义是blkio.weight值的百分比,最小值为10%,CPU资源配额如cpu.shares的数值不可修改;若指定“Gaussdb:omm” Cgroups,则表示占用整个系统CPU资源的百分比(可根据Root Cgroups的默认CPU配额1024得出该组的cpu.shares数值,此数值默认当前系统仅含有1套数据库环境),对于IO资源配额为1000,不再变化;若指定“Class”或“Backend”Cgroups,则表示资源占用“Gaussdb”Cgroups资源的百分比。

      取值范围为1 ~ 99。默认Class控制组配额为60%, Backend控制组配额为40%。修改Class控制组配额,同时会自动更新Backend控制组配额,使两者之和保持100%。

    • -T name

      指定Top Cgroups的名称。

      取值范围:字符串,最长为64个字节。

    • -u

      更新Cgroups。

    • -V [—version]

      显示gs_cgroup工具的版本信息。

    • -w data

      仅用于更新I/O资源每秒写数据上限,用于设置“blkio.throttle.write_bps_device”的数值。取值信息同“-r”参数,需和“-u”参数及Cgroups名称一同使用。如果Class Cgroups和Workload Cgroups的名称同时指定,则只应用到Workload Cgroups。

      取值范围:字符串,最长为32个字符。

    • -W data

      仅用于更新IO资源每秒写操作次数上限,用于设置“blkio.throttle.write_iops_device”的数值。取值信息同“-r”参数,需和“-u”参数及Cgroups名称一同使用。如果Class Cgroups和Workload Cgroups的名称同时指定,则只应用到Workload Cgroups。

      取值范围:字符串,最长为32个字符。

    1. > df
    2. Filesystem 1K-blocks Used Available Use% Mounted on
    3. /dev/sda1 524173248 41012784 456534008 9% /
    4. devtmpfs 66059264 236 66059028 1% /dev
    5. tmpfs 66059264 88 66059176 1% /dev/shm
    6. /dev/sdb1 2920486864 135987592 2784499272 5% /data
    7. /dev/sdc1 2920486864 24747868 2895738996 1% /data1
    8. /dev/sdd1 2920486864 24736704 2895750160 1% /mpp
    9. /dev/sde1 2920486864 24750068 2895736796 1% /mpp1

    须知: 这里一定要查sdd的磁盘号,不能是sdd1的磁盘号。否则执行时会报错。 如果更新IO的限额配置信息超过了可允许的最大配置字串,则新的更新不存储在配置文件中。如当前设置的字串长度为96,更新IO的磁盘数量大于8个,则有可能超出字串限制,更新成功,但是不存储在配置文件中。