LWN: upstreaming 的困难!

linux内核协议栈 之 GSO逻辑分析 GSO用来扩展之前的TSO,目前已经并入upstream内核。TSO只能支持tcp协议,而GSO可以支持tcpv4, tcpv6, udp等协议。 阅读详情

关注了就能看到更多这么棒的文章哦~

The trouble with upstreaming

By Jonathan Corbet
September 27, 2021
Maintainers summit
DeepL assisted translation
https://lwn.net/Articles/870553/

内核开发社区一直在大声鼓励开发者把他们的代码放到 upstream 内核中。但是,将代码并入 mainline 的实际体验 往往比较困难,以至于一些开发者(和他们的雇主)干脆就放弃了这个打算。2021 年的内核维护者峰会花了一些时间来讨论社区是怎么做到让开发者做事变得更困难的,但同时却也没有想出多少办法能让事情变得更好。

Upstreaming agony(upstreaming 的痛苦)

Ted Ts'o 在会议开始时提到了本周早些时候举行的内核峰会(Kernel Summit)的一个讨论中,有几位 Chrome OS 开发者回顾了他们为合入 mainline 所做的努力。他特别提到了演讲 ppt 中的第 10 页,标题是 "Upstreaming agony"。那一页中提到有些维护者的反应比其他维护者快得多,而有些维护者则提出要求需要许多不相干的改动,还有更常见的:"哦,我们当然可以把你的这两行改动合入进来……*只要你能先把这个 subsystem 完成重写"。Ts'o 说,这种不一致性可能会让新的开发者感到不快,这也可能是许多开发者选择不参与内核社区的原因。他问,怎样才能改善这种情况?

Linus Torvalds 回答说,在维护者的许多次聚会上都有类似的讨论。这个问题的一部分原因仅仅是因为所有的人不可能都是一样的,但是子系统之间也确实是有差异的。他说,内存管理子系统会影响一切东西,因此会比一些普通的驱动程序更难接受改动。我们确实有痛点,并且一些维护者确实把这个门槛提得太高了,但是他也确实没有看到解决这个问题的有效办法。他建议,对有问题的维护者进行 "naming and shaming (点出名字来给予压力)" 可能会有所帮助。

Dave Airlie 提到了一些厂商所遇到的问题。比如他们新推出一个 SoC,就可能涉及到需要将几十个驱动程序推送到 upstream 上,其中每一个都需要发送到不同的地方去,牵涉到不同的验收标准,才能进入 mainline。这使得做事困难变多了。Arnd Bergmann 回应说,对于基于 Arm 的 SoC 来说,有一个可以解决这个问题的方法,那就是他的 arm-soc 代码 tree。驱动程序都可以通过这个路径进入 mainline。

我忍不住指出,在之前关于这个话题的讨论中,大家决定创建一个 maintainer 手册,其中包括子系统的简介,并且每个子系统的怪癖都可以被记录在文档里。现在这个 maintainer 手册已经存在了,但其中的子系统简介部分几乎是空白的。因此,我们也就几乎没有任何文档可以帮助 patch 作者来针对性地处理某个特定子系统。Torvalds 建议反其道而行之,由开发者来记录他们与特定子系统合作中碰到的问题。他说,维护者不会考虑这些事情,但补丁提交者一定会考虑。

我表示,我可不想去接下这个任务来合入那些添加对其他维护者批评意见的 patch。

Chris Mason 提醒大家注意上一次会议结束时的讨论,其中涉及到了那些在公司内部工作比在 upstream 社区工作感到更快乐的开发者。即使是被视为核心开发者(core developer)的人也会有这种感觉。Mason 说,将代码上传到 upstream 的过程充满了不确定性,它会使 patch 变得更好,但这里需要付出的代价是使得开发者的生活更加艰难了。如果能找到什么方法来为这个过程增加一些确定性那就好了。在周一关于 folio 的讨论中,开发者 Matthew Wilcox 说,他不知道应该运行哪些测试来展示他的工作对性能有多少影响。Mason 说,当这样一个长期的核心开发人员都不知道的时候,我们肯定有些地方做的不够好。

Torvalds 回答说,当涉及到内存管理时,没有 benchmark,只有开发者所运行的 "成千上万的各种各样的任务"。他提到了 Phoronix 的基准测试,说他们发现的问题数量简直完全不合理。基准并不是万能的。最好的方案是能有一个人在持续跟进,并在一直跟踪性能数据。他说,他对 syzbot 测试感到不太满意,因为这些测试都是在大量英特尔机器上运行的,哪怕仅仅只是移动一个 cacheline,都会显示出性能退步了。对于性能测试来说,这里的帮助并不是很大。[注意,Torvalds 说的是 "syzbot",但他似乎是指英特尔的 0day 测试。]

Al Viro 补充说,如果能有人报告出 regression 的话确实很好,但更有用的是结果值的标准差(standard deviation)。他见过许多报告声称有性能改进,但一旦仔细看了数据,就会发现这里的所谓改进 "基本上都是噪音数据"。Torvalds 指出,Syzbot 测试确实至少还是提供了测试结果的标准差的。

Thomas Gleixner 说,社区可以把正式标准写到文档里,但要想记录清楚对于代码设计的那些期望可就困难多了。事实上,不同领域有不同的标准,这就更增加了困难度。而且,一般来说人们都不会听这些指导意见,而只是 "把东西塞进代码角落里"。Mason 问,会不会也是给予开发者的一些指导的语气让人更加无法接受?有时开发者们会觉得在 review 过程中一直在被打压。Gleixner 回答说,他主要是在提问,并且花时间向没有经验的开发者解释这些问题。不过,当他面对那些不听话的有十年经验的老手时,他就放弃了。Mark Brown 补充说,社区以前多次讨论过语气问题,而这往往会归结为文化上的差异。

在这个没有结论的会议结束之时,Ts'o 又提出了一个观点:许多开发者想在社区之外提供对 kernel 的贡献,因为这样感觉更容易一些。如何解决这个问题,并不是很清楚。开发者可以工作的许多领域都影响着大量的用户。很容易做出一个对某个场景来说很好的 patch,但它却同时破坏了其他的场景。在大公司里,开发人员因解决公司的问题而得到奖励,而为社区做出贡献并为每个人改进内核则很难得到什么奖励。他说,我们需要做得很好,找到方法来指出那些使内核普遍改善的开发者,并且给出奖励。

他继续说,一个常见的情况是,某个新的硬件功能的首位开发者会被要求做一个全新的框架,要求在一般情况下都要能用的起来。他说,user interrupt patch set 目前正在经历这种情况。这是英特尔的新功能,但是开发人员正在询问它在其他架构上将会如何使用。这是一个很难回答的问题,因为其他 CPU 制造商还没有说他们是否会提供该功能,或者以什么形式提供。他说:"我们需要对第一个进入新领域的开发者更加宽容。"

接下来,会议室陷入了沉默,讨论转入了下一个话题。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

ae3f76437fff2c186678f9050c0e4eba.png

(五)深入理解蓝牙BLE之“Beacon包格式详解” 蓝牙Beacon格式详解 本文重点在结合Bluetooth官网spec和几个例子来使beacon帧格式更加容易被理解。 广播帧格式: 首先beacon是蓝牙BLE广播包的一种,蓝牙广播帧格式如下: PS:其实BLE数据帧除了报头字段和数据字段定义与广播帧不同之外,前导/接入地址/长度/校验格式均相同。 广播帧数据字段格式: 数据字段最长为37个字节:6个字节的广播设备地址 + 31个字节广播数据。 广播数据的格式如下:AD Structure1 +AD Structure2 + ..... 阅读详情

相关推荐

山东大学FPGA课程实验一 加法器设计

电子设计自动化与FPGA设计,实验一 加法器设计

2503_91283667的博客 869

I/O Passthru: Upstreaming a flexible and efficient I/O Path in Linux——泛读笔记

许多新的存储功能/接口不能很好地适应块层,并且由于Linux中缺乏适当的系统调用接口而面临采用变化。因此,之前只有两种选择:(1)在可能存在的块接口上使用同步NVMe直通,(2)切换到内核旁路解决方案。本文在内核中添加新的直通路径来创建一个新的替代方案。此路径将NVMe字符接口与io_uring相结合。并将此路径集成到各种用户空间库/工具,说明如何简化FDP SSD、端到端数据保护和计算存储的启用。还在io_uring中引入了ioctl的替代方案。

重新开始写博客 820

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5567

在网络直播中什么叫推流

参考: 推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是糟糕。 要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。常用的流传输协议有RTSP、RTMP、HLS等,使用RTMP传输的延时通常在1–3秒,对于手机直播这种实时...

weixin_30487201的博客 2839

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。<view class='container'> <!-- 菜单 --> <view class='menu'> <ul> <!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

NE5532A与JRC4580在低噪声音频电路设计中的关键应用

本文深入探讨了经典运算放大器NE5532A与JRC4580在低噪声音频电路设计中的核心应用。文章从噪声模型分析入手,阐述了针对低阻抗信号源时,如何利用这两款BJT输入运放的低电流噪声特性进行优化设计。通过对比两者参数与实战守则,为设计高保真音频前级、耳机放大等电路提供了从原理图到PCB布局的完整低噪声解决方案。

weixin_29295541的博客 327

Nginx两种反向代理方式:fastcgi,upstreaming

1 简介Nginx反向代理可以通过两种方式实现,fastcgi和upstreaming2 fastcgi该部分以PHP为例介绍通过fastcgi实现反向代理。 fastcgi相关介绍见这里 首先安装Nginx和PHP环境。建议使用https://lnmp.org/ 。一键安装,非常方便。安装完成后,找到配置文件/usr/local/nginx/conf/nginx.conf。在配置文件中找到in

super 8506

[英语单词] Kernel:upstream/downstream; midstream 上下游

有些概念,需要根据语境来说它们的意思;而且有时候这种以方位名命的概念,容易让人产生困惑,特别是以左右为名词修饰语时,比如两个人面对面交流,或者教官与学生之间的交流,如果A说右,他是以自己的角度还是按照B的角度说右;上下作为名词修饰语略微好一些,但是也是需要具体的语境来理解。所以我们的胃,没有左右、上下弯,而只有大小弯;以大小作为区分事物的指标好于方位指标,歧义的产生会小。当然大小也容易产出歧义,多地有什么多大的区别为大?而且左右与上下的区别度不大。而大小有区别度。

mzhan017的博客 1545

22、用户界面流程(UI Flow)全解析

本文全面解析了用户界面流程(UI Flow)的概念、创建步骤及其在系统设计中的应用。通过示例和操作步骤,详细介绍了如何确定屏幕范围、识别屏幕、创建过渡和标记触发器,并阐述了UI Flow在导航识别、验证、可用性优化、测试用例开发和需求推导中的重要作用。文章还结合问答系统案例,展示了UI Flow的实际应用价值,帮助读者深入理解并有效运用这一工具提升系统用户体验。

rice5的博客 153

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 559

nginx upstream模块详解(处理流程篇一 upstream处理)

upstream 是nginx作为代理及缓存的核心结构 并且请求上游  发送至下游都能由相关联的模块进行干预处理upstream 模块流程处理如下创建upstreamngx_int_t ngx_http_upstream_create(ngx_http_request_t *r) { ngx_http_upstream_t *u; u = r->upstream; ...

huzilinitachi的专栏 2万+

ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】

ofd转pdf报错:java.lang.NoClassDefFoundError:org/apache/commons/io/function/IOIterator at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress,java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry()

黄团团的个人博客 1283

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 223

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 149

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 328

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 115

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 194

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 104

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 397

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 626

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 349

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 294
上一篇: LWN: 对 BPF 所拥有的超能力进行限制!
下一篇: LWN:内核维护者峰会上的两个小话题!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值