Greenplum中的进程优先级(PR、NI)

0    74    1

Tags:

👉 本文共约4574个字,系统预计阅读时间或需18分钟。

GP 集群混部简介

目前 GP 集群资源使用率大部分时间是比较低的,而服务器配置的资源较高,这样就造成资源浪费,现可以通过混部的模式,在 GP 集群上使用 docker 混部 storm、nodemanager 等应用,充分使用集群资源,但是混部在集群资源紧张、进程较多的时候会影响 GP 的使用,导致大量的时间都在进程切换,cpu 的 nice 值增高。因此需要调整 GP 集群进程的 nice 值,来优化 GP 集群混部。

进程优先级说明

Greenplum中的进程优先级(PR、NI)

Greenplum中的进程优先级(PR、NI)

top命令栏中ni的53.6%表示用户进程空间内改变过优先级的进程占用CPU百分比(被调整过nice值的进程占用的CPU使用率),若该值过高,那就是进程可能频繁调换优先级,则需要调整进程的优先级来优先获取CPU资源。进程都有优先级的,如果调节优先级,需要耗费cpu的时间段的,那就消耗这个ni

CPU管理进程的是按照时间片的方式来划分CPU的资源。CPU可以把1s划分成若干份,轮询时间片。通过设置进程的优先级,让某些重要的进程优先并且长时间获取CPU资源。
手段是设置进程的优先级的方式,进程尽可能多获取CPU的资源,分为静态优先级和动态优先级。

静态优先级:-20到19 共40个优先级。默认的,进程继承其父进程的nice级别,通常为0。nice值越高,优先级越低;nice值越低,优先级越高。
动态优先级:1-99

  • PRI(PR) :Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。0-99 表示实时进程,100-139 表示普通进程,他们采用的调度算法是不一样的,实时进程更容易获取 cpu 时间片。普通进程的动态优先级可以通过静态优先级计算获得,动态优先级=max(100,min(静态优先级-bonus+5,139)),其中 bonus 则是惩罚因子,依赖进程过去运行的情况和进程平均睡眠时间相关,如果小于 5,则表示降低动态优先级,大于 5 则增加动态优先级以示嘉奖。
  • NI :进程 Nice 值,代表这个进程的优先值;取值范围-20~19,调整该值越低,静态优先级越高,获取的 cpu 时间片就越长
  • 静态优先级:静态优先级的取值范围也是 [0-139],其中 PR 中的 100 to 139 值部分有这么一个对应 PR = 20 + (-20 to +19),这里的 -20 to +19 便是 nice 值,所以说两个虽然都是优先级,而且有千丝万缕的关系,但是他们的值,他们的作用范围并不相同。

PRI 是比较好理解的,即进程的优先级,或者通俗点说就是进程被 CPU 执行的先后顺序,此值越小进程的优先级别越高。那 NI 呢?就是我们所要说的 nice 值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI 值越小越快被执行,那么加入 nice 值后,将会使得 PRI 变为:PRI(new)=PRI(old)+nice。由此看出,PR 是根据 NICE 排序的,规则是 NICE 越小 PR 越前(小,优先权更大),即其优先级会变高,则其越快被执行。如果 NICE 相同则进程 uid 是 root 的优先权更大。在 LINUX 系统中,Nice 值的范围从-20 到 +19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级具有最高优先级的进程,其 nice 值最低,所以在 LINUX 系统中,值-20 使得一项任务变得非常重要;与之相反,如果任务的 nice 为 +19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的 CPU 时间的更大使用份额,这也就是 nice 的名称的来意。进程在创建时被赋予不同的优先级值,而如前面所说,nice 的值是表示进程优先级值可被修正数据值,因此,每个进程都在其计划执行时被赋予一个 nice 值,这样系统就可以根据系统的资源以及具体进程的各类资源消耗情况,主动干预进程的优先级值。

在通常情况下,子进程会继承父进程的 nice 值,比如在系统启动的过程中,init 进程会被赋予 0,其他所有进程继承了这个 nice 值(因为其他进程都是 init 的子进程)。对 nice 值一个形象比喻,假设在一个 CPU 轮转中,有 2 个 runnable 的进程 A 和 B,如果他们的 nice 值都为 0,假设内核会给他们每人分配 1k 个 cpu 时间片。但是假设进程 A 的为 0,但是 B 的值为-10,那么此时 CPU 可能分别给 A 和 B 分配 1k 和 1.5k 的时间片。故可以形象的理解为,nice 的值影响了内核分配给进程的 cpu 时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。%nice,就是改变过优先级的进程的占用 CPU 的百分比,如上例中就是 0.5k/2.5k=1⁄5=20%。 由此可见,进程 nice 值和进程优先级不是一个概念,但是进程 nice 值会影响到进程的优先级变化。

进程优先级查看

查看进程优先级的方法: top 命令

使用 top 命令可以查看到 PR 和 NI 选项

PR 取值范围为 [0,39] 表示用户可通过 nice 值调整那部分区域,即 [100,139],表示的是静态优先级范围,如果该值显示为 rt 则表示为实时进程

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Greenplum中的进程优先级(PR、NI)后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部