介绍3.3和3.4 Linux内核

Linux®内核的3.3和3.4发行版包含令人印象深刻的功能集,但它们也是不祥的里程碑。 3.3版本是第一个超过1500万行代码的Linux版本(使用确实存在缺陷的措施)。 如果减去Linux内核的变体部分(例如驱动程序,与体系结构相关的代码和各种工具),则总数将降至400万以下,这本身就是一个庞然大物。

Linux内核的增长速度(自2008年以来增长了50%)以及这种增长是否可能开始对Linux内核的效率(功能和性能)都产生负面影响,这个里程碑可能不祥。 功率和性能往往不是按补丁来衡量的,因此错误很容易渗入已发布的内核并持续一段时间(例如,PCI Express [PCIe]主动状态电源管理电源问题已在3.3中修复,但在内核中存在了一年)。

在不到21年的时间里,Linux已从10,000多行代码增长到超过1,500万行。 尽管此代码大部分位于驱动程序子树中,但内核的复杂性随其大小而增加。 不久的将来,这种扩展可能会导致内核更改,以消除复杂性并提高其可维护性。

如图1所示,Linux内核自2001年2.4版发布以来发展Swift(从3,377,902行增加到2012年的14,998,651行)。 在此期间,每年向内核添加大约一百万行新代码。 这是一个惊人的数字,应该引起任何软件开发人员的恐惧。

图1.从2.2版(2001年)到3.3版(2012年)的内核大小

引用Torvalds本人的观点是,随着内核的增长,它担心将来的维护。 内核中大约有400万行,可能需要增强当前的内核管理方法。

Android整合

3.3内核中最大的新闻是将Google Android引入主线内核。 这种集成将在Linux 3.4中继续进行,但是足够多的Android fork位于主线上,以支持引导Android用户空间(请参见图2 )。 Android内核是Linux内核的分支,它具有一些其他功能,这些功能对于电源和资源高效的操作(电源受限的移动设备要求)是必需的。 尽管重点放在ARM体系结构上,但也支持x86(例如Google TV项目中使用的x86)。

图2.在Oracle VM VirtualBox上使用Android x86引导到Android用户空间

Linux维护者和Google之间的协作问题导致Android的独立开发已经持续了几年。 在2011-2012年冬季,创建了Android Mainlining项目,该项目的目的是将Android驱动程序和功能集成到主线Linux内核中。 这项工作是在3.3版本中引入的,并将在3.5版本中找到进一步的集成。

Android为Linux创建了一些增强功能,这些增强功能对于在移动环境中具有竞争力是必不可少的。 示例包括快速进程间通信(IPC),改进的应用程序内存管理以及对大型连续物理内存管理问题的解决方案。

名为Binder的驱动程序是Android对IPC的回答。 Android开发人员可以轻松地重用现有方法,但是Binder包含不可用的独特功能(包括零拷贝消息传递和凭证传递)。 在Android中,应用程序永远不会退出,因此它们会继续执行,直到内核将其删除为止。 收缩器作为一种机制,可以在内存不足时提高内存利用率。 应用程序注册一个被调用以最小化内存的函数,内核在内存紧张时调用这些函数。 Android的另一个新增功能是Pmem,它提供了在需要时(例如相机功能所需的缓冲区)分配大型物理连续缓冲区的功能。 Pmem会为这种类型的内存分配导出用户空间驱动程序。 其他功能也已集成,但特定于移动域。

某些功能尚未进入内核,例如唤醒锁(wakelock) —一种电源管理功能,它使组件可以防止系统进入低功耗状态(例如,如果正在进行更新)。 没有唤醒锁不会阻止Android系统启动,但会很快耗尽电池电量。

随着Android重新合并到Linux内核中,这再次说明了Linux内核的灵活性(从嵌入式系统和移动设备到最大的大型机和超级计算机)。 Linux目前拥有超过3亿台Android设备,Linux继续发展为通用平台。

打开vSwitch

Linux仍然是虚拟化的首选平台。 除了成为世界一流的操作系统之外,Linux还兼具世界一流的管理程序。 Open vSwitch的主线通过为虚拟化和基础架构即服务(IaaS)用户提供开箱即用的体验来进一步提升这一地位。

虚拟交换机无非是物理交换机的软版本。 回想一下,平台虚拟化(由基于内核的虚拟机[KVM]或Xen实施)使您可以在虚拟机管理程序上运行多个操作系统实例(作为VM),将虚拟平台划分为各种虚拟平台。 虚拟交换机的引入通过引入网络基础架构的虚拟形式扩展了这种抽象。 虚拟交换机为VM提供了一种通过虚拟网络相互通信的有效手段。 Open vSwitch将这种抽象扩展到虚拟主机之间,从而允许一台物理主机上的VM与另一台物理主机上的VM透明地进行通信。

在Open vSwitch中,您会发现一组丰富的虚拟网络功能,包括服务质量,虚拟LAN,流量过滤和隔离以及各种监视和控制协议(例如OpenFlow和NetFlow)。 尽管Linux具有现有的虚拟交换机实现(称为Linux Bridge ),但是Open vSwitch是功能更丰富的解决方案(包括多主机管理),因此是受欢迎的。 请参阅相关主题以获取更多信息。

文件系统变更

内核3.3版对用户和开发人员的许多文件系统都有一些文件系统更改。 对于用户,可以通过I / O控件为第四扩展文件系统(ext4)提供在线调整大小( 在线意味着系统保持运行状态)。 这意味着整个调整大小是在内核中执行的,这导致调整大小更快。

对于B树文件系统(Btrfs),平衡操作(用于更改元数据的基础结构,例如是否添加了新驱动器)已被重写,支持暂停和恢复。 Btrfs增强功能在3.4版中继续使用新的数据恢复工具(btrfs-restore),该工具可用于从损坏的btrfs文件系统中提取文件。 此外,在3.4中,Btrfs进行了多项性能改进,并改进了错误处理(包括消除紧急情况,将其替换为优美的错误管理)。 在3.4之前的版本中,由于Btrfs具有写时复制机制,因此不能在VM中作为文件系统正常运行。 已进行调整以最大程度地减少这些干扰。

还对独立磁盘的软件冗余阵列(RAID)进行了更新,以支持热替换,该替换允许将一个卷(标记为mdadm替换)中的数据迁移到另一个卷,以便可以删除原始卷。 最后,3.4添加了对QNX4文件系统的只读支持。

对于开发人员而言,现在可以将错误注入到网络文件系统中,以测试客户端从错误中恢复的能力(通过sysfs)。 对于Btrfs开发人员,已添加了用于完整性检查的新实用程序,该实用程序可用于识别无效的Write请求,并应有助于更快地解决错误。

网络功能增强

由于Linux处于网络功能的最前沿,因此内核版本3.3中提供了一些增强功能。

对于低延迟基础结构(例如高性能计算),已经集成了SCSI远程直接内存访问(RDMA)协议目标驱动程序。 安全远程密码是一种协议,允许您将RDMA用作块存储设备的基础传输。 这种特殊的添加使Linux可以使用SRP公开块设备,远程启动程序可以通过SRP连接到块I / O。 RDMA受InfiniBand支持,在高性能群集中非常常见。

随机早期检测(RED)数据包调度程序使用Sally Floyd,Ramakrishna Gummadi和Scott Shenker的新算法Adaptive RED进行了修改。 事实证明,RED是一种有效的数据包调度程序算法(根据可用队列大小,它丢弃无法缓冲的数据包),但发现它对网络内的拥塞程度敏感。 RED将队列大小视为丢包的概率,因此在空队列或接近空队列中,所有包都被接受,但是当队列变满时,所有包都将被丢弃。 自适应RED通过测量算法丢弃数据包的积极程度来动态更改丢弃的可能性。 您可以在Adaptive RED论文中阅读有关此算法的更多信息, Resource提供了链接。

添加了新的分组网络设备,该设备替代了较早的内核绑定驱动程序。 成组设备允许创建虚拟接口,这些接口聚合来自多个物理以太网设备的可用带宽(由链路聚合和802.1AX定义)。 该设备可用于网络性能(聚合多个物理设备)或提供冗余(透明故障转移)。 当前支持两种模式,允许在物理端口之间简单地循环分配流量,或者可以将端口定义为活动备份,以在主网络连接丢失的情况下路由所有流量。

在大量的网络增强功能中,另一个有趣的变化是为控制组(或cgroups )增加了TCP缓冲区限制。 Cgroup以多种方式使用,例如将资源隔离到VM。 此更改允许在cgroup内同时跟踪用户空间内存和内核内存(例如用于TCP缓冲区的内存),以更好地管理系统资源。

其他有趣的变化

Linux 3.3还引入了并非特定于文件系统或网络的更改。 在新架构方面,现在直接支持Texas Instruments C6x处理器(而不是作为单独的项目)。 C6x是单核和多核数字信号处理器,基于超长指令字,但缺乏诸如对称多处理和高速缓存一致性等现代功能。 它还缺少内存管理单元(MMU)。 尽管有这些体系结构上的遗漏,C6x系列还是能够实现的,它具有丰富的外围设备和片上加速器(安全性,快速傅立叶变换等)。 3.4版本支持最新的GPU处理器,例如Nvidia的Kepler和AMD的最新Radeon和Trinity版本。

ARM体系结构子树现在使用大的物理地址扩展,并引入了对芯片上Nvidia Tegra 3服务的支持,当ARM在低功耗服务器领域挑战英特尔时,这是理想的选择。 3.3中还提供了对AMD I / O MMU实现的一些改进,这些改进改进了对不同页面大小的管理,并提高了设备​​的安全性(设备的分组或隔离)。 此外,虚拟功能I / O增强了KVM将设备映射到KVM guest虚拟机的能力。 最后,对S390架构进行了更新,以支持对高达64TB RAM的访问(超出了之前的不足4TB的限制)。

性能监控单元(PMU)现在已针对KVM虚拟化,因此来宾现在可以访问其虚拟平台的PMU。 这为每个来宾提供了几个有用的性能事件,包括退出的指令,缓存引用和未命中以及已执行和未命中的分支指令。 Xen的另一个有用的虚拟化功能是支持安全丢弃。 安全丢弃意味着有问题的扇区将被永久删除,而不是简单地标记为空闲。 最后,各种虚拟I / O驱动程序(blk,net,balloon和控制台)现在支持高级配置和Power Interface S4睡眠状态,这意味着来宾VM可以在Xen上Hibernate。

对于可能难以调试的内存损坏问题,已添加了一个名为CONFIG_DEBUG_PAGEALLOC的新配置项。 此更改将检查CPU对未分配页面的访问,并可能导致性能下降。

展望未来

Linux继续向前发展,随着3.4的推出,3.5候选版本很快将在2012年8月左右结束。Linux3.5包含了几个有趣的新功能。

Btrfs继续得到增强,这一次是通过文件系统内的优化回写处理实现的。 标准Linux文件系统(ext4)也已得到增强,可以向元数据添加校验和以帮助识别数据篡改。 Linux可能很快会通过FireWire或USB附加SCSI协议支持SCSI目标。 最后,将支持用户空间探针(与SystemTap一起使用来分析用户空间程序的行为)。 随着候选版本向8月版本的发展,预计会有更多更改。


翻译自: https://www.ibm.com/developerworks/opensource/library/l-33linuxkernel/index.html

你可能感兴趣的:(内核,网络,python,linux,java)