Files
LDD-LinuxDeviceDrivers/study/kernel/00-DESCRIPTION/DEBUGGING.md
T

20 KiB

title, date, author, tags, categories, thumbnail, blogexcerpt
title date author tags categories thumbnail blogexcerpt
Linux 内核历史的 Git 记录 2021-02-15 00:32 gatieme
linux
tools
技术积累
FZF 是目前最快的模糊搜索工具. 使用golang编写. 结合其他工具(比如 ag 和 fasd)可以完成非常多的工作. 前段时间, 有同事给鄙人推荐了 FZF, 通过简单的配置, 配合 VIM/GIT 等工具食用, 简直事半功倍, 效率指数级提升, 因此推荐给大家.

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

知识共享许可协议

因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦

转载请务必注明出处, 谢谢, 不胜感激


日期 作者 GitHub CSDN BLOG
2021-02-15 成坚-gatieme AderXCoding/system/tools/fzf 使用模糊搜索神器 FZF 来提升办公体验 Using FZF to Improve Productivit

2 调测子系统

--------------- 重要功能和时间点 ---------------**

下文将按此目录分析 Linux 内核中 MM 的重要功能和引入版本:

--------------- 正文 ---------------**

1 UNWIND


时间 作者 特性 描述 是否合入主线 链接
2018/11/23 Shile Zhang shile.zhang@linux.alibaba.com Speed booting by sorting ORC unwind tables at build time ORC unwind有两个表,.orc_unwind_ip和.orc_unwind 二分搜索需要排序。在构建时对其进行排序可以节省更多CPU周期有助于加快内核引导. 添加ORC表排序在一个独立的线程有助于避免更多的链接. RFC v6 ☐ PatchWork v6

2 unikernel


  • KML(Kernel Mode Linux : Execute user processes in kernel mode)
时间 作者 特性 描述 是否合入主线 链接
2015/04/16 Toshiyuki Maeda Kernel Mode Linux : Execute user processes in kernel mode 内核直接执行用户态程序. v1 ☐ 4.0 Patch
2018/11/23 Hsuan-Chi Kuo hckuo2@illinois.edu Lupine: Linux in Unikernel Clothes 通过内核配置和(KML)间接清除系统调用的影响, 从而使得 Linux 的性能达到持平甚至优于 unikernel 的性能. ☐ Github, 159_kuo_slides.pdf

3 RONX


https://lwn.net/Articles/422487/

时间 作者 特性 描述 是否合入主线 链接
2008/01/30 Arjan van de Ven arjan@infradead.org mark text section read-only 新增 CONFIG_RODATA, 将内核代码段设置为只读. 分别为 i386 和 x86_64 新增了实现. v3 ☑ 2.6.16-rc1 PatchWork, commit1, commit2, LKML
2007/10/24 Randy Dunlap rdunlap@xenotime.net x86: unification of i386 and x86_64 Kconfig.debug 将 i386 和 x86_64 的 CONFIG 和实现统一 commit
2008/01/30 Ingo Molnar mingo@elte.hu x86: rodata config hookup 新增 DEBUG_RODATA_TEST 和 DEBUG_NX_TEST . v13 ☑ 2.6.25-rc1 PatchWork, commit
2010/12/16 Matthieu Castet castet.matthieu@free.fr x86: Add NX protection for kernel data 为内核数据段设置只读属性, x86 上实现. v1 ☑ 2.6.38-rc1 PatchWork, commit
2010/12/16 Matthieu Castet castet.matthieu@free.fr x86 : Add NX protection for kernel data on 64 bit 为内核数据段设置只读属性, x86_64 上实现. v1 ☐ 2.6.38-rc1 PatchWork, commit
2010/12/16 Laura Abbott labbott@redhat.com Add RO/NX protection for loadable kernel modules 实现 CONFIG_DEBUG_SET_MODULE_RONX, 限制模块中各个不同类型页面的读写和可执行权限. v1 ☑ 2.6.38-rc1 PatchWork, commit
2014/04/14 Kees Cook keescook@chromium.org ARM: mm: allow text and rodata sections to be read-only 为 ARM 实现CONFIG_DEBUG_RODATA 特性, 设置内核代码段只读和数据段不可执行的. v2 ☑ 3.19-rc1 PatchWork RFC, commit
2014/08/19 Laura Abbott lauraa@codeaurora.org arm64: Add CONFIG_DEBUG_SET_MODULE_RONX support 为 ARM64 实现 CONFIG_DEBUG_SET_MODULE_RONX, 限制模块中各个不同类型页面的读写和可执行权限. v2 ☑ 3.18-rc1 commit
2015/01/21 Laura Abbott lauraa@codeaurora.org arm64: add better page protections to arm64 为 ARM64 实现CONFIG_DEBUG_RODATA 特性, 设置内核代码段只读和数据段不可执行的. v2 ☑ 4.0-rc1 commit

80d6b0c2eed2a504f6740cd1f5ea76dc50abfc4d commit 57efac2f7108e3255d0dfe512290c9896f4ed55f Author: Ard Biesheuvel ard.biesheuvel@linaro.org Date: Thu Mar 3 15:10:59 2016 +0100

arm64: enable CONFIG_DEBUG_RODATA by defaut

commit 40982fd6b975de4a51ce5147bc1d698c3b075634

Author: Mark Rutland mark.rutland@arm.com Date: Thu Aug 25 17:23:23 2016 +0100

arm64: always enable DEBUG_RODATA and remove the Kconfig option

commit 604c8e676e609da9f17a2abb36f2b2067bb86561 Author: Mark Rutland mark.rutland@arm.com Date: Fri May 13 12:20:36 2016 +0100

arm64: enable CONFIG_SET_MODULE_RONX by default

| 2016/02/17 | Kees Cook keescook@chromium.org | introduce post-init read-only memory | 许多内容只在 __init 期间写入, 并且再也不会更改. 这些不能成为"const", 相反,这组补丁引入了 __ro_after_init 来标记这些内存的方法, 并在 x86 和 arm vDSO 上使用它来. 此外
-------
1. 还默认使能了 DEBUG_RODATA
2. 添加了一个新的内核参数(rodata)来帮助调试将来的使用, 可以使用 rodata=n 来禁用此特性.
3. 并添加了一个名为 lkdtm 测试驱动来验证结果. | v3 ☑ 4.6-rc1 | PatchWork | | 2017/01/29 | Laura Abbott labbott@redhat.com | mm: add arch-independent testcases for RODATA | 这个补丁为 RODATA 创建了主独立的测试用例. x86和x86_64都已经有了RODATA的测试用例, 用 CONFIG_DEBUG_RODATA_TEST 宏控制. 但是它们是特定于原型的,因为它们直接使用内联汇编. 如果有人改变了CONFIG_DEBUG_RODATA_TEST的状态,它会导致内核构建的开销. 为了解决上述问题, 编写独立于拱门的测试用例, 并将其移动到共享位置. | v4 ☑ 4.9-rc1 | PatchWork, commit | | 2017/02/07 | Laura Abbott labbott@redhat.com | Hardening configs refactor/rename | 将原来的 CONFIG_DEBUG_RODATA 重命名为 CONFIG_STRICT_KERNEL_RWX, 原来的 DEBUG_SET_MODULE_RONX 重命名为 CONFIG_STRICT_MODULE_RWX. 这些特性已经不再是 DEBUG 特性, 可以安全地被启用. 同时将这些 CONFIG 移动到 arch/Kconfig 架构无关的定义, 同时引入 ARCH_HAS_KERNEL_RWX 和 ARCH_HAS_MODULE_RWX 来标记对应架构是否支持. | v3 ☑ 4.11-rc1 | PatchWork RFC
-------
PatchWork v3 | | 2017/06/28 | Christophe Leroy christophe.leroy@c-s.fr | powerpc/Kconfig: Enable STRICT_KERNEL_RWX | 为 PPC64 实现 STRICT_KERNEL_RWX. | v3 ☑ 4.13-rc1 | PatchWork v5 | | 2017/08/02 | Christophe Leroy christophe.leroy@c-s.fr | powerpc/mm: Fix kernel protection and implement STRICT_KERNEL_RWX on PPC32 | 为 PPC32 实现 STRICT_KERNEL_RWX. | v3 ☑ 4.14-rc1 | PatchWork v3 OLD
-------
PatchWork v3 |

commit 25362dc496edaf17f714c0fecd8b3eb79670207b Author: Kees Cook keescook@chromium.org Date: Tue Jan 26 01:19:36 2016 +0100

ARM: 8501/1: mm: flip priority of CONFIG_DEBUG_RODATA

| 2017/01/29 | Jinbum Park jinb.park7@gmail.com | arm64: enable CONFIG_DEBUG_RODATA by default | arm64 架构下默认开启 CONFIG_DEBUG_RODATA, 并不允许手动关闭. | v3 ☑ 4.9-rc1 | PatchWork, commit |

commit e1a58320a38dfa72be48a0f1a3a92273663ba6db Author: Stephen Smalley sds@tycho.nsa.gov Date: Mon Oct 5 12:55:20 2015 -0400

x86/mm: Warn on W^X mappings

commit 54727e6e950aacd14ec9cd4260e9fe498322828c Author: Linus Torvalds torvalds@linux-foundation.org Date: Fri Nov 6 09:12:41 2015 -0800

x86: don't make DEBUG_WX default to 'y' even with DEBUG_RODATA

ommit d2852a2240509e512712e25de2d0796cda435ecb Author: Daniel Borkmann daniel@iogearbox.net Date: Tue Feb 21 16:09:33 2017 +0100

arch: add ARCH_HAS_SET_MEMORY config

4 KDUMP


时间 作者 特性 描述 是否合入主线 链接
2009/08/05 Arjan van de Ven arjan@infradead.org Implement crashkernel=auto 实现 crashkernel=auto . v1 ☐ PatchWork

5 REFCOUNT


时间 作者 特性 描述 是否合入主线 链接
2019/11/21 Will Deacon will@kernel.org Rework REFCOUNT_FULL using atomic_fetch_* operations 通过 atomic_fetch_* 操作来降低 cmpxchg() 带来的性能开销, 从而提升 refcount 机制的性能. v4 ☑ 5.5-rc1 PatchWork

6 PSI


Pressure Stall Information 提供了一种评估系统资源压力的方法。系统有三个基础资源:CPU、Memory 和 IO,无论这些资源配置如何增加,似乎永远无法满足软件的需求。一旦产生资源竞争,就有可能带来延迟增大,使用户体验到卡顿。

如果没有一种相对准确的方法检测系统的资源压力程度,有两种后果。一种是资源使用者过度克制,没有充分使用系统资源;另一种是经常产生资源竞争,过度使用资源导致等待延迟过大。准确的检测方法可以帮忙资源使用者确定合适的工作量,同时也可以帮助系统制定高效的资源调度策略,最大化利用系统资源,最大化改善用户体验。

Facebook 在 2018 年开源了一套解决重要计算集群管理问题的 Linux 内核组件和相关工具,PSI 是其中重要的资源度量工具,它提供了一种实时检测系统资源竞争程度的方法,以竞争等待时间的方式呈现,简单而准确地供用户以及资源调度者进行决策。

纯干货,PSI 原理解析与应用

时间 作者 特性 描述 是否合入主线 链接
2018/08/28 Johannes Weiner hannes@cmpxchg.org psi: pressure stall information for CPU, memory, and IO v4 引入 PSI 评估系统 CPU, MEMORY, IO 等资源的压力. v4 ☑ 4.20-rc1 Patchwork
2019/03/19 Suren Baghdasaryan surenb@google.com psi: pressure stall monitors v6 NA v6 ☑ 5.2-rc1 Patchwork
2020/03/03 Suren Baghdasaryan surenb@google.com psi: Add PSI_CPU_FULL state and some code optimization 1. 添加 PSI_CPU_FULL 状态标记 cgroup 中的所有非空闲任务在 cgroup 之外的 CPU 资源上被延迟, 或者 cgroup 被 throttle
2. 使用 ONCPU 状态和当前的 in_memstall 标志来检测回收, 删除 timer tick 中的钩子, 使代码更简洁和可维护.
4. 通过移除两个任务的每个公共cgroup祖先的psi_group_change()调用来优化自愿睡眠开关。
v2 ☑ 5.13-rc1 Patchwork
2020/03/31 Yafang Shao laoar.shao@gmail.com psi: enhance psi with the help of ebpf 引入 psi_memstall_type 标记 MEMSTALL 的类别, 并在 tracepoint 输出, 从而可以被 ebpf 使用来增强工具. v4 ☑ 4.20-rc1 Patchwork

7 DYNAMIC_DEBUG


时间 作者 特性 描述 是否合入主线 链接
2019/02/12 Rasmus Villemoes linux@rasmusvillemoes.dk various dynamic_debug patches NA v1 ☑ 5.1-rc1 Patchwork v4,00/14
2019/04/09 Rasmus Villemoes linux@rasmusvillemoes.dk implement DYNAMIC_DEBUG_RELATIVE_POINTERS 实现 DYNAMIC_DEBUG_RELATIVE_POINTERS v1 ☐ Patchwork

8 DRGN


[LWN/A kernel debugger in Python: drgn(https://lwn.net/Articles/789641) LWN: 想用python命令来调试kernel吗?drgn就是了!

9 PRINTK


时间 作者 特性 描述 是否合入主线 链接
2017/11/19 Tobin C. Harding me@tobin.cc hash addresses printed with %p 内核中 %p 打印的地址会暴露内核态地址信息, 是极其不安全的, 因此限制 %p 的打印信息, 它将打印一个散列值, 并不是实际的地址. 如果想要打印实际地址, 需要显式指定 %px. v11 ☑ 4.15-rc2 PatchWork
-------
关键 commit 57e734423add
2021/02/14 Tobin C. Harding me@tobin.cc add support for never printing hashed addresses 新引入 no_hash_pointers 启动参数, 可以禁用 %p 只打印散列值不打印实际地址的限制, 让 %p 可以重新打印内核实际地址. v4 ☑ 5.12-rc1 PatchWork 0/3,v4
-------
关键 commit 57e734423add

7 OTHER


时间 作者 特性 描述 是否合入主线 链接
2021/03/21 Rasmus Villemoes linux@rasmusvillemoes.dk background initramfs unpacking, and CONFIG_MODPROBE_PATH 启动阶段异步解压 initramfs. 可以加速系统启动. v1 ☑ 5.13-rc1 Patchwork