starrocks资源组关于cpu限制的小tips
版本说明
3.3.5是一个分水岭
对于cpu的限制有几个容易混淆的参数cpu_core_limit、 type=short query 、cpu_weight、 exclusive_cpu_cores
具体来说3.3.5之前有cpu_core_limit、short_query ,但没有cpu_weight和exclusive_cpu_cores
cpu_weight和exclusive_cpu_cores 3.3.5才开始支持的。
3.3.5版本以前
早期参数cpu_core_limit
早期cpu_core_limit用一个参数表达两种不同的隔离语义,虽然在功能上实现了需求,但在用户理解和使用上造成了一些困扰:
-
语义混淆:同一个参数
cpu_core_limit,在normal组里代表“比例”,在short_query组里却代表“绝对值”,很容易让使用者感到困惑。 -
配置困难:对于管理员来说,需要明确知道两种类型资源组背后的不同计算逻辑,才能正确地进行配置。
为了解决上述问题,StarRocks 从 v3.3.5 版本开始,对 CPU 资源管理的参数进行了重构和拆分。
-
cpu_weight(新):完全继承了旧cpu_core_limit在normal资源组中的语义,专用于软隔离,代表 CPU 的调度权重。 -
exclusive_cpu_cores(新):完全继承了旧cpu_core_limit在short_query资源组中的语义,专用于硬隔离,代表物理独占的 CPU 核心数。
为了保持向后兼容,你在早期版本中使用
cpu_core_limit创建的资源组,在升级到新版本后,系统会自动将其转换为新的参数形式。
-
早期版本:
cpu_core_limit是一个“多功能”参数,负责表达 CPU 软硬隔离两种策略,虽然有效,但不够清晰。 -
新版本 (v3.3.5+):这个参数被正式“拆分”为两个职责更单一、语义更清晰的新参数:
-
cpu_weight:负责软隔离 (原normal组行为)。 -
exclusive_cpu_cores:负责硬隔离 (原short_query组行为)。
-
类型为short_query的资源组
StarRocks 3.3.5 版本之前,资源组有一个 type 参数可以设置为 short_query。但是,从 3.3.5 版本开始,type 参数已经被废弃,并被 exclusive_cpu_cores 参数取代。
资源组的类型 type 支持 short_query 与 normal。
-
默认为
normal资源组,无需通过type参数指定。 -
当
short_query资源组有查询正在运行时,当前 BE 节点会为其预留short_query.cpu_core_limit的 CPU 资源,即所有normal资源组的总 CPU 核数使用上限会被硬限制为 BE 节点核数 -short_query.cpu_core_limit。 -
当
short_query资源组没有查询正在运行时,所有normal资源组的 CPU 核数没有硬限制。
注意
您最多只能创建一个
short_query资源组。StarRocks 不会硬限制
short_query资源组的 CPU 资源。
类型为short_query的资源组只能有一个

如果你在 3.3.5 及更高版本中创建资源组时使用了 type = 'short_query',系统可能会将其视为一个独占资源组,并自动将 exclusive_cpu_cores 的值设置为等于 cpu_weight 的值。换句话说,type='short_query' 的语义现在等同于设置了 exclusive_cpu_cores。
如果在3.3.5之后的使用type=short_query, 那么对cpu的限制应使用cpu_weight或cpu_core_limit,会同时将cpu_weight、 exclusive_cpu_cores设置好。在type=short_query中绝对不能使用exclusive_cpu_cores会报错


在type=short_query资源组中如果直接用exclusive_cpu_cores参数则会直接报错。因为早期3.3.5版本之前没有 没有exlucsive_cpu_cores参数

3.3.5版本以后
cpu_weight 参数
3.3.5以前名称为cpu_core_limit
假设一台单机的starrocks cpu核心为4核
cpu_weight:该资源组在一个 BE 节点上调度 CPU 的权重。
取值范围(0, avg_be_cpu_cores] (大于 0 时生效)
虽然取值中的数值代表的权重 但是也不能超过所有be的平均cpu核数
如果只有一个资源组不管取值数字是多少 均可独占所有cpu

exclusive_cpu_cores参数
自 v3.3.5 起,StarRocks 支持对 CPU 资源进行硬隔离。
在 v3.3.5 之前,StarRocks 支持设置 type 为 short_query 类型的资源组。目前,该参数已经被废弃,由 exclusive_cpu_cores 所代替。对于已有的该类型的资源组,在集群升级至 v3.3.5 后,系统会将其替换为 exclusive_cpu_cores 值等于 cpu_weight 的 Exclusive 资源组。
在 StarRocks 3.3.5 版本之前,当 type 参数存在且可以设置为 short_query 时,是没有 exclusive_cpu_cores 这个参数的。
exclusive_cpu_cores 参数是作为 type 参数的替代品,在 3.3.5 版本及以后引入的。
-
自动转换: 如果你在 3.3.5 及更高版本中创建资源组时使用了
type = 'short_query',系统可能会将其视为一个独占资源组,并自动将exclusive_cpu_cores的值设置为等于cpu_weight的值。换句话说,type='short_query'的语义现在等同于设置了exclusive_cpu_cores。 -
建议使用新参数: 尽管不报错,但强烈建议你使用新的
exclusive_cpu_cores参数来配置独占资源组,而不是使用已废弃的type参数。这样可以确保你的配置与最新版本的功能和最佳实践保持一致,并避免未来版本中可能完全移除type参数而导致的潜在问题。
exclusive_cpu_cores:该资源组的 CPU 硬隔离参数。
取值范围(0, min_be_cpu_cores - 1] (大于 0 时生效)
即所有资源组的exclusive_cpu_cores参数的值加起来不能超过所有be中最小cpu核数-1

不要对type=short_query类型的资源组使用exclusive_cpu_cores,因为3.3.5版本以前没有exclusive_cpu_cores参数,3.3.5版本以后又废弃了type参数。所以要么用short_query+cpu_core_limit ,要么直接用exclusive_cpu_cores不要type

cpu_weight 和 exclusive_cpu_cores 有且仅有一个为正数,即有且仅有一个生效。
short_query + cpu_core_limit vs exclusive_cpu_cores 核心差异
-
short_query.cpu_core_limit(旧行为): 当short_query资源组有查询运行时,所有普通资源组的 CPU 限制变为BE vCPU cores - short_query.cpu_core_limit。这意味着short_query资源组会“占用”一部分 CPU 核心,而剩余的核心由普通组按比例共享。如果short_query资源组空闲,其资源可以被普通组使用。 -
exclusive_cpu_cores(新行为):-
独占性: 为资源组保留指定数量的 CPU 核心,即使这些核心空闲,其他资源组也无法使用。
-
配额: 限制资源组只能使用这些保留的 CPU 核心,不能使用其他组的可用 CPU 资源。
-
借用: 可以通过 BE 配置
enable_resource_group_cpu_borrowing来控制共享资源组是否可以从独占资源组借用空闲的独占核心(默认为true)。
-
总结
来自ai
tarRocks 3.3.5 版本之前和之后,资源隔离中 cpu_core_limit、cpu_weight、type 为 short_query 以及 exclusive_cpu_cores 之间的联系和关系确实有所变化,下面我来帮你理清一下:
3.3.5 版本之前:
-
cpu_core_limit: 在 3.3.5 版本之前,cpu_core_limit用于指定资源组在 BE 节点上的 CPU 调度权重。它决定了该资源组可以获得的 CPU 时间的相对份额。 -
short_query资源组:short_query资源组是一种特殊的资源组类型,通常用于处理短查询。它会预留一部分 CPU 核心,以确保短查询的低延迟执行。但是,short_query资源组至少会为普通资源组留下一个 CPU 核心。 -
没有
exclusive_cpu_cores: 在 3.3.5 版本之前,StarRocks 不支持 CPU 的硬隔离,因此没有exclusive_cpu_cores这个参数。CPU 的分配主要是通过cpu_core_limit进行软调度。
3.3.5 版本之后:
-
cpu_weight替代cpu_core_limit: 从 3.3.5 版本开始,cpu_weight替代了cpu_core_limit。它的作用和之前的cpu_core_limit相同,都是指定资源组在 BE 节点上的 CPU 调度权重,决定了该资源组可以获得的 CPU 时间的相对份额。 -
引入
exclusive_cpu_cores: 3.3.5 版本引入了exclusive_cpu_cores参数,用于实现 CPU 的硬隔离。-
独占性:
exclusive_cpu_cores会为该资源组预留指定数量的 CPU 核心,这些核心即使空闲,其他资源组也无法使用。 -
配额限制: 资源组只能使用这些预留的 CPU 核心,不能使用其他资源组的可用 CPU 资源。
-
互斥性:
cpu_weight和exclusive_cpu_cores只能有一个生效,不能同时设置。 -
总数限制: 所有资源组的
exclusive_cpu_cores之和不能超过min_be_cpu_cores - 1,至少保留一个共享核心。
-
-
short_query资源组的变化:short_query资源组仍然存在,但其与exclusive_cpu_cores的关系需要注意。如果short_query资源组配置了exclusive_cpu_cores,那么它将拥有独占的 CPU 核心。如果未配置,它将继续作为共享资源组,与其他共享资源组一起竞争 CPU 资源,并受cpu_weight的影响。 -
enable_resource_group_cpu_borrowing: 引入了这个 BE 配置项,默认值为true。当设置为true时,共享资源组可以在独占资源组空闲时借用其 CPU 资源。
总结一下关键点:
-
版本前:
cpu_core_limit(软调度) 和short_query(预留但非硬隔离) 是主要的 CPU 资源管理方式。 -
版本后:
-
cpu_weight(软调度) 替代了cpu_core_limit。 -
exclusive_cpu_cores引入了 CPU 硬隔离,提供了独占和配额限制。 -
cpu_weight和exclusive_cpu_cores互斥,只能选择一种方式进行 CPU 资源分配。 -
short_query资源组可以结合exclusive_cpu_cores实现硬隔离,也可以继续作为共享资源组。 -
enable_resource_group_cpu_borrowing允许共享资源组借用空闲的独占核心。
-
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)