Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[question]qosclass为 LSE和 LSR类型的pod 能使用超卖资源吗? #2299

Open
hamstersox opened this issue Dec 19, 2024 · 8 comments
Open
Labels
area/api-machinery area/koord-scheduler kind/question Support request or question relating to Koordinator

Comments

@hamstersox
Copy link

hamstersox commented Dec 19, 2024

What happened:
问题1: LSE和 LSR类型的pod 能使用超卖资源吗?
因为我发现我配置 koordinator.sh/qosClass: LSR
image

image
但是我pod k8s原生的qosClass 为 BE
image

What you expected to happen:
因为我的环境所有pod qos都预期是 guaranteed。request都很高,但是资源的实际利用率低,我想提高资源的利用率。

Environment:

  • Koordinator version: - v0.6.2
  • Kubernetes version (use kubectl version): v1.22.5
  • docker/containerd version: containerd 1.5.0
  • OS (e.g: cat /etc/os-release): Ubuntu 20.04.4 LTS
  • Kernel (e.g. uname -a): Linux 5.10.112-11.al8.x86_64 ✨ Add NodeMetric API #1 SMP Tue May 24 16:05:50 CST 2022 x86_64 x86_64 x86_64 GNU/Linux

Anything else we need to know:

@hamstersox hamstersox added the kind/question Support request or question relating to Koordinator label Dec 19, 2024
@saintube
Copy link
Member

saintube commented Dec 20, 2024

@hamstersox 您好,这是一个好问题。

  • LSE pods 的资源不能被超卖,因为定义上该 QoS 等级确保了 cpu 核的强隔离,与其他超卖 pods 互斥,反之也不能申请超卖资源。
  • LSR pods 的资源可以被超卖,它的 cpu 核可能和 BE pods 部分共享,但当前 koordinator 不支持绑核超卖,因此 LSR pods 不能申请超卖资源。

您当前提供的 YAML 中,组合使用了 QoS=LSR 和 Batch 资源,这在 koordinator 中是不支持的,因此 LSR 的绑核语义其实没有生效,而是变成了类似 Batch + LS 的模式。
对于您的资源使用场景,可以考虑拆分应用的优先级为 Prod、Batch 进行在离线混部超卖;对于优先级不可分的场景,我们也提供了节点资源放大和 Mid 资源超卖等机制,正在建设中,感兴趣的话可以了解下方案,也欢迎贡献:

@hamstersox
Copy link
Author

@hamstersox 您好,这是一个好问题。

  • LSE pods 的资源不能被超卖,因为定义上该 QoS 等级确保了 cpu 核的强隔离,与其他超卖 pods 互斥,反之也不能申请超卖资源。
  • LSR pods 的资源可以被超卖,它的 cpu 核可能和 BE pods 部分共享,但当前 koordinator 不支持绑核超卖,因此 LSR pods 不能申请超卖资源。

您当前提供的 YAML 中,组合使用了 QoS=LSR 和 Batch 资源,这在 koordinator 中是不支持的,因此 LSR 的绑核语义其实没有生效,而是变成了类似 Batch + LS 的模式。 对于您的资源使用场景,可以考虑拆分应用的优先级为 Prod、Batch 进行在离线混部超卖;对于优先级不可分的场景,我们也提供了节点资源放大和 Mid 资源超卖等机制,正在建设中,感兴趣的话可以了解下方案,也欢迎贡献:

再请教一下
image
我对mid资源的定义不是理解。想问mid资源和batch资源的区别?
以及为什么我的batch 资源和mid资源为0 ?
slo-controller-config 配置如下
image

@saintube
Copy link
Member

@hamstersox 您好,这是一个好问题。

  • LSE pods 的资源不能被超卖,因为定义上该 QoS 等级确保了 cpu 核的强隔离,与其他超卖 pods 互斥,反之也不能申请超卖资源。
  • LSR pods 的资源可以被超卖,它的 cpu 核可能和 BE pods 部分共享,但当前 koordinator 不支持绑核超卖,因此 LSR pods 不能申请超卖资源。

您当前提供的 YAML 中,组合使用了 QoS=LSR 和 Batch 资源,这在 koordinator 中是不支持的,因此 LSR 的绑核语义其实没有生效,而是变成了类似 Batch + LS 的模式。 对于您的资源使用场景,可以考虑拆分应用的优先级为 Prod、Batch 进行在离线混部超卖;对于优先级不可分的场景,我们也提供了节点资源放大和 Mid 资源超卖等机制,正在建设中,感兴趣的话可以了解下方案,也欢迎贡献:

再请教一下 image 我对mid资源的定义不是理解。想问mid资源和batch资源的区别? 以及为什么我的batch 资源和mid资源为0 ? slo-controller-config 配置如下 image

@hamstersox 看起来 configmap 填错了。可以通过以下命令确认 configmap 的填写结果:

kubectl describe configmap -n koordinator-system slo-controller-config
kubectl get nodeslo.slo.koordinator.sh $NODE_NAME  -oyaml

@hamstersox
Copy link
Author

@hamstersox 您好,这是一个好问题。

  • LSE pods 的资源不能被超卖,因为定义上该 QoS 等级确保了 cpu 核的强隔离,与其他超卖 pods 互斥,反之也不能申请超卖资源。
  • LSR pods 的资源可以被超卖,它的 cpu 核可能和 BE pods 部分共享,但当前 koordinator 不支持绑核超卖,因此 LSR pods 不能申请超卖资源。

您当前提供的 YAML 中,组合使用了 QoS=LSR 和 Batch 资源,这在 koordinator 中是不支持的,因此 LSR 的绑核语义其实没有生效,而是变成了类似 Batch + LS 的模式。 对于您的资源使用场景,可以考虑拆分应用的优先级为 Prod、Batch 进行在离线混部超卖;对于优先级不可分的场景,我们也提供了节点资源放大和 Mid 资源超卖等机制,正在建设中,感兴趣的话可以了解下方案,也欢迎贡献:

再请教一下 image 我对mid资源的定义不是理解。想问mid资源和batch资源的区别? 以及为什么我的batch 资源和mid资源为0 ? slo-controller-config 配置如下 image

@hamstersox 看起来 configmap 填错了。可以通过以下命令确认 configmap 的填写结果:

kubectl describe configmap -n koordinator-system slo-controller-config
kubectl get nodeslo.slo.koordinator.sh $NODE_NAME  -oyaml

执行结果是这样的
image

image

@saintube
Copy link
Member

执行结果是这样的 image

image

@hamstersox 您的配置字段填错了位置,比如 colocation-config 下是没有 cpuSuppressThresholdPercent 的。
请参考以下形式填写:
https://github.com/koordinator-sh/koordinator/blob/main/apis/configuration/slo_controller_config.go#L339

@hamstersox
Copy link
Author

执行结果是这样的 image
image

@hamstersox 您的配置字段填错了位置,比如 colocation-config 下是没有 cpuSuppressThresholdPercent 的。 请参考以下形式填写: https://github.com/koordinator-sh/koordinator/blob/main/apis/configuration/slo_controller_config.go#L339

image
我后续更改配置后,节点配置如下,但是我的节点的batch 和 mid资源还是为0

@hamstersox
Copy link
Author

我创建了四种类型的qosClass的pod。但是我发现be pod 的cpuset 为0-5,没有和lse的互斥。这是为什么?
lse
image
lsr
image
ls
image
be
image

@saintube
Copy link
Member

我创建了四种类型的qosClass的pod。但是我发现be pod 的cpuset 为0-5,没有和lse的互斥。这是为什么? lse image lsr image ls image be image

如线下讨论,节点同时开启了 kubelet 的 cpu manager 绑核,实际 sharepool 可参考:https://koordinator.sh/docs/designs/fine-grained-cpu-orchestration#compatible-kubelet-cpu-management-policies

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/api-machinery area/koord-scheduler kind/question Support request or question relating to Koordinator
Projects
None yet
Development

No branches or pull requests

2 participants