Linux 3.14

工作重心转向 Linux 内核及 mainline 中的虚拟化技术,所以会持续关注内核的发展 :-D

Linux 3.14 于3月30日发布,澳洲时间是3月份的最后一天,囧

3.14 中的显著特性:

  1. 添加了 Deadline scheduling 调度器
    SCHED_FIFO 先进先出和 SCHED_RR round-robin 循环的基础上添加了 SCHED_DEADLINE 以便于更有效地处理 real-time 任务。有别于传统进程优先级的概念 deadline 提供了 {runtime,period,deadline} 三个参数。
    简单的说(不翻译了,比较拗口): A SCHED_DEADLINE task is guaranteed to receive “runtime” microseconds of execution time every “period” microseconds, and these “runtime” seconds are available within “deadline” microseconds from the beginning of the period. 详细的文档见 Documentation/scheduler/sched-deadline.txt
  2. zram 内存压缩机制已稳定
    zram 和 3.11 中加入的 zswap 是两码事。zram 把内存作为块设备来用,所有写入的数据都会被压缩。若 zram 块设备被当作 swap 使用,相当于系统压缩要 swap out 到磁盘的内存。可以作小内存系统的内存压缩机制,以提高系统的响应速度。已使用 zram 的有 Android 4.4, CyanogenMod, Chrome OS 等。
  3. Btrfs 增加了 inode 属性,多个新的挂载选项,以及在 /sys/fs/btrfs 发布文件系统内部实现信息(部分可直接改)
    以 xattrs 的形式给 inode 增加 key - value pair 属性,用来保存属性,这些属性是可以被继承的。3.14 中只加入了 compression 属性,值可以是 lzozlib
    添加了挂载选项: {barrier,datacow,datasum,noautodefrag,nodiscard,noenospc_debug,noflushoncommit,noinode_cache,treelog}
    /sys/fs/btrfs 下发布内部实现信息,其中部分是可以直接 on the fly 修改的。
  4. Userspace locking validator
    实现了在用户空间内运行 Linux locking validator 这样的话就可以 debug 用户空间程序的锁问题。
  5. 内核地址空间随机化
    允许在解压缩内核时随机化物理和虚拟地址空间,目的是为了杜绝依赖内核内部实现/地址空间的攻击。
  6. TCP automatic corking
    当应用程序连续做小碎片 write() / sendmsg() 系统调用时 Linux 内核会尽可能尝试合并这些小碎片来减少发出包的数量。参数 /proc/sys/net/net/ipv4/tcp_autocorking 用来控制这一特性,默认开启。
  7. Core
    kexec 可以被禁用,参数为 kexec_load_disabled
    swap - 加入了一个简单的机制来检测不恰当的 swapin readahead 主要是针对 SSD
    sysfs / kernfs - 核心的 sysfs 实现将被分离到 kernfs 这样的话其它 non-kobject 用户也可以使用
    cpufreq - 在 cpufreq core 中添加软硬件 boot frequency 支持
  8. 内存管理
    /proc/meminfo 提供了 MemAvailable - 并非简单将 free 和 cached 相加,这样的计算方法是错误的,因为 Cached 中包括没法释放的内存(例如 tmpfs ramfs 共享的内存区段等),且不包括 reclaimable slab memory 。现在的估算可为新应用使用的物理内存的方法是 MemFree + Active(file) + Inactive(file) + SReclaimable + /proc/zoneinfo 中的 low watermarks
    改进了文档中对于 swappiness = 0 的解释 -> A value of 0 instructs the kernel not to
    initiate swap until the amount of free and file-backed pages is less
    than the high water mark in a zone. 详见: Documentation/sysctl/vm.txt
  9. 网络(实在太多,只挑了几个)
    net-gre-gro - 给 GRO stack 添加 GRE 支持
    给 UDP 封装协议添加 GRO 支持
    给 vxlan traffic 添加 GRO 支持
    numa - 添加了 systcl 参数 /proc/sys/kernel/numa_balancing 用来在运行时开关 numa memory balancing 特性
    netfilter - nftables 进化中
    bonding - 添加 netlink 属性支持,为 bond slave 在 sysfs 中添加 /sys/class/net/<interface>/slave 目录,添加了 Ip_internal 参数来调整 bonding 驱动向 slaves 发送 learning packets 的间隔(默认为1秒)
  10. Xen 相关的虚拟化改进
    xen/pvh - 支持 ParaVirtualized Hardware Extension (v3)
    xen-netfront - 添加 ipv6 offloads 支持
    xen/events - 为 FIFO-based event channels 添加了 hypervisor 接口
    为 ARM 架构添加 balloon 支持
  11. 添加 AMD Cryptographic Coprocessor 支持,加速加密操作

注:看了一个星期才把绝大部分新变动看完,大部分都是看了相关的 git commits 后才明白是什么东西。其实也算是不可多得的学习机会,希望自己能坚持下去 :-D

详细信息见:http://kernelnewbies.org/Linux_3.14