yarn中的cgroup调度

来源:互联网 发布:烟台南山学院教务网络 编辑:程序博客网 时间:2024/05/19 20:59
cgroup控制cpu,/proc/mounts下有一个/sys/fs/cgroup/cpu配置路径,此部分是cgroup用来控制cpu隔离的路径配置。
在/sys/fs/cgroup/cpu下添加子路径hadoop-yarn,这个路径是yarn用来控制cpu的隔离的根路径
   通过yarn.nodemanager.linux-container-executor.cgroups.hierarchy配置。
每一个container启动时根据container的名称在根路径下创建子路径来控制这个container的cpu资源

yarn的cgroup控制:
  cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。
  这里的 cfs 是完全公平调度器的缩写。
  cpu.cfs_period_us 就是时间周期(每个cpu core),默认为 1000000,即1秒。
  cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。
  cpu.cfs_quota_us 的值在单core的情况下小于或等于cpu.cfs_period_us的值,在多core的情况下大于这个值。

  配置项:yarn.nodemanager.resource.percentage-physical-cpu-limit,默认值100,表示不显示cpu资源。
    这个配置用于限制yarn对当前的nodemanager的物理内存的使用百分比,通过这个配置与cpu的逻辑core进行乘法,得到可用的cpu的core.

  如果配置有对cpu使用的阀值时,对yarn的根路径的cgroup的控制:
    按1000*1000微秒为cpu的调度周期除以cpu的可用的core的个数,
      得到yarn的根路径的cpu.cfs_period_us的值,这是每个core的cpu调度周期(最小调度周期为1000微秒)。
      cpu.cfs_period_us与cpu.cfs_quota_us值的计算:
        在yarn中按1000*1000微秒来划分一次cpu的时间片调度周期.
        =>如果可使用的cpu core的个数小于1 core,这个时候cpu.cfs_period_us的值必须大于cpu.cfs_quota_us的值
          cpu.cfs_period_us的值为1000*1000微秒
          cpu.cfs_quota_us的值为(1000*1000微秒)/可用的cpu core的个数,如果这个值小于1000,设置这个值为1000
        =>如果可使用的cpu core的个数大于或等于1 core时,
          cpu.cfs_period_us的值是一个小于或等于cpu.cfs_quota_us的值,由(1000*1000微秒)/可用的cpu core的个数得到
          cpu.cfs_quota_us的值为1000*1000微秒
          如果计算出来cpu.cfs_period_us的值小于1000微秒时,设置cpu.cfs_period_us的值为1000,同时设置cpu.cfs_quota_us的值为-1
        =>最后说下:
          如果cpu core是10时,那么每个cpu core的period_us的周期为100ms,quota_us是1s,
            也就是说这个任务可以在每个cpu core中跑100ms的时间周期

  
  yarn中cgroup针对每个container的cpu控制:
    cpu.shares=>用于分配cpu执行的权重,按1024*container的vcore的个数来得到cpu的执行权重
                如:一个container分配2core,一个conainer分配3core,那么他们的执行权重为2:3
    cpu.cfs_period_us与cpu.cfs_quota_us的值,默认使用根路径的值.
       =>如果yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage配置为true时,默认为false.
             这个配置用于控制是否根据nodemanager配置的vcore来计算container分配的vcore的实际可使用cpu core.
         (实际可用的cpu core的个数)=计算(container分配的vcore的个数*可用的cpu的core的个数)/nm配置的vcore的个数
             nm配置vcore的配置项:yarn.nodemanager.resource.cpu-vcores,默认值8(可根据实际情况来进行分配).
       
      
         cpu.cfs_period_us与cpu.cfs_quota_us的计算公式
           =>(实际可用的cpu core的个数)小于1 core:
             cpu.cfs_period_us的值为1000*1000微秒
             cpu.cfs_quota_us的值为(1000*1000微秒)/(实际可用的cpu core的个数),如果这个值小于1000,设置这个值为1000
           =>(实际可用的cpu core的个数)大于或等于1 core:
             cpu.cfs_period_us的值是一个小于或等于cpu.cfs_quota_us的值,由(1000*1000微秒)/(实际可用的cpu core的个数)
             cpu.cfs_quota_us的值为1000*1000微秒
             =>如果计算出来cpu.cfs_period_us的值小于1000微秒时:
              设置cpu.cfs_period_us的值为1000,同时设置cpu.cfs_quota_us的值为-1
原创粉丝点击