2.2.3 Go语言的抢占式调度
Go 语⾔的抢占式调度 曹春晖 资深 Gopher ⽬ 录 Go 程序的启动 01 GMP 的本质 02 调度循环的实现 03 ⽼版本的抢占实现 04 新版本的抢占实现 05 当前的 Go 语⾔还有哪些问题 06 Go 程序的启动 第⼀部分 编译过程 Go 程序 hello.go 的编译过程: ⽂本 -> 编译 -> ⼆进制可执⾏⽂件 编译过程 编译:⽂本代码 -> page-id=5106%3A2&node- id=5106%3A3&scaling=scale-down 何时需要抢占 什么时候 我们需要抢占⼀个 正在执⾏(running)的 G 呢? 抢占的触发时机-GC STW gcStart STW preemptall preemptone 抢占的触发时机-栈扫描 markroot scan stack set preempt flag suspendG scanstack resumeG 抢占的触发时机-后台监控 sysmon retake preemptone ⽼版本的抢占实现 第四部分 preemptone 函数只做标记⼯作 preemptone 本质是将正在 P 上执⾏的 M 的 curg 的标志位置为 true 这之后的流程需要正在运⾏的 goroutine 来配合 协作式抢占的“协作”过程 检查当前栈空间是否⾜够,不够的话,需要申请新的栈空间0 码力 | 44 页 | 7.43 MB | 1 年前3Kubernetes开源书 - 周立
18-Daemon Set 19-配置最佳实践 20-管理容器的计算资源 21-Kubernetes资源分配 22-将Pod分配到Node 23-容忍与污点 24-Secret 25-Pod优先级和抢占 26-Service 27-Ingress Resources 28-动态⽔平扩容 29-实战:使⽤K8s编排Wordpress博客 2 简介 Kubernetes开源书。不啰嗦了,JUST Preemption(Pod优先级和抢占) 本节把priority翻译成优先级,Preemption翻译成抢占。 特性状态: Kubernetes v1.8 alpha 在Kubernetes 1.8或更⾼版本中,Pods 有priority的概念。priority表示某个Pod相对于其他Pod的重要性。当⼀个Pod不 能被调度时,Scheduler试图抢占(驱逐)较低priority的P od,从⽽使调度处于pending状态的Pod成为可能。 在未来的 Kubernetes版本中,priority还将影响Node上资源的驱逐排序。 注意:抢占不遵守PodDisruptionBudget;有关详细信息,请参阅 the limitations section 。 How to use priority and preemption(如何使⽤优先级和抢 占) 要在Kubernetes0 码力 | 135 页 | 21.02 MB | 1 年前3OpenShift Container Platform 4.9 节点
2.9.1.1. Pod 优先级类 2.9.1.2. Pod 优先级名称 2.9.2. 了解 pod 抢占 2.9.2.1. 非抢占优先级类(技术预览) 2.9.2.2. Pod 抢占和其他调度程序设置 2.9.2.3. 安全终止被抢占的 pod 2.9.3. 配置优先级和抢占 2.10. 使用节点选择器将 POD 放置到特定节点 2.10.1. 使用节点选择器控制 pod 放置 如果系统中至少有 minAvailable 个 pod 正在运行,则 PodDisruptionBudget 被视为是健康的。超过这 一限制的每个 pod 都可被驱除。 注意 注意 根据您的 pod 优先级与抢占设置,可能会无视 pod 中断预算要求而移除较低优先级 pod。 2.3.3.1. 使用 使用 pod 中断 中断预 预算指定必 算指定必须 须在 在线 线的 的 pod 数量 数量 您可以使用 POD 优先级 您可以在集群中启用 pod 优先级与抢占功能。pod 优先级指明 pod 相对于其他 pod 的重要程度,并根据 这个优先级对 pod 进行队列处理。pod 抢占允许集群驱除或抢占较低优先级 pod,以便在合适的节点 pod 上没有可用空间时,可以调度优先级较高的 pod,并影响节点上资源不足驱除顺序。 要使用优先级和抢占功能,您需要创建优先级类来定义 pod 的相对权重。然后,在0 码力 | 374 页 | 3.80 MB | 1 年前3OpenShift Container Platform 4.6 节点
了解 pod 优先级 2.9.1.1. Pod 优先级类 2.9.1.2. Pod 优先级名称 2.9.2. 了解 pod 抢占 2.9.2.1. Pod 抢占和其他调度程序设置 2.9.2.2. 安全终止被抢占的 pod 2.9.3. 配置优先级和抢占 2.10. 使用节点选择器将 POD 放置到特定节点 2.10.1. 使用节点选择器控制 pod 放置 第 第 3 章 章 控制 如果系统中至少有 minAvailable 个 pod 正在运行,则 PodDisruptionBudget 被视为是健康的。超过这 一限制的每个 pod 都可被驱除。 注意 注意 根据您的 pod 优先级与抢占设置,可能会无视 pod 中断预算要求而移除较低优先级 pod。 2.3.3.1. 使用 使用 pod 中断 中断预 预算指定必 算指定必须 须在 在线 线的 的 pod 数量 数量 您可以使用 您可以在集群中启 启用 用 pod 优 优先 先级 级与 与抢 抢占功能。 占功能。pod 优 优先 先级 级指明 指明 pod 相 相对 对于其他 于其他 pod 的重要程度,并根 的重要程度,并根 据 据这 这个 个优 优先 先级对 级对 pod 进 进行 行队 队列 列处 处理。 理。pod 抢 抢占允 占允许 许集群 集群驱 驱除或 除或抢 抢占 占较 较低 低优 优先 先级 级 pod,以便在合适的0 码力 | 404 页 | 3.60 MB | 1 年前3openEuler 22.03-LTS 技术白皮书
。 面向未来,社区将持续创新、社区共建、繁荣生态,夯实数字基座。 引领内核创新 • 云原生调度增强:针对云场景在线和离线业务混合部署场景,创新 CPU 调度算法,保障在线业务对 CPU 的实时抢占 及抖动抑制,创新业务优先级 OOM 内存回收算法,保障在线业务安全可靠运行。 • 新文件系统 EulerFS:面向非易失性内存的新文件系统,采用软更新、目录双视图等技术减少文件元数据同步时间, 内核构建,在此基础上,同时吸收了社区高版本的有益特性及社区创新 特性: • 进程调度优化:优化进程负载均衡算法,减少负载均衡过程中的开销,提升性能。 • 内核动态抢占:新增启动选 preempt=none/voluntary/full,允许内核动态切换抢占模式。 • mremap 性能优化:通过移动 PMD/PUD 级别的表项,加速映射大块内存的速度。 • per memcg lru lock:采用 per 任务对 CPU 的快速抢占,确定性的调度运行,同时控制离线任务干扰。 优化 OOM 时内存回收调度算法,在发生 OOM 时,优先对低优先级的进程组进行内存回收,保障在线业务的正常运行。 针对 Kubernetes 集群下的混合部署,openEuler 用户仅需给业务打上在线或离线的标签,系统即能自动感知业务的 创建,并根据业务的优先级配置,实现资源的隔离和抢占。 功能描述 1. 进程属性设置:支持通过0 码力 | 17 页 | 6.52 MB | 1 年前3openEuler 22.09 技术白皮书
础。 面向未来,社区将持续创新、社区共建、繁荣生态,夯实数字基座。 引领内核创新 • 云原生调度增强:针对云场景在线和离线业务混合部署场景,创新 CPU 调度算法保障在线业务对 CPU 的实时抢占及 抖动抑制,创新业务优先级 OOM 内存回收算法保障在线业务安全可靠运行。 • 新文件系统 EulerFS:面向非易失性内存的新文件系统,采用软更新、目录双视图等技术减少文件元数据同步时间,提 相比,对高可靠内存支持更加完善。 • 内存 RAS - UCE 容错增强:支持 copy_from_user 读操作时,发生内存多 bit 错误,可以通过杀掉受影响的进程,而避 免内核复位。 • 可编程内核调度框架抢占、选核、选任务部分实现及示例。 • 基于 BPF 实现内核缓存,可以大幅提升 Redis 性能。 • 支持 AArch64 SME (Scalable Matrix Extension):ME 是下一代 标签管理机制,开放对任务和任务组进行标签标记的能力,用户和内核子系统可通过接口对特定工作负载进行标记,调 度器通过标签可以感知特定工作负载的任务。 2. 支持抢占、选核、选任务等功能点的策略扩展,可编程调度框架支持 CFS 调度类抢占,选核,选任务等功能的策略扩展, 提供精心设计的扩展点和丰富的辅助方法,帮助用户简单,高效的扩展策略。 功能描述 hook export User programmable0 码力 | 13 页 | 1.39 MB | 1 年前3OpenShift Container Platform 4.14 机器管理
系列机器类型。 验证 验证 在 Google Cloud 控制台中,查看机器集部署的机器的详情,并验证 Confidential VM 选项是否与 您配置的值匹配。 2.5.5. 将机器部署为可抢占虚拟机实例的机器集 您可以通过创建一个在 GCP 上运行的计算机器集来节约成本,该 MachineSet 将机器部署为非保障的虚 apiVersion: machine.openshift.io/v1beta1 拟机实例。抢占虚拟机实例使用了超额的 Compute Engine 容量,且比一般实例的成本要低。您可以将抢 占虚拟机实例用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。 GCP Compute Engine 可随时终止可抢占的虚拟机实例。Compute Engine 向用户发送抢占通知,表示会 在 30 秒内发生中断。当 Compute Engine 发出抢占通知时,OpenShift Mechanical Off 信号会在 30 秒后发送到操作 系统。然后,抢占虚拟机实例由 Compute Engine 转换为 TERMINATED 状态。 使用抢占虚拟机实例时可能会出现中断,理由如下: 有系统或维护事件 提供的抢占虚拟机实例减少 该实例为抢占虚拟机实例到达分配的 24 小时期限的结束 当 GCP 终止一个实例时,在可抢占虚拟机实例节点上运行的终止处理器会删除机器资源。为了满足计算0 码力 | 277 页 | 4.37 MB | 1 年前3openEuler 21.09 技术白皮书
入式领域竞争力探索,打造全场景协同的面向数字基础 设施的开源操作系统。 引领内核创新 云原生调度增强:针对云场景在线和离线业务混合部署场景,创新 CPU 调度算法保障在线业务对 CPU 的实时抢占及抖动 抑制,创新业务优先级 OOM 内存回收算法保障在线业务安全可靠运行。 • 新文件系统 EulerFS:面向非易失性内存的新文件系统,采用软更新、目录双视图等技术减少文件元数据同步时间, 05 06 07 08 09 10 11 12 进程调度优化:优化进程负载均衡算法, 减少负载均衡过程中的开销,提升性能; 内核动态抢占:新增启动选 preempt=none/voluntary/full,允许 内核动态切换抢占模式。 mremap 性能优化:通过移动 PMD/PUD 级别的表项,加速映射大块内存的速度。 per memcg lru lock: 采用 的快速抢占,确定性的调度运行,同时压制离线任务干扰。 优化 OOM 时内存回收调度算法,在发生 OOM 时,优先对低优先级的进程组进行内存回收,保障在线业务的正常运行。 功能描述 1. 进程属性设置:支持通过 cgroup 接口来设置任务运行级别,可以配置成在线或离线属性。 2. 任务优先运行:在 cpu 中有在线任务和离线任务场景下,优先选择在线任务,在线任务可以 us 级抢占离线任务运行。0 码力 | 35 页 | 3.72 MB | 1 年前3MySQL 8.0.17 调优指南(openEuler 20.09)
....................................................................................... 6 3.5 关闭唤醒抢占................................................................................................... 2020-10-15 3 3 操作系统调优 3.1 关闭irqbalance 3.2 网卡中断绑核 3.3 关闭numa_balancing 3.4 关闭sched_autogroup 3.5 关闭唤醒抢占 3.6 网络参数调优 3.7 IO 参数调优 3.8 缓存参数调优 3.9 内核优化 3.10 mysql进程绑核 3.1 关闭 irqbalance 目的 关闭irqbalance,通过手动绑定中断的方法优化性能。 sched_autogroup 目的 关闭sched_autogroup_enabled。 方法 sysctl -w kernel.sched_autogroup_enabled=0 3.5 关闭唤醒抢占 目的 关闭唤醒抢占功能。 方法 echo NO_WAKEUP_PREEMPTION > /sys/kernel/debug/sched_features 3.6 网络参数调优 目的 对于不同的操0 码力 | 11 页 | 223.31 KB | 1 年前3openEuler 22.03 LTS SP2 技术白皮书
驱离优先级反转 15 openEuler 22.03 LTS SP2 技术白皮书 内核创新 CPU QoS 优先级负载均衡特性 负载均衡 FIFO 任务迁移队列不区分优先级,无法解决跨核迁移抢占保障高优先级,特别是 CPU 敏感型任务的优先调 度,针对在线、离线容器混部场景下,CFS 负载均衡需要提出一种优先级队列模型,支持高低优先级的 QoS 负载均衡,确 保在线业务能更快得到调度和执行,最大化压制离线任务的 级的 CFS 任务等待队列维护。多核 CPU 负载均衡时,优先从任务等待队列中选择高优先级任务,确保高优先级任务迁移优先得到调度;压制低优先级任务迁移, 减少不必要的低优先级任务上下文切换、唤醒抢占等带来的 QoS 干扰及调度性能开销。 提供用户可配置的接口:/proc/sys/kernel/sched_prio_load_balance_enabled 描述 : 是否开启 CPU QoS 带宽进行限制,以此达到降低整机功耗的同时保障高优先级虚拟机 QoS。 • Cache 及内存带宽控制:支持对低优先级虚拟机的 LLC 和内存带宽进行限制,当前仅支持静态分配。 • CPU 干扰控制:支持 CPU 时间片 us 级抢占及 SMT 干扰隔离,同时具有防优先级反转能力。 • memcg 异步内存回收:支持限制混部时离线应用使用的总内存,并在在线内存使用量增加时动态压缩离线业务内存 使用。 • QuotaBurst0 码力 | 48 页 | 5.62 MB | 1 年前3
共 93 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10