写点什么

Netflix 如何利用 eBPF 提高基础设施的可观测性

作者:Sergio De Simone

  • 2024-10-22
    北京
  • 本文字数:1300 字

    阅读完需:约 4 分钟

Netflix 如何利用 eBPF 提高基础设施的可观测性

为了有效且高效地调查多租户系统的性能,奈飞(Netflix)一直在尝试使用 eBPF 来对 Linux 内核进行检测,以收集有关进程如何调度并检测“吵闹的邻居”的持续且深入的见解。


使用 eBPF,奈飞(Netflix)的计算和性能工程团队旨在规避一些通常会使“吵闹的邻居”检测变得困难的问题。这些问题包括 perf 等分析工具所带来的开销,这也意味着它们通常仅在问题发生之后才部署,以及工程师所需的专业知识水平。根据奈飞(Netflix)工程师的说法,eBPF 可以实现对计算基础设施进行低性能影响的观测,从而实现对 Linux 调度程序的持续检测。


奈飞(Netflix)工程师确定的关键指标是进程延迟,该指标可指示“吵闹的邻居”可能造成的性能问题:


为了确保依赖于低延迟响应的工作负载的可靠性,我们检测了每个容器的运行队列延迟,该延迟测量了进程在调度到 CPU 之前在调度队列中所花费的时间。


为此,他们使用了三个 eBPF 钩子:sched_wakeupsched_wakeup_newsched_switch 。当进程从“睡眠”状态变为“可运行”状态时,即当它准备好运行并等待一些 CPU 时间时,会调用前两个钩子。当 CPU 被分配给其他进程时, sched_switch 钩子会被触发。因此,进程延迟是通过 CPU 分配给进程的时间戳减去进程首次准备好运行的时间戳来计算的。


最后,在 Go 程序中处理通过插装内核所收集到的事件,以向 Atlas(Netflix 的度量指标后端) 发送度量指标。为了将收集到的数据传递给用户空间的 Go 程序,奈飞(Netflix)工程师决定使用 eBPF 环形缓冲区,它提供了一种高效、高性能且用户友好的机制,不需要额外的内存复制或系统调用。


除了计时信息外,eBPF 还可以收集有关进程的其他信息,包括将进程与容器关联起来的进程的 cgroup  ID,这是正确诠释抢占的关键。事实上,检测“吵闹的邻居”不仅仅是测量延迟的问题,因为它还需要跟踪进程被抢占的频率以及是哪个进程导致的抢占,无论它们是否运行在同一个容器中。


例如,如果一个容器达到或超过其 cgroup  CPU 的限制,调度程序将对其进行限流,从而会导致由于队列延迟而引起的运行队列延迟明显增加。如果我们只考虑这个指标,我们可能会错误地将性能下降归因于“吵闹的邻居”,而实际上这是由于容器达到了它的 CPU 配额上限导致的。


为了确保他们的方法不会影响被监测系统的性能,奈飞(Netflix)的工程师还创建了一个用于测量 eBPF 代码开销的工具 bpftop。使用该工具,他们可以确定几类优化,以进一步减少它们最初的开销,并使每个 sched_* 钩子的时延保持在 600 纳秒的阈值之下。从而使其能合理地不断运行钩子,而不必担心它们会对系统性能造成影响。


如果你对这种系统性能监测方法感兴趣,或者想更好地了解 eBPF 的内部工作原理,原始文章所提供的细节要比这里所介绍的详细得多,其中还包含了有用的示例代码。

作者介绍

Sergio De Simone 作为一名软件工程师已经有超过 25 年的工作经验了,曾在一系列不同的项目和公司工作过,包括西门子、惠普和小型初创公司等不同的工作环境。在过去的十多年里,他一直专注于移动平台和相关技术的开发。他目前就职于 BigML, Inc.,负责 iOS 和 macOS 的开发。


查看原文链接:

https://www.infoq.com/news/2024/09/ebpf-noisy-neighbors/


2024-10-22 09:028577

评论

发布
暂无评论
发现更多内容

BI系统打包Docker镜像及部署的技术难度和实现

葡萄城技术团队

Docker 容器 BI

Spring Boot「24」DAO 模式与 Repository 模式

Samson

Java spring Spring Boot 学习笔记 11月月更

大咖说·我和我的伙伴们|云原生携手禾连健康助力医疗行业发展

大咖说

阿里云 微服务 云原生

PingCAP 推出 TiDB Cloud Serverless Tier BETA 版

PingCAP

TiDB

QuTrunk与Paddle结合实践--VQA算法示例

启科量子开发者官方号

Python 人工智能 ai框架 量子计算 量子编程

量子编程实践:Bell Pair电路及Deutsch算法

启科量子开发者官方号

#python #量子计算 #人工智能 #AI框架

设计模式学习-基础知识

肥晨

设计模式 11月月更 设计模式基础

FOTSL:端到端的文本检测与识别方法的原理方法与优势

合合技术团队

人工智能 场景 端口 文本检测 文本识别

产品网站的FAQ页面该如何编辑?

Baklib

产品 FAQ

「百幄」之办公平台:进一道门,办所有事

融云 RongCloud

数字化 办公

喜讯!麦聪DaaS平台荣获“2022行业信息化优秀产品”奖

雨果

数字化转型 DaaS数据即服务 麦聪软件

不愧是阿里内部Spring Boot笔记,从头到尾全是干货

小小怪下士

Java spring 程序员 阿里 springboot

Docker PHP 入门实践(一)

Felix

php 实战案例 Docker 镜像 11月月更

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(1)

百里丶落云

数据库 后端 11月月更

马蜂窝毕博:分析完这9点工作原理,我们最终选择了 Apache SeaTunnel!

Apache SeaTunnel

开源 技术选型 数据集成 Seatunnel 数据集成平台

【10.28-11.04】写作社区优秀技术博文一览

InfoQ写作社区官方

优质创作周报

集群并发下的数据覆盖问题

苏格拉格拉

缓存 分布式 并发 一致性

Redis数据结构

苏格拉格拉

redis 缓存 Redis 数据结构

稳定性治理方法论

苏格拉格拉

方法论 稳定性

LED显示屏有色差要怎么处理?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

python数据分析-开篇什么是数据分析

AIWeker

Python 人工智能 数据分析 11月月更

Docker PHP 入门实践(二)

Felix

php Docker 实战 11月月更

智采云火了的背后,是企业降本增效的刚需

ToB行业头条

Baklib|如何搭建在线帮助中心站点?

Baklib

uniapp引入 iconfont

源字节1号

微信小程序 软件开发 前端开发 后端开发

从演进的视角理解微服务架构

苏格拉格拉

架构 微服务 微服务架构 架构演进

一文带你详细了解JVM运行时内存

程序员小毕

Java 程序员 面试 后端 JVM

深圳中心化区块链交易所开发安全的重要性

W13902449729

区块链交易所搭建

并发编程中的锁、条件变量和信号量

C++后台开发

Go 并发编程 linux开发 C++开发

Docker PHP 入门实践 (三)

Felix

php Docker thinkphp 11月月更

Redis核心技术

苏格拉格拉

redis 架构 持久化 部署 集群

Netflix 如何利用 eBPF 提高基础设施的可观测性_软件工程_InfoQ精选文章