宋宝华:为了不忘却的纪念,评Linux 5.13内核
Linux 5.14于14小时之前发布了,而我5.13的总结还没有写出,我早觉得有写一点东西的必要了,这虽然于搬砖的码农毫不相干,但在追求进步的工程师那里,却大抵只能如此而已。为了不忘却的纪念,我们列出5.13内核的数个激动人心的新特性:
- Apple M1的初始
- Misc cgroup
- Landlock安全模块
- 系统调用的堆栈随机化
- printk无锁ringbuffer的进一步优化
- BPF可调用内核函数
- 公共的IO PAGE Fault支持
Apple M1的初始支持
5.13最爆炸性的新闻无非是初始的Apple M1支持,但是然并卵,实用性几乎为0。因为,已经合入的patch非常类似于SoC bringup的初级阶段:
- 带earlycon支持的UART (samsung-style) 串口驱动
- Apple中断控制器,支持中断、中断亲和(affinity )和IPI (跨CPU中断)
- SMP (通过标准spin-table来支持)
- 基于simplefb的framebuffer驱动
- Mac Mini的设备树
这样一个东西,是没法用的,发烧友玩玩可以,但是我们感激并欣赏Hector Martin “marcan”领导的Asahi Linux项目开了一个这样的好头。但是,在Apple M1上面跑Ubuntu啥的,近期、中期和长期的选择还是用Parallels虚拟化技术比较好。
Misc cgroup
众所周知,cgroup具备一个强大的控制CPU、内存、I/O等资源在不同的任务群间进行分配的能力。比如,你通过下面的命令,限制A这个群的CFS调度类进程,最多只能耗费20%的CPU:
这个世界上的绝大多数资源都是可以进行抽象的,比如属于cpuacct、cpu、memory、blkio、net_cls什么的,但是,总有一些不同于常人的人,他们既不是男人,也不是女人,而是“妖如果有了仁慈的心”的人。Linux内核的驱动子系统多达100多个,但是还是有极个别驱动不属于这100多类中的任何一类,于是在drivers下面有个misc:
现在内核碰到了类似的问题,它的资源要进行配额控制,但是不属于通用的类型,而是:
- Secure Encrypted Virtualization (SEV) ASIDs
- SEV - Encrypted State (SEV-ES) ASIDs
这些有限的 ASIDs用于在AMD平台上,进行虚拟机内存加密,不能归于现有cgroup的任何一类。那么,咱们加个misc类的cgroup吧,于是Misc control-group controller在5.13内核诞生了。这再次证明了,不要重新造轮子,但是你可以在现有的轮子里面放一个“杂交”轮子。Misc cgroup允许进行一些特殊资源的控制,透过3个接口完成。
- misc.capacity描述资源的能力(只读),比如:
$ cat misc.capacity
res_a 50
res_b 10
- 透过misc.current描述当前资源的占用(只读),比如:
$ cat misc.current
res_a 3
res_b 0
- 透过misc.max设置这个cgroup最多只能使用多少资源(可读可写),比如:
# echo res_a 1 > misc.max
同志们,有了这个misc cgroup的支持,以后咱们的阿猫阿狗资源限制,也可以往里面塞了。它相当于开了一道门。