标签 内核 下的文章

Oracle 的 Michele Casey 宣布其 Unbreakable Enterprise Kernel (UEK) 4 发布!UEK 可用于 Oracle Linux 6 和 Oracle Linux 7 ,它们是基于 Centos 的衍生版。

UEK 4 带来了不少性能和功能方面的重大更新,包括 CPU 调度、自动 NUMA 平衡以及众所期待的 内核热补丁 Real-Time Kernel Patching 功能。

UEK 4 中的内核热补丁功能来自于 Linux 内核 4.1 主线内核的 Ksplice 开源扩展,它可以让用户无需重启系统即可更新内核,这改进了系统安全和简化了云架构的管理。去年4月发布的 Linux 4.0 内核合并了 Live Patching,为实时内核打补丁功能提供了必要的内核模块 API 和用户空间 API/ABI。

除此之外,UEK 4 还带来了 LZ4 压缩算法、低延迟网络 polling等新的功能。以及在系统安全方面做了极大增强,包括新的随机数系统调用、内核地址空间随机化、对 SELinux 、nftables 等程序的更新等。

这或许是一个神奇的巧合,也许是预言。

如果你相信《终结者》电影中情节,那么我们很快就会看到世界末日了 :D 。 看起来,天网所控制的 T-800 机器人运行的是 Linux 内核 4.x,而 Linus Torvalds 先生刚刚释放了最新的 4.1.15内核——这正是电影中说的,T-800 机器人的内核版本。

Linus Torvalds 前一段时间说,他考虑启动 Linux 内核 4.x 版本,而不是发布 3.20 版本,因为他不想再看到像 2.6.32.x 这样啰嗦的版本号了。当时他还没有下定决心,于是在 Google+发起了投票,看看人们的选择。

当然,你现在已经知道了最后的投票结果和最终的决定了,Linux 内核走上了 4.x 分支。他说,他计划让 4.x 分支成为一个稳定的分支,因此要求开发者们专注于修复而不是添加新功能。

而在另一方面,终结者 T-800 运行的版本是 4.1.15,所以,Linus Torvalds 做出了一个非常“艰难的决定”,世界末日就靠它了:D。

终结者当然应该运行 Linux 啦

如果 天网 Skynet 真的那么无所不在,那么它显然应该是基于 Linux 的,同样, 终结者 Terminator 这样的 半机器人 cyborg 显然也应该是基于 Linux。你总不会想让这些终结者在攻击人类最后一个基地的时候出现蓝屏或者升级时崩溃吧?

一个用户在 Reddit 上贴了一张来自《终结者》电影的截屏(不清楚具体来自哪里),可以看到 阿诺德 · 施瓦辛格 Arnold Schwarzenegger 所饰演的 T-800 半机器人运行的正是 Linux 内核 4.1.15,具体内核型号:Linux 4.1.15-1.1381\_SKYN12nnmp(slawes.sky.net)。这可是不是你炕头上的那台老式计算机,而是天网版的!

那么问题来了:如果 Linus Torvalds 还在不断的发布内核更新,天网会升级它的系统吗?会让它的半机器人使用这个采用 GPL 许可证的 OS 吗——这可是要开源出来的。

提问:我想要知道Linux系统中内核内置的模块,以及每个模块有哪些参数。有什么方法可以得到内置模块和设备驱动的列表,以及它们的详细信息呢?

现代Linux内核正在随着时间变化而迅速增长,以支持大量的硬件、文件系统和网络功能。在此期间,“可加载模块(loadable kernel modules,[LKM])”的引入防止内核变得越来越臃肿,以及在不同的环境中灵活地扩展功能及硬件支持,而不必重新构建内核。

最新的Linux发行版的内核只带了相对较小的“内置模块(built-in modules)”,其余的特定硬件驱动或者自定义功能作为“可加载模块”来让你选择地加载或卸载。

内置模块被静态地编译进了内核。不像可加载内核模块可以动态地使用modprobeinsmodrmmodmodinfo或者lsmod等命令地加载、卸载、查询模块,内置的模块总是在启动时就加载进了内核,不会被这些命令管理。

找出内置模块列表

要得到内置模块列表,运行下面的命令。

$ cat /lib/modules/$(uname -r)/modules.builtin 

你也可以用下面的命令来查看有哪些内置模块:

找出内置模块参数

每个内核模块无论是内置的还是可加载的都有一系列的参数。对于可加载模块,modinfo命令可以显示它们的参数信息。然而这个命令对内置模块没有用。你会得到下面的错误。

modinfo: ERROR: Module XXXXXX not found.

如果你想要查看内置模块的参数,以及它们的值,你可以在 /sys/module 下检查它们的内容。

在 /sys/module目录下,你可以找到内核模块(包含内置和可加载的)命名的子目录。进入每个模块目录,这里有个“parameters”目录,列出了这个模块所有的参数。

比如你要找出tcp\_cubic(内核默认的TCP实现)模块的参数。你可以这么做:

$ ls /sys/module/tcp_cubic/parameters 

接着阅读这个文件查看每个参数的值。

$ cat /sys/module/tcp_cubic/parameters/tcp_friendliness 


via: http://ask.xmodulo.com/find-information-builtin-kernel-modules-linux.html

作者:Dan Nanni 译者:geekpi 校对:wxy

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

当 4.2 内核还没有正式发布的时候,Greg Kroah-Hartman 就为他维护的各种子系统模块打开了4.3 的合并窗口。

之前 Greg KH 发起的 拉取请求 pull request 里包含了 linux 4.3 的合并窗口更新,内容涉及驱动核心、TTY/串口、USB 驱动、字符/杂项以及暂存区内容。这些拉取申请没有提供任何震撼性的改变,大部分都是改进/附加/修改bug。暂存区内容又是大量的修正和清理,但是还是有一个新的驱动子系统。

Greg 提到了4.3 的暂存区改变,“这里的很多东西,几乎全部都是细小的修改和改变。通常的 IIO 更新和新驱动,以及我们已经添加了的 MOST 驱动子系统,已经在源码树里整理了。ozwpan 驱动最终还是被删掉,因为它很明显被废弃了而且也没有人关心它。”

MOST 驱动子系统是 面向媒体的系统传输 Media Oriented Systems Transport 的简称。在 linux 4.3 新增的文档里面解释道,“MOST 驱动支持 LInux 应用程序访问 MOST 网络: 汽车信息骨干网 Automotive Information Backbone ,高速汽车多媒体网络的事实上的标准。MOST 定义了必要的协议、硬件和软件层,提供高效且低消耗的传输控制,实时的数据包传输,而只需要使用一个媒介(物理层)。目前使用的媒介是光线、非屏蔽双绞线(UTP)和同轴电缆。MOST 也支持多种传输速度,最高支持150Mbps。”如文档解释的,MOST 主要是关于 Linux 在汽车上的应用。

当 Greg KH 发出了他为 Linux 4.3 多个子系统做出的更新,但是他还没有打算提交 KDBUS 的内核代码。他之前已经放出了 [linux 4.3 的 KDBUS] 的开发计划,所以我们将需要等待官方的4.3 合并窗口,看看会发生什么。


via: http://www.phoronix.com/scan.php?page=news_item&px=Linux-4.3-Staging-Pull

作者:Michael Larabel 译者:oska874 校对:wxy

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

问题:我有个 Linux 进程运行在多核处理器系统上。怎样才能找出哪个 CPU 内核正在运行该进程?

当你在 多核 NUMA 处理器上运行需要较高性能的 HPC(高性能计算)程序或非常消耗网络资源的程序时,CPU/memory 的亲和力是限度其发挥最大性能的重要因素之一。在同一 NUMA 节点上调度最相关的进程可以减少缓慢的远程内存访问。像英特尔 Sandy Bridge 处理器,该处理器有一个集成的 PCIe 控制器,你可以在同一 NUMA 节点上调度网络 I/O 负载(如网卡)来突破 PCI 到 CPU 亲和力限制。

作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个 CPU 内核(或 NUMA 节点)上运行。

这里有几种方法可以 找出哪个 CPU 内核被调度来运行给定的 Linux 进程或线程

方法一

如果一个进程使用 taskset 命令明确的被固定(pinned)到 CPU 的特定内核上,你可以使用 taskset 命令找出被固定的 CPU 内核:

$ taskset -c -p <pid>

例如, 如果你对 PID 5357 这个进程有兴趣:

$ taskset -c -p 5357  
pid 5357's current affinity list: 5

输出显示这个过程被固定在 CPU 内核 5上。

但是,如果你没有明确固定进程到任何 CPU 内核,你会得到类似下面的亲和力列表。

pid 5357's current affinity list: 0-11

输出表明该进程可能会被安排在从0到11中的任何一个 CPU 内核。在这种情况下,taskset 不能识别该进程当前被分配给哪个 CPU 内核,你应该使用如下所述的方法。

方法二

ps 命令可以告诉你每个进程/线程目前分配到的 (在“PSR”列)CPU ID。

$ ps -o pid,psr,comm -p <pid>  
  PID PSR COMMAND  
 5357  10 prog

输出表示进程的 PID 为 5357(名为"prog")目前在CPU 内核 10 上运行着。如果该过程没有被固定,PSR 列会根据内核可能调度该进程到不同内核而改变显示。

方法三

top 命令也可以显示 CPU 被分配给哪个进程。首先,在top 命令中使用“P”选项。然后按“f”键,显示中会出现 "Last used CPU" 列。目前使用的 CPU 内核将出现在 “P”(或“PSR”)列下。

$ top -p 5357

相比于 ps 命令,使用 top 命令的好处是,你可以连续监视随着时间的改变, CPU 是如何分配的。

方法四

另一种来检查一个进程/线程当前使用的是哪个 CPU 内核的方法是使用 htop 命令

从命令行启动 htop。按 键,进入"Columns",在"Available Columns"下会添加 PROCESSOR。

每个进程当前使用的 CPU ID 将出现在“CPU”列中。

请注意,所有以前使用的命令 taskset,ps 和 top 分配CPU 内核的 IDs 为 0,1,2,...,N-1。然而,htop 分配 CPU 内核 IDs 从 1开始(直到 N)。


via: http://ask.xmodulo.com/cpu-core-process-is-running.html

作者:Dan Nanni 译者:strugglingyouth 校对:wxy

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

提问:过去我已经在我的Ubuntu上升级了几次内核。现在我想要删除这些旧的内核镜像来节省我的磁盘空间。如何用最简单的方法删除Ubuntu上先前版本的内核?

在Ubuntu上,有几个方法来升级内核。在Ubuntu桌面中,软件更新允许你每天检查并更新到最新的内核上。在Ubuntu服务器上,最为重要的安全更新项目之一就是 unattended-upgrades 软件包会自动更新内核。然而,你也可以手动用apt-get或者aptitude命令来更新。

随着时间的流逝,持续的内核更新会在系统中积聚大量的不再使用的内核,浪费你的磁盘空间。每个内核镜像和其相关联的模块/头文件会占用200-400MB的磁盘空间,因此由不再使用的内核而浪费的磁盘空间会快速地增加。

GRUB管理器为每个旧内核都维护了一个GRUB入口,以备你想要使用它们。

作为磁盘清理的一部分,如果你不再使用这些,你可以考虑清理掉这些镜像。

如何清理旧内核镜像

在删除旧内核之前,记住最好留有2个最近的内核(最新的和上一个版本),以防主要的版本出错。现在就让我们看看如何在Ubuntu上清理旧内核。

在Ubuntu内核镜像包含了以下的包。

  • linux-image-: 内核镜像
  • linux-image-extra-: 额外的内核模块
  • linux-headers-: 内核头文件

首先检查系统中安装的内核镜像。

$ dpkg --list | grep linux-image
$ dpkg --list | grep linux-headers

在列出的内核镜像中,你可以移除一个特定的版本(比如3.19.0-15)。

$ sudo apt-get purge linux-image-3.19.0-15
$ sudo apt-get purge linux-headers-3.19.0-15

上面的命令会删除内核镜像和它相关联的内核模块和头文件。

注意如果你还没有升级内核那么删除旧内核会自动触发安装新内核。这样在删除旧内核之后,GRUB配置会自动升级来移除GRUB菜单中相关GRUB入口。

如果你有很多没用的内核,你可以用shell表达式来一次性地删除多个内核。注意这个括号表达式只在bash或者兼容的shell中才有效。

$ sudo apt-get purge linux-image-3.19.0-{18,20,21,25}
$ sudo apt-get purge linux-headers-3.19.0-{18,20,21,25}

上面的命令会删除4个内核镜像:3.19.0-18、3.19.0-20、3.19.0-21 和 3.19.0-25。

如果GRUB配置由于任何原因在删除旧内核后没有正确升级,你可以尝试手动用update-grub2命令来更新配置。

$ sudo update-grub2

现在就重启来验证GRUB菜单是否已经正确清理了。


via: http://ask.xmodulo.com/remove-kernel-images-ubuntu.html

作者:Dan Nanni 译者:geekpi 校对:wxy

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