发布时间

2023-06-25

4.24. 6.4

4.24.1. 大特性

4.24.1.1. Intel LAM特性使能

LAM, Linear Address Masking。就是在用户态可以把地址的高位用作其他用途。相当于ARM的Top-Byte ignore或者PAuth特性,19年AMD也有一个upper address ignore特性,不过没有推到Linux中。

Intel这次推进来的特性不包含最高位,叫LAM_U57和LAM_U48,分别掩掉62-57和62-48位。这样应该是为了避免有符号数的判定算法出问题。这个Patch涉及的小修改挺多的,主要是一堆的页表处理需要在这些bit上进行特殊处理。

4.24.1.2. 用户态trace event接口

这个版本开始,可以在用户态放tracepoint了。接口是ioctl(/sys/kernel/tracing/user_events_data, user_reg)。

4.24.1.3. 两个Scalable并行优化

  1. 增加per-VMA的lock,在部分场景取代mm_struct的全局mmap_lock,提升Scalability。Oracle,Google等多个组织提供的补丁。现在是和原来的功能共存的,通过CONFIG_PER_VMA_LOCK配置项激活。

  2. 优化了调度算法,使用户和内核线程的切换在大型系统上有更高的Scalability。特性的名字叫CONFIG_MMU_LAZY_TLB_REFCOUNT,大致的意思是如果内核线程在很多CPU上都用,就尽量留着相关的TLB项,不要刷掉,从而保证用户进程切换不要动这部分TLB。我原来比较好奇的是:这不是本来就是这样的吗?但考虑到部分平台内核和用户态用同一个页表指针,也许进程退出的时候,要更新一下TLB,这也大概可以理解。这个等要用的时候再来看吧。

4.24.2. 其他有趣的东西

  1. PSI(Pressure Stall Information)支持用户态访问

  2. 支持更安全的KSM(Kernel Same-page Merge)接口,原来只有madvice(MADV_MERGEABLE)接口,只能以进程内的地址空间为分割,现在加上了prctl(PR_SET/GET_MEMORY_MERGE)接口。

  3. BPF特性继续加新特性,但我不关心。

  4. 关闭动态关闭SELinux的功能的功能,这是为安全加的小修改。

  5. rust一直在增加基础binding。

4.24.3. 华为和海思的提交

  1. 陈祥和John合了一个支持SAS驱动支持poll的特性

  2. 有人用gmail邮箱和了一个机顶盒的随机数生成器驱动的补丁