Linux 4.7亮点特性

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

1.支持Radeon RX480 GPU
此版本支持Radeon RX480 GPU,这个一款基于新的Polaris框架的amdgpu驱动设备。

2.目录并行查找
目录高速缓存缓存了有关路径名的信息,这些信息可以快速用于路径名的查找。这可以加速许多常见的操作,比如,它可以无需读取磁盘而确定特定文件或者目录是否存在。使用序列化互斥锁在同一目录中的查找名称。
此版本中,序列化互斥锁已经切换成了读写信息量,允许在同一目录中并行查找文件,这将使同一目录下面大量使用路径名查找的特定工作更快。

3.”schedutil”,一种新的cpu调频调度器
这个版本新加入了一种新的cpufreq调度器schedutil,他与现在的调度器有两个主要区别:1)它可以直接使用调度程序提供的信息做出调整cpu频率的决策;2)它可以调用cpufreq驱动程序更改频率以立即调整CPU的性能,无需生成进程上下文或其他工作项。
这个意味着在面对工作负载变化时频率变化的延迟会非常小,并且根据调度程序提供的信息可以更准确的进行决策。另外这个版本中schedutil调度器非常简单,它可以视为改进调度程序与CPU电源管理集成的基础,但是它非常有效,初步结果令人鼓舞。
详细说明:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9bdcb44e391da5c41b98573bf0305a0e0b1c9569

4.ftrace添加Histograms事件

ftrace是内核自2.6.27版本以来采用的Linux事件跟踪基础架构,它嵌入在内核中,启动后接口在/sys/kernel/debug/tracing/。此版本添加了”hist”事件,该命令可以提供描述事件命中的“直方图”的功能。例如,用户需要获取系统中进程读取文件操作的(进程的)计数列表,可以通过hist触发器执行命令:

echo ‘hist:key=common_pid.execname:val=count:sort=count.descending’ >
/sys/kernel/debug/tracing/events/syscalls/sys_enter_read/trigger

这个命令可以将sys_enter_read事件的触发器文件中,触发此事件后将运行hist命令(hist:),表示:
对每次事件的命中,获取PID(common_pid),并将其转化成进程名称(.execname suffix),将以上作为直方图的键(key=);
val=count参数使hist命令查询计数字段,在sys_enter_read事件中,它可以统计读取操作计数;
最后,.separator之后,sort=count.descending表示统计的计数按降序排列;
下面是结果输出:

{{{ # cat
/sys/kernel/debug/tracing/events/syscalls/sys_enter_read/hist
#trigger info: hist:keys=common_pid.execname:vals=count:sort=count.descending:size=2048
[active] { common_pid: gnome-terminal [ 3196] } hitcount: 280 count:
1093512 { common_pid: Xorg [ 1309] } hitcount: 525 count: 256640 {
common_pid: compiz [ 2889] } hitcount: 59 count: 254400 { common_pid:
bash [ 8710] } hitcount: 3 count: 66369 { common_pid: dbus-daemon-lau
[ 8703] } hitcount: 49 count: 47739 { common_pid: irqbalance [ 1252] }
hitcount: 27 count: 27648 { common_pid: 01ifupdown [ 8705] } hitcount:
3 count: 17216 { common_pid: dbus-daemon [ 772] } hitcount: 10 count:
12396 { common_pid: Socket Thread [ 8342] } hitcount: 11 count: 11264
{ common_pid: nm-dhcp-client. [ 8701] } hitcount: 6 count: 7424 {
common_pid: gmain [ 1315] } hitcount: 18 count: 6336 … {
common_pid: postgres [ 1892] } hitcount: 2 count: 32 { common_pid:
postgres [ 1891] } hitcount: 2 count: 32 { common_pid: gmain [ 8704] }
hitcount: 2 count: 32 { common_pid: upstart-dbus-br [ 2740] }
hitcount: 21 count: 21 { common_pid: nm-dispatcher.a [ 8696] }
hitcount: 1 count: 16 { common_pid: indicator-datet [ 2904] }
hitcount: 1 count: 16 { common_pid: gdbus [ 2998] } hitcount: 1 count:
16 { common_pid: rtkit-daemon [ 2052] } hitcount: 1 count: 8 {
common_pid: init [ 1] } hitcount: 2 count: 2 • Totals: o Hits: 2116
Entries: 51 Dropped: 0 }}}

上面输出显示哪些进程在读取文件,多少以及频率。
更多详细信息:https://lwn.net/Articles/635522/

5.支持perf跟踪调用栈功能
这个版本,perf添加了跟踪用户态调用栈的能力。
跟踪recvmsg()系统调用的调用栈为例:

GI_libc_recvmsg+0x2d (/usr/lib64/libpthread-2.22.so) _xcb_in_read+0xa7
(/usr/lib64/libxcb.so.1.1.0) poll_for_next_event+0x68
(/usr/lib64/libxcb.so.1.1.0) poll_for_event+0xb8
(/usr/lib64/libX11.so.6.3.0) poll_for_response+0xab
(/usr/lib64/libX11.so.6.3.0) _XEventsQueued+0x5d
(/usr/lib64/libX11.so.6.3.0) XPending+0x57
(/usr/lib64/libX11.so.6.3.0) gdk_event_source_check+0x51
(/usr/lib64/libgdk-3.so.0.1800.9) g_main_context_check+0x1b1
(/usr/lib64/libglib-2.0.so.0.4600.2)
g_main_context_iterate.isra.29+0x120
(/usr/lib64/libglib-2.0.so.0.4600.2) g_main_loop_run+0xc2
(/usr/lib64/libglib-2.0.so.0.4600.2) meta_run+0x2c
(/usr/lib64/libmutter.so.0.0.0) main+0x3f7 (/usr/bin/gnome-shell)
libc_start_main+0xf0 (/usr/lib64/libc-2.22.so) [0x2909]
(/usr/bin/gnome-shell)}}}

可以使用命令类似:# trace –call dwarf ping 127.0.0.1;
也可以打印单个事件的调用栈信息:perf trace –event sched:sched_switch/call-graph=fp/ -a sleep 1;
也支持跟踪缺页(option –F/–pf),例如启动firefox时跟踪写入调用和缺页中断,并将堆栈限制为5帧:#perp trace -e write –pf maj –max-stack 5 firefox。

6.允许BPF程序使用Tracepoints
Tracepoints是开发人员在代码中引入的一种动态printf()s,可以分析系统的行为。Tracepoints可以被下面多个工具使用:LTTng,perf,SystemTap,ftrace… 但是BPF程序无法使用。
这个版本添加了新的BPF接口(BPF_PROG_TYPE_TRACEPOINT),用于构建附带tracepoints信息的BPF程序,这使得BPF程序可以收集tracepoints并进行相应处理。
更多说明:https://lwn.net/Articles/683504/

7.支持USB/IP中创建虚拟USB设备
USB/IP允许通过网络共享USB设备,但是USB设备必须是物理设备。这个版本使用可以创建虚拟USB设备,无需任何物理USB硬件支持。
此功能有几个用途:例如,可以改善(手机)开发环境中的手机仿真。仿真手机可以连接到开发人员的计算机或者虚拟机,就好像是一部物理手机一样。对于测试USB设备也很有帮助。

8.LoadPin,一个限制内核模块来源的安全模块
LoadPin是一个新的Linux安全模块,可确保内核加载的所有文件(内核模块,固件,kexec映像,安全策略)都来自同一文件系统。
更多说明:https://lwn.net/Articles/68
这里写图片描述

猜你喜欢

转载自blog.csdn.net/cui841923894/article/details/82024098
4.7
今日推荐