Linux 4.5 亮点特性

源于https://kernelnewbies.org/Linux_4.5

1.copy_file_range(2)系统调用支持
以前的复制文件,是指将数据从磁盘读到用户空间,然后将用户空间复本复制到目标文件(磁盘),这种做法虽然没问题,但是需要在用户空间进行额外的数据复制。在此版本中,copy_file_rang(2)系统调用可以直接将一组数据从文件拷贝到目标文件(数据磁盘拷贝),避免了用户空间到内核的成本。
这个系统调用只比cpu快一点,因为与实际I/O读写相比,这些内存副本拷贝的成本几乎忽略不计,但是在某些场景下却有明显效果。比如NFS网络文件系统,客户端复制数据时,需要先将数据从服务器拷贝到客户端,然后客户端将数据拷贝到另一个文件,然后新文件数据传回NFS服务器更新;而是用copy_file_range(2)可以不经过网络传输。

2.amdGPU驱动支持PowerPlay特性(实验性质),为其带来高性能
现在GPU开始运行在低功耗、低性能模式。为了获得最佳的性能,他们需要良好的电源管理模块。此版本为amdGPU添加PowerPlay特性支持,目标是最终取代amdGPU驱动中现有的动态电源管理。由于PowerPlay能够处理频率变化,性能降更好。
由于稳定性问题,默认情况不会为此支持的驱动打开PowerPlay;可以使用”amdgpu.powerplay=1”内核选项强制使用PowerPlay。

3.Btrfs文件系统空闲内存处理可扩展性的改进
文件系统需要跟踪内存块哪些是在被使用的,哪些是空闲的,同时还需存储空闲内存块在磁盘的信息,因为从头生成查找耗费太大。从2.6.37版本内核以来,Btrfs已经可以存储可用空闲内存信息,但是在大型(+30T)、busy的文件系统下存在可扩展性的瓶颈。
这个版本包含了一种新型的、实验性的方法可以花费更少的工作来保存更新空闲内存信息,同时修复可扩展性问题,但是默认是不使用的。可以mount挂载时使用 –o space_cache=v2 参数启用。

4.支持GCC -fsanitize=undefined(UBSAN)
UBSAN(Undefined Behaviour SANitizer)是GCC4.9(https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Debugging-Options.html)的调试工具。它可以在编译期间插入检测代码,该代码在可能导致未定义行为的操作之前执行检查。未定义的行为意味着某些变量未定义,并且编译器假定此类定义永远不会使用,程序员将负责避免它们。如果它们发生,则应用程序可能产生错误的结果,崩溃甚至允许安全漏洞;未定义的行为包括初始化之前使用非静态变量,整数除零、有符号整数溢出、取消引用NULL指针等。

5.madvise(2)添加MADV_FREE标志
madvise(2)系统调用可以设置进程来告诉内核他们将如何使用自己的内存,内核根据这些提示优化内存管理,以实现更好的整体性能。

如果应用程序对一块内存后续不想使用,它可以使用MADV_DONTNEED标志告知内核,后续内核可以释放与之关联的资源。同时发生后续访问,也会成功,但会导致从底层映射文件重新加载内存内容,或者在没有底层文件的情况下从零填充页面进行映射。但是有一些应用程序(特别是内存分配器)会在短时间重用该内存范围,并且MADV_DONTNEED强制它们引发缺页中断,页面分配,页面清零等。为了避免这种开销,其他操作系统如BSD支持MADV_FREE,它只是在需要时将页面标记为可用,并不会立即释放它们,从而可以重用内存而不会再次产生缺页错误的成本。此版本增加了对此标志的支持。

6.epoll_ctl(2)新增EPOLLEXCLUSIVE标志

7.cgroup统一层次结构
cgroup是2.6.24内核引入的,允许用户定义进程组之前资源分配(例如CPU time、系统内存、网络带宽)。第一次实现中cgroup允许任意数量的进程层次结构,每个层次结构可以包括任意数量的控制器,虽然这个看起来提高了灵活性,但是实际上有很多问题。因此在3.16内核合并了一个新的同一层次结构,但是是实验性的。
现在这个版本,认为这个结构是稳定的,可以使用cgroup2文件系统安装。更多信息在Documentation/cgroup-v2.txt

8.SO_REUSEPORT套接字的性能优化
SO_REUSEPORT是自Linux 3.9以来可用的套接字选项,允许多个侦听器套接字绑定到同一端口。
在此版本中,Linux包括两个针对SO_REUSEPORT套接字的优化(在此版本中,仅针对UDP套接字):
两个新的套接字选项初始化时可以定义为经典或扩展的BPF程序(SO_ATTACH_REUSEPORT_CBPF和SO_ATTACH_REUSEPORT_EBPF)。 这些BPF程序可以定义如何将数据包分配给SO_REUSEPORT套接字组中的套接字,这些套接字绑定到同一端口。
使用SO_REUSEPORT的套接字在接收数据包时,查找速度更快。

9.内存控制单元引入更加恰当的控制套接字内存使用的方式。

Linux 4.5 亮点特性_第1张图片

你可能感兴趣的:(linux)