OC 云原生 SLI 如何通过内核级观测解决容器抖动难题
在云原生深水区偶发性的容器抖动往往是 SRE 难以捕捉的“幽灵”。传统的 top / free 等工具只能看到秒级平均值却无法捕捉毫秒级的长尾延迟。近期OpenCloudOS 引入了云原生 SLIService Level Indicator框架通过内核埋点与主动通知技术实现了对容器视角的 CPU 调度延迟、内存分配延迟等关键指标的精准捕获。本文将深入解析 SLI 的原理、核心指标及实战用法。该框架的整套代码也已在OpenCloudOS内核中开源可划至文末查看仓库地址。一、 云原生 SLI是个啥它能解决什么问题OpenCloudOS 的 SLI 机制是一套基于内核关键路径的主动监控框架。过去我们查问题是“从外向内”猜而 SLI 是“从内向外”报。也就是说SLI是直接在 Linux 内核的 CPU 调度、内存分配、IO 等核心路径上进行轻量级埋点以极低的开销实时记录容器内进程的等待时间。它解决的核心问题是 将黑盒的系统级延迟转化为白盒的、可度量的容器级指标。二、 SLI与主流监控框架的对比及其典型应用场景在云原生监控领域我们手里其实并不缺工具比如 cAdvisor、PSI 或是eBPF。那为什么 OpenCloudOS 还要在内核里“造轮子”搞出一套 SLI或许你可以从下面的对比中窥见一二。综合来看SLI的核心能力在于主动监控、主动上报、监控精准度高、内核级实时计算且开销极低。另外我们这里也列举一些SLI主要覆盖以下核心场景CPU 调度抖动进程在 Runqueue 中等待 CPU 时间片的时间或者任务长时间抢占CPU。解决问题 定位 CPU 争抢、CPU Throttling 或宿主机负载过高导致的调度滞后。内存分配抖动进程申请内存时由于直接回收或内存碎片整理导致的阻塞时间。解决问题 发现隐形的内存压力即使看起来内存没用满分配内存也可能很慢。网络/IO 抖动TCP 连接建立耗时、块设备 I/O 等待时间。解决问题 定位网络丢包重传或磁盘慢 I/O 引起的业务卡顿。三、 实战教学如何在 OpenCloudOS 中使用 SLI目前OpenCloudOS8内核5.4、OpenCloudOS9内核6.6及它们各自对应的企业版TencentOS3、TencentOS4中都已具备SLI能力相关代码也已在其内核仓库中开源。代码详情请至文末查看。3.1 SLI启动接口默认情况下为了极致性能SLI 功能是关闭的。你需要先在系统层面开启监控总开关# 启动SLI CPU/内存功能默认为关闭echo 1 /proc/sli/sli_enabled# 开启SLI IO功能默认为关闭该开关与上面的sli_enabled开关没有关联echo 1 /proc/sli/sli_io_enabled# cgroup下启用mbuf功能echo 1 /proc/sys/kernel/qos_mbuf_enable注当前sysctl_qos_mbuf_enable使能后创建的cgroup才能使用mbuf功能3.2 观测直方图如果想要知道某个容器到底有没有发生抖动直接进入它的 cgroup 目录读取对应的 .sli 文件内核会以直方图的形式清晰展现延迟的分布情况。直方图用于展示不同事件耗时分布信息包括CPU、内存以及IO。Cgroup v1/v2下在各个Cgroup子系统中非root Cgroup下存在如下文件用于导出对应子系统中不同事件耗时信息的直方图分布cgroupv1下对应文件如下cpuacct.sli - 对应 CPU 事件memory.sli - 对应内存事件blkio.sli - 对应 IO 事件cgroupv2下对应文件如下sli.cpu - 对应 CPU 事件sli.memory - 对应内存事件sli.io - 对应 IO 事件在使能 sli_enabled 后CPU 和内存直方图功能开始生效使能 sli_io_enabled 后IO直方图功能生效。3.2.1 CPU直方图观测# 1. 进入 Cgroup 目录并创建测试组# 注意如果是 Cgroup v2 环境路径请改为 cd /sys/fs/cgroupcd /sys/fs/cgroup/cpuacctmkdir testcd testecho $$ ${path}cgroup.procs# 2. 启动两个死循环进程并强制绑定在同一个 CPU 核心核心 1上# 这会人为制造严重的 CPU 调度争抢taskset -c 1 bash -c echo \$\$ cgroup.procs; while true; do true; done taskset -c 1 bash -c echo \$\$ cgroup.procs; while true; do true; done # 3. 等待几秒钟让内核记录排队卡顿的数据sleep 5# 4. 查看 SLI 记录的 CPU 调度延迟直方图# 注意如果是 Cgroup v2 环境文件名请改为 cat sli.cpucat cpuacct.sli | grep schedlat_rundelay -A 8执行完上述操作后可以看到CPU分配延迟直方图例如3.2.2 内存直方图观测可通过如下步骤观察内存回收事件耗时# 1.进入内存 Cgroup 目录并创建测试组# 注意如果是 Cgroup v2 环境路径请改为 cd /sys/fs/cgroupcd /sys/fs/cgroup/memorymkdir testcd test# 2. 限制内存并加入当前进程# 注意如果是 Cgroup v2 环境请将 memory.limit_in_bytes 改为 memory.maxecho $((1024*1024*1024)) memory.limit_in_bytesecho $$ cgroup.procs# 3. 启动压测工具stress-ng --vm 4 --vm-bytes 75% --vm-keep # 4. 查看 SLI 记录的内存抖动直方图# 注意如果是 Cgroup v2 环境文件名请改为 cat sli.memorycat memory.sli执行完上述操作后你就可以直接通过读取文件看到内核为你统计的内存分配延迟直方图 例如3.2.3 IO直方图观测同样可以通过将任务加入blkcg中查看对应blkcg中IO相关事件耗时# 1. 进入 IO Cgroup 目录并创建测试组# 注意如果是 Cgroup v2 环境路径请改为 cd /sys/fs/cgroup,echo io cgroup.subtree_control启用io子系统cd /sys/fs/cgroup/blkiomkdir testcd test# 2. 将当前进程加入该组echo $$ cgroup.procs# 3. 制造 IO 压力dd if/dev/zero of/tmp/t1 bs1M count1024oflagdirect# 4. 查看 SLI 记录的 IO 延迟直方图# 注意如果是 Cgroup v2 环境文件名请改为 cat sli.iocat blkio.sli执行完上述操作后你就可以看到IO延迟直方图 例如3.3 阈值监控同时SLI提供了阈值监控功能当CPU、内存、IO对应事件延迟超过阈值后会触发事件告警功能。延迟信息可通过Monitor机制主动通知业务或者通过mbuf打印到日志中。Cgroupv1下阈值设置对应各个Cgroup子系统下的sli.control文件CPU、内存以及IO 子系统中包括如下监控事件● cpuacct.sli.controlperiod: 0mbuf_enable: 0schedlat_wait: threshold: 0, count: 0schedlat_block: threshold: 0, count: 0schedlat_ioblock: threshold: 0, count: 0schedlat_sleep: threshold: 0, count: 0schedlat_longsys: threshold: 0, count: 0schedlat_rundelay: threshold: 0, count: 0schedlat_irqtime: threshold: 0, count: 0longterm_rundelay: threshold: 0longterm_irqtime: threshold: 0● memory.sli.controlperiod: 0mbuf_enable: 0memlat_global_direct_reclaim: threshold: 0, count: 0memlat_memcg_direct_reclaim: threshold: 0, count: 0memlat_direct_compact: threshold: 0, count: 0memlat_global_direct_swapout: threshold: 0, count: 0memlat_memcg_direct_swapout: threshold: 0, count: 0memlat_direct_swapin: threshold: 0, count: 0● blkio.sli.controlperiod: 0mbuf_enable: 0iolat_delay: threshold: 0, count: 0Cgroupv2下对应配置文件为sli.control包含cpu、内存以及io事件period: 0mbuf_enable: 0schedlat_wait: threshold: 0, count: 0schedlat_block: threshold: 0, count: 0schedlat_ioblock: threshold: 0, count: 0schedlat_sleep: threshold: 0, count: 0schedlat_longsys: threshold: 0, count: 0schedlat_rundelay: threshold: 0, count: 0schedlat_irqtime: threshold: 0, count: 0memlat_global_direct_reclaim: threshold: 0, count: 0memlat_memcg_direct_reclaim: threshold: 0, count: 0memlat_direct_compact: threshold: 0, count: 0memlat_global_direct_swapout: threshold: 0, count: 0memlat_memcg_direct_swapout: threshold: 0, count: 0memlat_direct_swapin: threshold: 0, count: 0longterm_rundelay: threshold: 0longterm_irqtime: threshold: 0iolat_delay: threshold: 0, count: 0其中period为监控周期单位为jiffies表示在该监控周期内对应事件延迟超过threshold count次后将触发对应事件告警其中threshhold的单位为us。阈值设置步骤如下sysctl -w kernel.sched_schedstats1echo 1 /proc/sli/sli_enabledecho 1 /proc/sys/kernel/qos_mbuf_enablecgroup v1下echo mbuf_enable1 /sys/fs/cgroup/cpuacct/cpuacct.sli.controlmkdir /sys/fs/cgroup/cpuacct/testcd /sys/fs/cgroup/cpuacct/testecho schedlat_sleep_threshold10,count1 cpuacct.sli.controlecho period8 cpuacct.sli.controlecho $$ cgroup.procssleep 1cat cpuacct.mbufcgroup v2下cd /sys/fs/cgroupecho mbuf_enable1 sli.controlmkdir testcd testecho period10 sli.controlecho schedlat_sleep_threshold10,count1 sli.controlecho $$ cgroup.procssleep 1cat mbuf执行sleep1后查看mbuf其中输出内容包含sleep超过10us的事件例如四、 欢迎参与共创从“摸黑排查”到“微秒级精准捕获”云原生 SLI 只是 OpenCloudOS 众多内核黑科技的冰山一角。如果你在业务抖动排查上曾踩过无数“坑”或者你对 eBPF、内核可观测性技术充满热情我们诚挚地邀请你体验 OpenCloudOS SLI能力并参与社区贡献和反馈。你可以通过如下方式参与贡献在体验、测试过程中发现功能缺失、发现bug在下面仓库中给我们提Issuebug反馈、需求建议均可分享你的排查案例或基于我们做二次开发无论是功能模块补充开发亦或其他。项目所在代码仓OpenCloudOS Kernelhttps://gitee.com/OpenCloudOS/OpenCloudOS-KernelSLI Monitor项目相关PRhttps://gitee.com/OpenCloudOS/OpenCloudOS-Kernel/pulls/618OpenCloudOS 开源社区是由操作系统、云平台、软硬件厂商与个人携手打造中立开放、安全稳定且高性能的 Linux 操作系统及生态。目前已实现从源社区、商业版、到社区稳定版全链路覆盖旨在输出经海量业务验证的企业级稳定操作系统版本为行业解决国产操作系统上下游供应问题促进基础软件可持续发展。点击下方图片了解加入社区权益与方式↓技术干货 · 目录上一篇OpenCloudOS GLM-5 全流程部署实战下一篇日处理700万条告警的智能管家 OCManager 正式开源阅读 309云原生 SLI​

相关新闻

2026年10款靠谱论文降AIGC工具实测:消AIGC特征实战对比实用指南

2026年10款靠谱论文降AIGC工具实测:消AIGC特征实战对比实用指南

后台私信快炸锅了,全是问论文降 AI 的!这种焦虑我太懂了——现在学校的查重系统简直是"宁可错杀一千,绝不放过一个",尤其是针对 AIGC 内容的检测算法,严得离谱。前阵子帮学妹改稿子,明明是她熬了…

2026/6/26 15:22:01阅读更多 →
【课程设计/毕业设计】基于 SpringBoot 的教学信息统计管理系统的设计与实现 高校师生教务一体化管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 SpringBoot 的教学信息统计管理系统的设计与实现 高校师生教务一体化管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/26 15:22:01阅读更多 →
3步搞定Switch注入:TegraRcmGUI图形化工具完全指南

3步搞定Switch注入:TegraRcmGUI图形化工具完全指南

3步搞定Switch注入:TegraRcmGUI图形化工具完全指南 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 你是否还在为Switch注入的复杂命令行操作而烦…

2026/6/26 15:17:00阅读更多 →
从67%到82%!AnomalyGPT 实战进阶:Vicuna-7B 升级全记录(附双卡推理方案)

从67%到82%!AnomalyGPT 实战进阶:Vicuna-7B 升级全记录(附双卡推理方案)

从67%到82%!AnomalyGPT 实战进阶:Vicuna-7B 升级全记录(附双卡推理方案) 系列文章:零基础实战:AnomalyGPT工业缺陷检测大模型完整训练记录(附踩坑合集以及源码) 摘要:本文…

2026/6/26 18:07:50阅读更多 →
LinkSwift:重新定义网盘下载体验的技术解耦方案

LinkSwift:重新定义网盘下载体验的技术解耦方案

LinkSwift:重新定义网盘下载体验的技术解耦方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…

2026/6/26 18:07:50阅读更多 →
数据预处理全流程(一个数据集贯穿),入门级包学包会

数据预处理全流程(一个数据集贯穿),入门级包学包会

假设原始数据是一张用户表:ID年龄薪资城市购买次数1258000北京5230?上海123258000北京5420012000深圳353515000?862810000广州0① 缺失值处理方法怎么做本例结果删除直接去掉该行删掉 ID2(缺薪资)、ID5(缺城市)填充均…

2026/6/26 18:07:50阅读更多 →
036、CA 坐标注意力插入 Backbone(位置一):把位置信息编码进通道注意力的代码

036、CA 坐标注意力插入 Backbone(位置一):把位置信息编码进通道注意力的代码

036、CA 坐标注意力插入 Backbone(位置一):把位置信息编码进通道注意力的代码从一次诡异的mAP波动说起 去年秋天调一个工业检测模型,Backbone用的YOLOv8-S,在某个特定缺陷类别上mAP死活卡在0.78上不去。试了SE、CBAM、…

2026/6/26 18:07:50阅读更多 →
凭什么要用余弦退火,不用正弦退火

凭什么要用余弦退火,不用正弦退火

先说结论:余弦退火功能:让学习率像余弦波一样平滑地先缓降、再快降,最后在谷底温柔触底。为什么?先看看公式看着烦,不看了,核心就是:f(t) 来看看对t求导,其他的不用管 得到一个sin(…

2026/6/26 18:07:50阅读更多 →
3分钟掌握WindowResizer:Windows窗口尺寸调整终极指南

3分钟掌握WindowResizer:Windows窗口尺寸调整终极指南

3分钟掌握WindowResizer:Windows窗口尺寸调整终极指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为Windows应用程序窗口尺寸无法调整而烦恼吗?你是…

2026/6/26 18:02:49阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

HPE (慧与) 服务器专用 ESXi 9 全套官方定制资源详解 + 完整部署升级教程

一、前言:企业运维痛点与资源价值自博通收购 VMware 之后,原 VMware 公开免费下载渠道全面关闭,企业运维人员想要获取适配 HPE 慧与服务器的 ESXi 9 原厂镜像,必须注册博通账号、绑定有效授权才能下载,无授权账号无法获…

2026/6/26 0:02:15阅读更多 →
Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin的@JvmStatic与@JvmField:与Java互操作的注解

Kotlin作为一门现代编程语言,与Java的互操作性一直是其核心优势之一。为了让Kotlin代码能够无缝对接Java,Kotlin提供了多种注解来优化互操作体验,其中JvmStatic和JvmField是两个关键注解。它们分别用于解决静态成员和字段在Java中的访问问题&…

2026/6/26 0:02:15阅读更多 →
深入解析musl libc中的mmap实现源码

深入解析musl libc中的mmap实现源码

最近在阅读musl libc源码时,发现其mmap的实现非常精妙,特分享给大家。 一、代码整体结构 这段代码实现了__mmap函数,并通过weak_alias导出为mmap。这是典型的musl libc风格——提供弱符号以便用户可以重写。 weak_alias(__mmap, mmap); 二…

2026/6/26 0:02:15阅读更多 →