标签 内核 下的文章

华为否认提交给 Linux 内核的不安全补丁 HKSP 来自官方

上周有华为工程师为 Linux 内核提交了一个内核强化补丁 HKSP(华为内核自我防护Huawei Kernel Self Protection),不过在代码检查后,该补丁被发现存在安全漏洞。根据 ZDNet 的消息,华为已经在周一的一份声明中表示,尽管该项目的名称中使用了“华为”,并且该项目是由其一名顶级安全工程师开发的,但华为并未正式参与 HKSP 项目。华为同时也表示,该项目代码从未在任何正式的华为产品中实际使用过:“这只是个人用于与开源社区 Openwall 进行技术讨论的演示代码。”

来源:开源中国

硬核老王点评:本来是一个普普通通的代码质量问题,但在有些人解读之下却浮想联翩。不过,个人项目冠名华为这样的行为在该公司是允许的吗?

阿里云自研数据仓库 AnalyticDB 再捧 TPC 全球冠军

5月14日,TPC 官网正式公布,阿里云自研的 AnalyticDB 通过了TPC-DS全流程测试,将前世界纪录的性能提升了29%,并把单位成本降低了三分之二,成功夺得全球数据仓库的桂冠。

来源:CSDN

硬核老王点评:似乎对阿里云热衷于得到各种比赛的冠军已经有点麻木了。

腾讯受益于疫情收入大涨

新冠病毒疫情带动“宅经济”发展,中国最大的游戏和互联网巨头腾讯控股周三公布,首季度净利按年增长 6%,而按非国际财务报告准则(Non-GAAP)净利增幅更达29%,内地防疫家居隔离带动其网络游戏及网络广告收入增长。然而,随着内地各地陆续复工复产,腾讯预期,游戏的用户使用时长及游戏内消费活动将大致回复正常水平,但公司相信,游戏行业已从结构上扩大了其长期受众及吸引力。

来源:solidot

硬核老王点评:虽然不能说游戏是邪恶的,但是一家公司因为这种情况带来的这种收入大涨,怎么也感觉有点不对味。当然,曾经有信誓旦旦不做游戏的公司最终也是投资了游戏行业,其实想想公司都是为牟利而生的,也就不足为怪了。只希望这些公司在牟利的同时不要忘记社会责任感。

Deno 1.0 发布

Deno 是作者 Ryan Dahl 在 Node 之后的又一大作,它是一个新的运行时,用于在 Web 浏览器之外执行 JavaScript 和 TypeScript,其采用 Rust 编写而成。Deno 试图提供一个独立的工具来快速编写复杂功能的脚本,它将始终是单个可执行文件。就像 Web 浏览器一样,它知道如何获取外部代码。在 Deno 中,单个文件可以定义任意复杂的行为,而无需任何其它工具。Ryan Dahl 认为过去他在设计 Node 时犯了一些错误,包括安全性、构建系统、package.json、node\_modules、index.js 等等,并表示 Node 存在的种种不足导致有许多严重问题且不可回避,当前 JavaScript 和周围的软件基础架构已经发生了巨大的变化,值得进行简化,于是他重新设计了 Deno 这门脚本语言。

来源:开源中国

硬核老王点评:确实 Node.JS 在取得成功的同时,也暴露出之前的一些先天不足。这个值得期待。

最冷清的应用商店:Windows 10 商店

无论是 iOS 还是 Android,系统内置的应用商店都门庭若市。然而在 Windows 10 上,情况却截然不同——自带的应用商店门可罗雀,时至今日,绝大部分用户在 Windows 10 中安装软件的主流方式,依然是自行下载软件安装,Windows 10 商店似乎已然是一个鸡肋般的存在。

来源:太平洋电脑网

硬核老王点评:这样比起来,Linux 桌面的应用商店(软件中心)或许更被用户所接受。

CreepRank 算法帮助谷歌 Play 商店剔除了 813 款 Android 蠕虫应用

据悉,来自纽约大学、康奈尔科技学院、以及 NortonLifeLock(原赛门铁克)的学者们,对这些蠕虫软件展开了深入的分析。这里提到的蠕虫,特指不具有完整的间谍或追踪功能的移动 App 。即便如此,别有用心的开发者仍可借此对用户展开间接追踪、骚扰、欺诈或威胁他人。研究团队开发的 CreepRank 算法,能够识别移动 App 中疑似的蠕虫行为,然而对每款 App 进行打分。

来源:cnBeta.COM

UCloud 发布物联网边缘网关 IoT Edge,实现边云协同

用户可以将 UIoT Edge 运行系统直接安装到符合要求的 X86、ARM 硬件网关。该系统实现了子设备数据的采集、解析、清洗、加工、缓存,本地场景的实时控制与联动,可广泛应用于工业制造、能源电气、智慧社区、物业楼宇、智能农业、新零售等领域。UIoT Edge 边缘网关提供子设备接入、函数计算、消息路由、一键部署/远程运维和本地 Web Portal 五大功能。目前,UIoT Edge进入公测阶段。

来源:UCloud

这个指南里介绍了 7 种为 Ubuntu 升级 Linux 内核的不同方法。这 7 种方法里,有 5 种需要重启系统来使新内核生效,其他两种则不用。升级之前,强烈建议你将重要数据进行备份! 这里提到的所有方法只在 Ubuntu 中测试过。我们并不确定这些方法是不是也能适用于其他 Ubuntu 的特色发行版(如: Xubuntu)和衍生发行版(如:Linux Mint)。

第一部分:需要重启的内核升级

以下方法需要你重启系统以便新的内核生效。以下所有方法都建议在个人系统或测试系统中进行。重要的事儿再说一遍,请备份好你 Ubuntu 中的重要数据、配置文件和其他重要的东西。

方法 1 - 使用 dpkg 升级 Linux 内核(手动方式)

这个方法可以帮助你从 kernel.ubuntu.com 网站手动下载可用的最新 Linux 内核。如果你打算安装最新版(而不是稳定版或者正式发布版),那这种方法对你会很有用。从以上链接下载 Linux 内核版本。编写这个指南的时候,最新的可用版本是 5.0-rc1,最新的稳定版是 v4.20

点击你所选择的 Linux 内核版本链接,找到你对应的架构(“Build for XXX”)的那部分。然后下载符合以下格式的两个文件(其中 X.Y.Z 是最高版本号):

  1. linux-image-X.Y.Z-generic-*.deb
  2. linux-modules-X.Y.Z-generic-.deb

在终端中改变到文件所在的目录,然后执行此命令手动安装内核:

$ sudo dpkg --install *.deb

重启系统,使用新内核:

$ sudo reboot

检查是否如你所愿:

$ uname -r

对于分步的说明,请查看下列链接中对应的部分。

以上的指南是针对的是 4.15 版本,不过安装最新版本的所有的步骤都是一样的。

优势: 不必联网(你可以从任何系统中下载 Linux 内核来使用)

缺点: 手动更新,需要重启系统。

方法 2 - 用 apt-get 来升级 Linux 内核(推荐方法)

这是在类 Ubuntu 系统中升级 Linux 内核的推荐方法。不同于上一个方法,这种方法会从 Ubuntu 官方仓库下载、安装内核版本,而不是从 kernel.ubuntu.com网站。

要升级包括内核的整个系统,只需要执行:

$ sudo apt-get update
$ sudo apt-get upgrade

如果只希望升级内核,运行:

$ sudo apt-get upgrade linux-image-generic

优势: 简单。推荐方法。

缺点: 需要联网,需要重启。

从官方库中升级内核是最接近开箱即用的方法,并且不会出什么问题。如果是生产环境的系统,这是最为推荐的升级 Linux 内核的方法。

方法 1 和方法 2 都需要用户去介入到升级 Linux 内核的过程中。而下边的方法(3、 4、 5)则几乎是全自动的。

方法 3 - 使用 Ukuu 升级 Linux 内核

Ukuu是一个 Gtk GUI 和命令行工具,它可以从 kernel.ubuntu.com 下载最新的 Linux 主线内核,并自动安装到你的 Ubuntu 桌面版和服务器版中。Ukku 不仅简化了手动下载和安装新内核的过程,同时也会帮助你安全地移除旧的和不再需要的内核。更多细节可以参照以下指南。

优势: 易于安装使用。自动安装主线内核。

缺点: 需要联网,需要重启。

方法 4 - 使用 UKTools 升级 Linux 内核

跟 Ukuu 差不多,UKTools 也会从 kernel.ubuntu.com 网站获取最新的稳定内核并且自动安装到 Ubuntu 以及类似于 Linux Mint 的延伸发行版中。关于UKTools的更多详情,请参见下面的链接。

优势: 简单,自动。

缺点: 需要联网,需要重启。

方法 5 - 使用 Linux 内核实用程序更新 Linux 内核

Linux 内核实用程序是目前另一个用于升级类 Ubuntu 系统 Linux 内核的程序。实质上,它是一个由一系列 Bash 脚本构成的合集,用于编译并且可以选择性地为 Debian(LCTT 译注:Ubuntu 的上游发行版)及其衍生发行版升级内核。它包含三个实用程序,一个用于手动编译、安装来自于 http://www.kernel.org网站的源码内核,另一个用于安装来自https://kernel.ubuntu.com 网站的预编译的内核,第三个脚本用于移除旧内核。更多细节请浏览以下链接。

优势: 简单,自动。

缺点: 需要联网,需要重启。

第二部分:无需重启的内核升级

我之前说过,上边所有的方法都需要你重启服务器(LCTT 译注:也可以是桌面版)来启用新内核。如果是个人系统或者测试系统,可以这么办。但对于无法停机的生产环境系统该怎么办呢?一点问题没有,这时候 实时补丁 livepatching 就派上用场了。

实时补丁(或者叫热补丁)允许你在不重启的情况下安装 Linux 更新或补丁,使你的服务器处于最新的安全级别。这对 web 主机、游戏服务器这类需要不间断在线的服务器来说是很有价值的。事实上,任何情况下,服务器都应该保持在不间断运行的状态下。由于 Linux 供应商只会在出于修复安全漏洞的目的下维护补丁,所以如果安全性是你最关注的问题时,这种方式再适合不过了。

以下两种方法不需要重启,对于生产环境和执行关键任务的 Ubuntu 服务器的 Linux 内核更新非常有用。

方法 6 – 使用 Canonical 实时补丁服务来更新 Linux 内核

Canonical 实时补丁服务可以在不需要重启 Ubuntu 系统的情况下自动应用内核更新、补丁和安全补丁。它可以减少Ubuntu系统的停机时间,并保证系统的安全。Canonical 实时补丁服务可以在安装过程当中或安装之后进行设置。如果你使用的是 Ubuntu 桌面版,软件更新器会自动检查内核补丁的更新,并通知你。在基于控制台的系统中,则需要你定期运行 apt-get update 命令来进行升级。由于需要你手动运行 apt-get upgrade 命令它才会安装内核的安全补丁,所以算是半自动的。

实时补丁对三个及以下系统免费,如果多于三个,你需要升级成名为 Ubuntu Advantage 的企业支持方案套件。这个套件包括 Kernel 实时补丁及以下服务:

  • 扩展安全维护 – Ubuntu 生命周期后的重要安全更新
  • Landscape – 针对大规模使用 Ubuntu 的系统管理工具
  • 知识库 – 由 Ubuntu 专家撰写的私人文章和教程
  • 电话和网站支持

价格

Ubuntu Advantage 包含三种付费计划,即基本计划、标准计划和高级计划。最基础的计划(基本计划)从 单物理节点 225 美元/年单VPS 75美元/年开始计价。对于 Ubuntu 服务器版和桌面版看上去没有按月订阅。你可以在此处浏览所有计划的细节信息。

优势: 简单。半自动化。无需重启。支持三个免费系统。

缺点: 4 个以上主机的话非常昂贵。没有补丁回滚。

开启 Canonical 实时补丁

如果你想在安装后设置实时补丁服务,依照以下方法逐步执行:

https://auth.livepatch.canonical.com/ 获取一个密钥。

$ sudo snap install canonical-livepatch
$ sudo canonical-livepatch enable your-key

方法 7 - 使用 KernelCare 升级 Linux 内核

KernelCare 是最新的实时补丁方案。它是 CloudLinux 推出的产品。KernelCare 可以运行在 Ubuntu 和其他的 Linux 发行版中。它每四个小时检查一遍补丁的发布,并在无需确认的情况下安装它们。如果更新后存在问题,可以将补丁进行回滚。

价格

费用,每台服务器:4 美元/月45 美元/年

跟 Ubuntu 实时补丁相比,KernelCare 看起来非常便宜、实惠。好的方面在于也可以按月订阅。另一个前者不具备的功能是支持其他 Linux 发行版,如 Red Hat、CentOS、Debian、Oracle Linux、Amazon Linux 以及 OpenVZ、Proxmox 等虚拟化平台。

你可以在此处了解 KernelCare 的所有特性和简介,以及所有的付费计划的细节。

优势: 简单。全自动化。覆盖范围更广的操作系统。补丁回滚。无需重启。对非营利组织提供免费许可。价格低廉。

缺点: 不是免费的(除了30天的试用期)。

开启 KernelCare 服务

https://cloudlinux.com/kernelcare-free-trial5 获取一个 30 天免费试用密钥。

执行以下命令开启 KernelCare 并注册秘钥。

$ sudo wget -qq -O - https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash
$ sudo /usr/bin/kcarectl --register KEY

如果你正在寻找一种经济实惠且可靠的商业服务来保持 Linux 服务器上的 Linux 内核更新,那么 KernelCare 是个不错的选择。

由来自 Cloud Linux 的技术撰稿人和内容作者 Paul A. Jacobs 提供。

到此,希望这边文章能对你有所帮助。如果你觉得还有其他的工具和方法需要列在这里,可以在留言区给我们留言。我会根据反馈检查和更新这篇指南的。

接下来会有更多好东西给大家呈现,敬请期待。

Cheers!


via: https://www.ostechnix.com/different-ways-to-update-linux-kernel-for-ubuntu/

作者:SK 选题:lujun9972 译者:mr-ping 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当我们还在体验 Linux 5.5 稳定发行版带来更好的硬件支持时,Linux 5.6 已经来了。

说实话,Linux 5.6 比 5.5 更令人兴奋。即使即将发布的 Ubuntu 20.04 LTS 发行版将自带 Linux 5.5,你也需要切实了解一下 Linux 5.6 内核为我们提供了什么。

我将在本文中重点介绍 Linux 5.6 发布版中值得期待的关键更改和功能:

Linux 5.6 功能亮点

当 Linux 5.6 有新消息时,我会努力更新这份功能列表。但现在让我们先看一下当前已知的内容:

1、支持 WireGuard

WireGuard 将被添加到 Linux 5.6,出于各种原因的考虑它可能将取代 OpenVPN

你可以在官网上进一步了解 WireGuard 的优点。当然,如果你使用过它,那你可能已经知道它比 OpenVPN 更好的原因。

同样,Ubuntu 20.04 LTS 将支持 WireGuard

2、支持 USB4

Linux 5.6 也将支持 USB4

如果你不了解 USB 4.0 (USB4),你可以阅读这份文档

根据文档,“USB4 将使 USB 的最大带宽增大一倍并支持 多并发数据和显示协议 multiple simultaneous data and display protocols 。”

另外,虽然我们都知道 USB4 基于 Thunderbolt 接口协议,但它将向后兼容 USB 2.0、USB 3.0 以及 Thunderbolt 3,这将是一个好消息。

3、使用 LZO/LZ4 压缩 F2FS 数据

Linux 5.6 也将支持使用 LZO/LZ4 算法压缩 F2FS 数据。

换句话说,这只是 Linux 文件系统的一种新压缩技术,你可以选择待定的文件扩展技术。

4、解决 32 位系统的 2038 年问题

Unix 和 Linux 将时间值以 32 位有符号整数格式存储,其最大值为 2147483647。时间值如果超过这个数值则将由于整数溢出而存储为负数。

这意味着对于 32 位系统,时间值不能超过 1970 年 1 月 1 日后的 2147483647 秒。也就是说,在 UTC 时间 2038 年 1 月 19 日 03:14:07 时,由于整数溢出,时间将显示为 1901 年 12 月 13 日而不是 2038 年 1 月 19 日。

Linux kernel 5.6 解决了这个问题,因此 32 位系统也可以运行到 2038 年以后。

5、改进硬件支持

很显然,在下一个发布版中,硬件支持也将继续提升。而支持新式无线外设的计划也同样是优先的。

新内核中将增加对 MX Master 3 鼠标以及罗技其他无线产品的支持。

除了罗技的产品外,你还可以期待获得许多不同硬件的支持(包括对 AMD GPU、NVIDIA GPU 和 Intel Tiger Lake 芯片组的支持)。

6、其他更新

此外,Linux 5.6 中除了上述主要的新增功能或支持外,下一个内核版本也将进行其他一些改进:

  • 改进 AMD Zen 的温度/功率报告
  • 修复华硕飞行堡垒系列笔记本中 AMD CPU 过热
  • 开源支持 NVIDIA RTX 2000 图灵系列显卡
  • 内建 FSCRYPT 加密

Phoronix 跟踪了 Linux 5.6 带来的许多技术性更改。因此,如果你好奇 Linux 5.6 所涉及的全部更改,则可以亲自了解一下。

现在你已经了解了 Linux 5.6 发布版带来的新功能,对此有什么看法呢?在下方评论中留下你的看法。


via: https://itsfoss.com/linux-kernel-5-6/

作者:Ankush Das 选题:lujun9972 译者:LazyWolfLin 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

检查一下你的系统所使用的 Linux 内核版本,你十有八九会发现,按照 Linux 内核官网提供的信息,该内核版本已经达到使用寿命终期(EOL)了。

一个软件一旦达到了使用寿命终期,那么就意味着它再也不会得到 bug 修复和维护了。

这自然会引发一连串问题:为什么我的 Linux 发行版会使用一个已经达到使用寿命终期的内核呢?这样做有没有安全风险?我的系统还安全吗?

下面将逐一解答这些问题。

总结

上游内核维护与你的发行版的内核维护是两个不同的概念。

例如,根据 Linux 内核官网,Linux 内核 4.15 版本可能已经达到使用寿命终期了,但是在 2023 年 4 月之前,Ubuntu 18.04 长期维护版本将会继续使用这个版本,并通过向后移植安全补丁和修复 bug 来提供维护。

检查 Linux 内核版本,以及是否达到使用寿命终期

首先,查看你的系统所使用的 Linux 内核版本:

uname -r

我使用的是 Ubuntu 18.04,输出的 Linux 内核版本如下:

abhishek@itsfoss:~$ uname -r
5.0.0-37-generic

接下来,可以到 Linux 内核官网上看看哪些 Linux 内核版本仍然在维护状态。在网站主页上就可以看到相关信息。

你看到的内核版本状态应该类似于下图:

Linux 内核状态

如果你的内核版本没有列在内核官网主页上,就说明该版本已经达到了使用寿命终期。

可以看到,5.0 内核版本并不在列,这说明该内核版本已经不再得到维护。事实上,该版本在 2019 年 6 月就已经达到使用寿命终期了

不幸的是,Linux 内核的生命周期没有任何规律可循。不是说常规的内核稳定发布版可以得到 X 月的维护、长期维护版本(LTS)可以得到 Y 年的维护。没有这回事。

根据实际需求,可能会存在内核的多个 LTS 版本,其使用寿命终期各不相同。在这个页面上可以查到这些 LTS 版本的相关信息,包括计划的使用寿命终期。

那么问题来了:既然 Linux 内核官网上明确表示 5.0 版本的内核已经达到了使用寿命终期,Ubuntu 为什么还在提供这个内核版本呢?

你的发行版使用的 Linux 内核已经达到了使用寿命终期,但是没关系!

你是否想过,为什么 Ubuntu/Debian/Fedora 等发行版被称为 Linux “发行版”?这是因为,它们“发行” Linux 内核。

这些发行版会对 Linux 内核进行不同的修改,并添加各种 GUI 元素(包括桌面环境、显示服务器等)以及软件,然后再呈现给用户。

按照通常的工作流,Linux 发行版会选择一个内核,提供给其用户,然后在接下来的几个月、几年中,甚至是达到内核的使用寿命终期之后,仍然会继续使用该内核。

这样能够保障安全吗?其实是可以的,因为 发行版会通过向后移植全部的重要修补来维护内核

换句话说,你的 Linux 发行版会确保 Linux 内核没有漏洞和 bug,并且已经通过向后移植获得了重要的新特性。在“过时的旧版本 Linux 内核”上,其实有着数以千计的改动。

如果 Linux 内核网站上说某个内核版本已经达到了使用寿命终期,那么就意味着 Linux 内核的核心维护团队不会再对该内核版本进行升级和打补丁了。

但与此同时,Debian/Ubuntu 或者其他发行版的开发者们会继续工作,通过从(由内核核心团队维护的)更新的内核版本中迁移相关的修改,维持这个老版本的生命力。

重点在于,即使你的发行版看上去是在使用一个已经过时的 Linux 内核,其实该内核也得到了良好的维护,并非是真的过时了。

你是否应该使用最新的稳定内核版本?

新的 Linux 内核稳定版本每隔 2 到 3 个月发布一次,有不少用户跃跃欲试。

实话说,除非有十分充分的理由,否则不应该使用最新版本的稳定内核。你使用的发行版并不会提供这个选项,你也不能指望通过在键盘上敲出 sudo apt give-me-the-latest-stable-kernel 解决问题。

此外,手动安装主流 Linux 内核版本本身就是一个挑战。即使安装成功,之后每次发布 bug 修复的时候,负责更新内核的就会是你了。此外,当新内核达到使用寿命终期之后,你就有责任将它升级到更新的内核版本了。和常规的 Ubuntu 更新不同,内核升级无法通过 apt upgrade 完成。

同样需要记住的是,切换到主流内核之后,可能就无法使用你的发行版提供的一些驱动程序和补丁了。

正如 Greg Kroah-Hartman所言,“你能使用的最好的内核,就是别人在维护的内核。”除了你的 Linux 发行版之外,又有谁更胜任这份工作呢!

希望你对这个主题已经有了更好的理解。下回发现你的系统正在使用的内核版本已经达到使用寿命终期的时候,希望你不会感到惊慌失措。

欢迎在下面的评论区中留下你的疑问或建议。


via: https://itsfoss.com/why-distros-use-old-kernel/

作者:Abhishek Prakash 选题:lujun9972 译者:chen-ni 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Oracle Linux 内核开发人员 Steve Sistare 参与了这场有关内核调度程序改进的讨论。

通过可扩展的任务窃取进行负载平衡

Linux 任务调度程序通过将唤醒的任务推送到空闲的 CPU,以及在 CPU 空闲时从繁忙的 CPU 中拉取任务来平衡整个系统的负载。在大型系统上的推送侧和拉取侧,有效的伸缩都是挑战。对于拉取,调度程序搜索连续的更大范围中的所有 CPU,直到找到过载的 CPU,然后从最繁忙的组中拉取任务。这代价非常昂贵,在大型系统上要花费 10 到 100 微秒,因此搜索时间受到平均空闲时间的限制,并且某些范围不会被搜索。并非总能达到平衡,而且闲置的 CPU 依旧闲置。

我实现了一种备用机制,该机制在 idle_balance() 中的现有搜索中自身受限并且没有找到之后被调用。我维护了一个过载的 CPU 的位图,当可运行的 CFS 任务计数超过 1 时,CPU 会设置该位。这个位图是稀疏的,每个高速缓存线的有效位数量有限。当许多线程同时设置、清除和访问元素时,这可以减少缓存争用。每个末级缓存都有一个位图。当 CPU 空闲时,它将搜索该位图以查找第一个具有可迁移任务的过载 CPU,然后将其窃取。这种简单的窃取会比单独的 idle_balance() 产生更高的 CPU 利用率,因为该搜索的成本很便宜,花费 1 到 2 微秒,因此每次 CPU 即将空闲时都可以调用它。窃取不会减轻全局最繁忙的队列的负担,但是它比根本不执行任何操作要好得多。

结果

偷窃仅在调度程序代码中占用少量 CPU 开销即可提高利用率。在以下实验中,以不同数量的组(每个组 40 个任务)运行 hackbench,并对每次运行结果显示 /proc/schedstat 中的增量(按 CPU 平均),并增加了这些非标准的统计信息:

  • %find:在旧函数和新函数中花费的时间百分比,这些函数用于搜索空闲的 CPU 和任务以窃取并设置过载的 CPU 位图。
  • steal:任务从另一个 CPU 窃取的次数。经过的时间增加了 8% 到 36%,最多增加了 0.4% 的发现时间。

 title=

​​如下图的绿色曲线所示,新内核的 CPU 繁忙利用率接近 100%,作为比较的基线内核是橙色曲线: ​​

根据负载的不同,窃取可将 Oracle 数据库 OLTP 性能提高多达 9%,并且我们已经看到 MySQL、Pgsql、gcc、Java 和网络方面有了一些不错的改进。通常,窃取对上下文切换率高的工作负载最有帮助。

代码

截至撰写本文时,这项工作尚未完成,但最新的修补程序系列位于 https://lkml.org/lkml/2018/12/6/1253。如果你的内核是使用 CONFIG_SCHED_DEBUG=y 构建的,则可以使用以下命令验证其是否包含窃取优化:

# grep -q STEAL /sys/kernel/debug/sched_features && echo Yes
Yes

如果要尝试使用,请注意,对于具有 2 个以上 NUMA 节点的系统,禁用了窃取功能,因为 hackbench 在此类系统上发生了回归,正如我在 https://lkml.org/lkml/2018/12/6/1250 中解释的那样。但是,我怀疑这种影响是特定于 hackbench 的,并且窃取将有助于多节点系统上的其他工作负载。要尝试使用它,请用内核参数 sched_steal_node_limit=8(或更大)重新启动。

进一步工作

在将基本盗用算法推向上游之后,我正在考虑以下增强功能:

  • 如果在末级缓存中进行窃取找不到候选者,在 LLC 和 NUMA 节点之间进行窃取。
  • 维护稀疏位图以标识 RT 调度类中的偷窃候选者。当前 pull_rt_task() 搜索所有运行队列。
  • idle_balance() 中删除核心和套接字级别,因为窃取会处理这些级别。当支持跨 LLC 窃取时,完全删除 idle_balance()
  • 维护位图以标识空闲核心和空闲 CPU,以实现推平衡。

这篇文章最初发布于 Oracle Developers Blog


via: https://www.linux.com/blog/can-better-task-stealing-make-linux-faster

作者:Oracle 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

内核持续集成(CKI)项目旨在防止错误进入 Linux 内核。

Linux 内核的持续集成测试 一文中,我介绍了 内核持续集成 Continuous Kernel Integration (CKI)项目及其使命:改变内核开发人员和维护人员的工作方式。本文深入探讨了该项目的某些技术方面,以及这所有的部分是如何组合在一起的。

从一次更改开始

内核中每一项令人兴奋的功能、改进和错误都始于开发人员提出的更改。这些更改出现在各个内核存储库的大量邮件列表中。一些存储库关注内核中的某些子系统,例如存储或网络,而其它存储库关注内核的更多方面。 当开发人员向内核提出更改或补丁集时,或者维护者在存储库本身中进行更改时,CKI 项目就会付诸行动。

CKI 项目维护的触发器用于监视这些补丁集并采取措施。诸如 Patchwork 之类的软件项目通过将多个补丁贡献整合为单个补丁系列,使此过程变得更加容易。补丁系列作为一个整体历经 CKI 系统,并可以针对该系列发布单个报告。

其他触发器可以监视存储库中的更改。当内核维护人员合并补丁集、还原补丁或创建新标签时,就会触发。测试这些关键的更改可确保开发人员始终具有坚实的基线,可以用作编写新补丁的基础。

所有这些更改都会进入 GitLab CI 管道,并历经多个阶段和多个系统。

准备构建

首先要准备好要编译的源代码。这需要克隆存储库、打上开发人员建议的补丁集,并生成内核配置文件。这些配置文件具有成千上万个用于打开或关闭功能的选项,并且配置文件在不同的系统体系结构之间差异非常大。 例如,一个相当标准的 x86\_64 系统在其配置文件中可能有很多可用选项,但是 s390x 系统(IBM zSeries 大型机)的选项可能要少得多。在该大型机上,某些选项可能有意义,但在消费类笔记本电脑上没有任何作用。

内核进一步转换为源代码工件。该工件包含整个存储库(已打上补丁)以及编译所需的所有内核配置文件。 上游内核会打包成压缩包,而 Red Hat 的内核会生成下一步所用的源代码 RPM 包。

成堆的编译

编译内核会将源代码转换为计算机可以启动和使用的代码。配置文件描述了要构建的内容,内核中的脚本描述了如何构建它,系统上的工具(例如 GCC 和 glibc)完成构建。此过程需要一段时间才能完成,但是 CKI 项目需要针对四种体系结构快速完成:aarch64(64 位 ARM)、ppc64le(POWER)、s390x(IBM zSeries)和 x86\_64。重要的是,我们必须快速编译内核,以便使工作任务不会积压,而开发人员可以及时收到反馈。

添加更多的 CPU 可以大大提高速度,但是每个系统都有其局限性。CKI 项目在 OpenShift 的部署环境中的容器内编译内核;尽管 OpenShift 可以实现高伸缩性,但在部署环境中的可用 CPU 仍然是数量有限的。CKI 团队分配了 20 个虚拟 CPU 来编译每个内核。涉及到四个体系结构,这就涨到了 80 个 CPU!

另一个速度的提高来自 ccache 工具。内核开发进展迅速,但是即使在多个发布版本之间,内核的大部分仍保持不变。ccache 工具进行编译期间会在磁盘上缓存已构建的对象(整个内核的一小部分)。稍后再进行另一个内核编译时,ccache 会查找以前看到的内核的未更改部分。ccache 会从磁盘中提取缓存的对象并重新使用它。这样可以加快编译速度并降低总体 CPU 使用率。现在,耗时 20 分钟编译的内核在不到几分钟的时间内就完成了。

测试时间

内核进入最后一步:在真实硬件上进行测试。每个内核都使用 Beaker 在其原生体系结构上启动,并且开始无数次的测试以发现问题。一些测试会寻找简单的问题,例如容器问题或启动时的错误消息。其他测试则深入到各种内核子系统中,以查找系统调用、内存分配和线程中的回归问题。

大型测试框架,例如 Linux Test Project(LTP),包含了大量测试,这些测试在内核中寻找麻烦的回归问题。其中一些回归问题可能会回滚关键的安全修复程序,并且进行测试以确保这些改进仍保留在内核中。

测试完成后,关键的一步仍然是:报告。内核开发人员和维护人员需要一份简明的报告,准确地告诉他们哪些有效、哪些无效以及如何获取更多信息。每个 CKI 报告都包含所用源代码、编译参数和测试输出的详细信息。该信息可帮助开发人员知道从哪里开始寻找解决问题的方法。此外,它还可以帮助维护人员在漏洞进入内核存储库之前知道何时需要保留补丁集以进行其他查看。

总结

CKI 项目团队通过向内核开发人员和维护人员提供及时、自动的反馈,努力防止错误进入 Linux 内核。这项工作通过发现导致内核错误、安全性问题和性能问题等易于找到的问题,使他们的工作更加轻松。


via: https://opensource.com/article/19/8/linux-kernel-testing

作者:Major Hayden 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出