description/bpf: libbpf and bpf loader

This commit is contained in:
Cheng Jian
2022-09-12 21:19:36 +08:00
parent 5bd4974e8f
commit c941ecc8e6
5 changed files with 127 additions and 28 deletions
+42 -4
View File
@@ -105,6 +105,26 @@ GCC 的支持 eBPF 经过了 3 个阶段.
## 2.2 加载器
-------
Alexei Starovoitov 在 v3.18 [BPF syscall, maps, verifier, samples, llvm](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f) 实现最早的 BPF 支持的时候, 引入了一个 [mini eBPF library](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f).
紧接着 v3.19 就基于 mini eBPF library 为 `samples/bpf` 样例实现了一个简单的 BPF 加载器 bpf_load. 参见 [samples: bpf: elf_bpf file loader](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=249b812d8005ec38e351ee763ceb85d56b155064). 随后 [Add eBPF hooks for cgroups](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=d8c5b17f2bc0de09fbbfa14d90e8168163a579e7) 为 mini eBPF library 实现了 bpf_prog_attach 和 bpf_prog_detach.
```cpp
git log --oneline -- samples/bpf/libbpf.c samples/bpf/libbpf.h
git log --oneline -- samples/bpf/bpf_load.c samples/bpf/bpf_load.h
```
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:---:|:----:|:---:|:----:|:---------:|:----:|
| 2014/08/13 | Alexei Starovoitov <ast@plumgrid.com> | [bpf: mini eBPF library, test stubs and verifier testsuite](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f) | [BPF syscall, maps, verifier, samples, llvm](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f) 的其中一个补丁, 引入了 [mini eBPF library](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f). | v1 ☑✓ 3.18-rc1 | [LORE v4,00/26](https://lore.kernel.org/netdev/1407916658-8731-1-git-send-email-ast@plumgrid.com)<br>*-*-*-*-*-*-*-* <br>[LORE v11,00/12](https://lkml.kernel.org/netdev/1410325808-3657-1-git-send-email-ast@plumgrid.com) |
| 2014/11/26 | Alexei Starovoitov <ast@plumgrid.com> | [samples: bpf: elf_bpf file loader](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=249b812d8005ec38e351ee763ceb85d56b155064) | [allow eBPF programs to be attached to sockets](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=fbe3310840c65f3cf97dd90d23e177d061c376f2) 的其中一个补丁. 基于 mini bpf library, 实现了一个简易的加载器 bpf_load, 其主要接口为 `load_bpf_file() -=> load_and_attach()`. | v1 ☑✓ 3.19-rc1 | [LORE v1,0/6](https://lore.kernel.org/all/1417066951-1999-1-git-send-email-ast@plumgrid.com)<br>*-*-*-*-*-*-*-* <br>[LORE v2,0/6](https://lore.kernel.org/lkml/1417475199-15950-1-git-send-email-ast@plumgrid.com) |
| 2015/07/01 | Wang Nan <wangnan0@huawei.com> | [perf tools: filtering events using eBPF programs](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=9a208effd1832e50e1f7ea002f400f8b9ca8b1ed) | perf 支持 eBPF, 其中引入了一个 libbpf 的用户态工具. | v10 ☑✓ 4.3-rc1 | [LORE v10,0/50](https://lore.kernel.org/all/1435716878-189507-1-git-send-email-wangnan0@huawei.com)<br>*-*-*-*-*-*-*-* <br>[PULL, 00/31](https://lore.kernel.org/all/1444826502-49291-1-git-send-email-wangnan0@huawei.com) |
| 2016/12/14 | Joe Stringer <joe@ovn.org> | [Reuse libbpf from samples/bpf](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=9899694a7f67714216665b87318eb367e2c5c901) | 内核主线中同时实现了两套 libbpf 的用户态库 libbpf(位于 `tools/lib/bpf`) 和 mini bpf lib(用于 samples 样例, 位于 `samples/bpf/libbpf.c`), 这是非常冗余的, 因此为 `tools/lib/bpf` 下的 libbpf 实现了 `samples/bpf` 所需的 bpf wrapper function, 从而使 samples 可以直接使用 libbpf. | v1 ☑✓ 4.10-rc1 | [LORE v1,0/5](https://lore.kernel.org/all/20161214224342.12858-1-joe@ovn.org) |
| 2018/05/14 | Jakub Kicinski <jakub.kicinski@netronome.com> | [samples: bpf: fix build after move to full libbpf](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=787360f8c2b87d4ae4858bb8736a19c289904885) | mini bpf lib 最终寿终正寝, 只包含了一个 `filter.h` 的 instruction helpers, 因此被重命名为 `bpf_insn.h`. | v2 ☐☑✓ | [LORE v2,0/5](https://lore.kernel.org/all/20180515053506.4345-1-jakub.kicinski@netronome.com) |
| 2020/11/24 | Daniel T. Lee <danieltimlee@gmail.com> | [bpf: remove bpf_load loader completely](https://lore.kernel.org/all/20201124090310.24374-1-danieltimlee@gmail.com) | 将使用 bpf_load 编写的BPF程序重写为使用 libbpf 加载器. 使用 libbpf 重构剩余的 bpf 程序, 并完全删除 bpf_load 这个过时的 bpf 加载器, 它已经很难跟上最新的内核 bpf. | v3 ☐☑✓ | [LORE v3,0/7](https://lore.kernel.org/all/20201124090310.24374-1-danieltimlee@gmail.com) |
## 2.3 验证器
-------
@@ -145,7 +165,7 @@ v3.19 支持了 MAP, [BPF maps](https://git.kernel.org/pub/scm/linux/kernel/git/
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:----:|:----:|:---:|:----:|:---------:|:----:|
| 2014/08/13 | Alexei Starovoitov <ast@plumgrid.com> | [BPF syscall, maps, verifier, samples, llvm](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f) | NA | v1 ☑✓ 3.18-rc1 | [LORE v4,00/26](https://lore.kernel.org/netdev/1407916658-8731-1-git-send-email-ast@plumgrid.com) |
| 2014/08/13 | Alexei Starovoitov <ast@plumgrid.com> | [BPF syscall, maps, verifier, samples, llvm](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f) | NA | v1 ☑✓ 3.18-rc1 | [LORE v4,00/26](https://lore.kernel.org/netdev/1407916658-8731-1-git-send-email-ast@plumgrid.com)<br>*-*-*-*-*-*-*-* <br>[LORE v11,00/12](https://lkml.kernel.org/netdev/1410325808-3657-1-git-send-email-ast@plumgrid.com) |
| 2014/08/13 | Alexei Starovoitov <ast@plumgrid.com> | [BPF samples](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=fbe3310840c65f3cf97dd90d23e177d061c376f2) | NA | v1 ☑✓ 3.18-rc1 | [LORE v4,00/26](https://lore.kernel.org/netdev/1407916658-8731-1-git-send-email-ast@plumgrid.com) |
| 2014/08/13 | Alexei Starovoitov <ast@plumgrid.com> | [BPF maps](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=9a9f9dd7c4653daf3f183f35c9a44d97ce9a91f1) | NA | v1 ☑✓ 3.19-rc1 | [LORE v4,00/26](https://lore.kernel.org/netdev/1407916658-8731-1-git-send-email-ast@plumgrid.com) |
@@ -200,8 +220,8 @@ git grep -W 'bpf_prog_type {' include/uapi/linux/bpf.h
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:----:|:----:|:---:|:----:|:---------:|:----:|
| 2014/11/26 | Alexei Starovoitov <ast@plumgrid.com> | [allow eBPF programs to be attached to sockets](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=fbe3310840c65f3cf97dd90d23e177d061c376f2) | 引入可以通过 setsockopt() 附加到套接字的 BPF_PROG_TYPE_SOCKET_FILTER 类型的 eBPF 程序. 允许这些程序通过查找/更新/删除助手访问 MAPs. | v1 ☑✓ 3.19-rc1 | [LORE v1,0/6](https://lore.kernel.org/all/1417066951-1999-1-git-send-email-ast@plumgrid.com)<br>*-*-*-*-*-*-*-* <br>[LORE v2,0/6](https://lore.kernel.org/lkml/1417475199-15950-1-git-send-email-ast@plumgrid.com) |
| 2016/11/23 | Daniel Mack <daniel@zonque.org> | [Add eBPF hooks for cgroups](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=d8c5b17f2bc0de09fbbfa14d90e8168163a579e7) | TODO | v9 ☑✓ 4.10-rc1 | [LORE v9,0/6](https://lore.kernel.org/all/1479916350-28462-1-git-send-email-daniel@zonque.org) |
| 2016/12/01 | David Ahern <dsa@cumulusnetworks.com> | [net: Add bpf support for sockets](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=554ae6e792ef38020b80b4d5127c51d510c0918f) | eBPF 程序支持 attach 到 | v7 ☑✓ 4.10-rc1 | [LORE v7,0/6](https://lore.kernel.org/all/1480610888-31082-1-git-send-email-dsa@cumulusnetworks.com) |
| 2016/11/23 | Daniel Mack <daniel@zonque.org> | [Add eBPF hooks for cgroups](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=d8c5b17f2bc0de09fbbfa14d90e8168163a579e7) | eBPF 程序支持 attach 到 cgroup | v9 ☑✓ 4.10-rc1 | [LORE v9,0/6](https://lore.kernel.org/all/1479916350-28462-1-git-send-email-daniel@zonque.org) |
| 2016/12/01 | David Ahern <dsa@cumulusnetworks.com> | [net: Add bpf support for sockets](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=554ae6e792ef38020b80b4d5127c51d510c0918f) | eBPF 程序支持 attach 到 socket | v7 ☑✓ 4.10-rc1 | [LORE v7,0/6](https://lore.kernel.org/all/1480610888-31082-1-git-send-email-dsa@cumulusnetworks.com) |
| 2018/03/13 | Alexei Starovoitov <ast@kernel.org> | [bpf: introduce cgroup-bpf bind, connect, post-bind hooks](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=aac3fc320d9404f2665a8b1249dc3170d5fa3caf) | eBPF 程序支持 attach 到 syscal bind 和 conntect. | v1 ☑✓ 4.17-rc1 | [LORE v1,0/6](https://lore.kernel.org/all/20180314033934.3502167-1-ast@kernel.org)<br>*-*-*-*-*-*-*-* <br>[LORE v2,0/9](https://lore.kernel.org/netdev/20180328034140.291484-1-ast@kernel.org)<br>*-*-*-*-*-*-*-* <br>[LORE v3](https://lore.kernel.org/netdev/20180330220808.763556-1-ast@kernel.org) |
| 2018/05/25 | Andrey Ignatov <rdna@fb.com> | [bpf: Hooks for sys_sendmsg](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=04b6ab731209eac1e130fa00281a29278eca2f57) | eBPF 程序支持附加到 sendmsg SYSCALL. | v4 ☑✓ 4.18-rc1 | [LORE v4,0/6](https://lore.kernel.org/all/cover.1527263217.git.rdna@fb.com) |
| 2019/06/07 | Daniel Borkmann <daniel@iogearbox.net> | [Fix unconnected bpf cgroup hooks](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=b714560f7b38de9f03b8670890ba130d4cc5604e) | eBPF 程序支持附加到 recvmsg SYSCALL. | v3 ☑✓ 5.2-rc6 | [LORE v3,0/6](https://lore.kernel.org/all/20190606234902.4300-1-daniel@iogearbox.net) |
@@ -394,7 +414,15 @@ raw_tracepoint 相比 tracepoint
[How to use libbpf-tools with ubuntu 18.04 4.15 kernel](https://www.gitmemory.com/issue/iovisor/bcc/3232/761744003)
## 7.2 surtrace & pyLCC
## 8.2 perf
-------
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:---:|:----:|:---:|:----:|:---------:|:----:|
| 2015/10/14 | Wang Nan <wangnan0@huawei.com> | [perf tools: filtering events using eBPF programs](https://lore.kernel.org/all/1444826502-49291-1-git-send-email-wangnan0@huawei.com) | TODO | v1 ☐☑✓ | [LORE v1,0/31](https://lore.kernel.org/all/1444826502-49291-1-git-send-email-wangnan0@huawei.com) |
## 8.3 coolbpf(surtrace & pyLCC)
-------
[微信公众号-Linux 内核之旅--内核 trace 三板斧 - surtrace-cmd](https://mp.weixin.qq.com/s/XanaxrLDwkqTqcfq9B2eOw)
@@ -403,6 +431,16 @@ raw_tracepoint 相比 tracepoint
[iofsstat:帮你轻松定位 IO 突高, 前因后果一目了然 | 龙蜥技术](https://developer.aliyun.com/article/867067)
[libbpf 编译平台 LCC——eBPF从入门到享受 | 龙蜥大讲堂第 20 期](https://www.bilibili.com/video/BV1Ar4y1G7R8)
## 8.4 eunomia-bpf
-------
[eunomia-bpf: A dynamic loader to run CO-RE eBPF as a service](https://github.com/eunomia-bpf/eunomia-bpf)
[OpenAnolis/eBPF技术探索 SIG/Eunomia项目介绍](https://openanolis.cn/sig/ebpfresearch/doc/640013458629853191)
<br>
* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作.
+39 -10
View File
@@ -6654,7 +6654,7 @@ DAMON 利用两个核心机制 : **基于区域的采样**和**自适应区域
| 机制 | 设计初衷 | 描述 |
|:---:|:-------:|:----:|
| Access Frequency Monitor<br>访问频率监控 | DAMON 通过采样检测出给定的持续时间内哪些页面被频繁访问. 通过设置 sampling interval(damon_ctx.sample_interval) 和 aggregation interval(damon_ctx.aggr_interval) 来控制访问频率的分辨率.<br>1. 采样间隔, DAMON 在每个采样间隔内统计每个页面访问的次数;<br>2. 聚合间隔, DAMON 在每个聚合间隔后, 调用自定义的聚合函数读取聚合的结果. | 详细地说, DAMON 检查每个 sampling interval 对每个页面的访问并汇总结果. 换句话说, 计算对每个页面的访问次数. 在每个 aggregation interval 过去之后, DAMON 调用用户先前注册的回调函数, 以便用户可以读取聚合结果, 然后清除结果. 这种机制的监视开销将随目标工作负载的大小增加而任意增加. |
| Region Based Sampling<br>基于区域的采样 | 基于区域的采样允许用户在监控质量和开销之间做出自己的权衡, 并限制监控开销的上限. 为了避免无限制地增加开销, DAMON 将假定具有相同访问频率的多个相邻页面分组到一个区域中. 只有在这个前提下 (一个区域内的页面具有相同的访问频率), 只需要检查该区域里的一个页面即可. 因此, 在每个 sampling interval 中, DAMON 只需要在每个区域随机抽取一个页面并清除其访问位即可. 再经过一个 sampling interval 之后, DAMON 读取页面的访问位, 如果同时设置了该位, 则增加该区域的访问频率. 因此, 通过设置区域的数量, 可以控制监控开销. DAMON 允许用户设置区域的最小和最大数量来进行权衡. 但是, 如果不能保证这个假设, 这个方案就不能保证输出的质量. | 将具有相同访问频率的连续页面块分组到一个 region, 这样只需要从每个 region 内随机选取一个页面, 检查该页面的访问情况.<br>通过设置 regions 的个数, 可以控制 DAMON 的开销, 用户可以设置最小和最大的 region 数量(minimum number of regionsand maximum number of regions). |
| Region Based Sampling<br>基于区域的采样 | 基于区域的采样允许用户在监控质量和开销之间做出自己的权衡, 并限制监控开销的上限. 为了避免无限制地增加开销, DAMON 将假定具有相同访问频率的多个相邻页面分组到一个区域中. 只有在这个前提下 (一个区域内的页面具有相同的访问频率), 只需要检查该区域里的一个页面即可. 因此, 在每个 sampling interval 中, DAMON 只需要在每个区域随机抽取一个页面并清除其访问位即可. 再经过一个 sampling interval 之后, DAMON 读取页面的访问位, 如果同时设置了该位, 则增加该区域的访问频率. 因此, 通过设置区域的数量, 可以控制监控开销. DAMON 允许用户设置区域的最小和最大数量来进行权衡. 但是, 如果不能保证这个假设, 这个方案就不能保证输出的质量. | 将具有相同访问频率的连续页面块分组到一个 region, 这样只需要从每个 region 内随机选取一个页面, 检查该页面的访问情况.<br>通过设置 regions 的个数, 可以控制 DAMON 的开销, 用户可以设置最小和最大的 region 数量(minimum number of regions, and maximum number of regions). |
| Adaptive Regions Adjustment<br>自适应的区域调整 | 自适应区域调整机制使 DAMON 在保持用户配置的权衡的同时, 最大限度地提高精度, 减少开销. 即使初始监控目标区域构造良好, 以满足假设 (相同区域中的页面具有相似的访问频率), 数据访问模式也可以动态更改. 这将导致低监测质量. 为了尽可能地保持这个假设, DAMON 根据每个区域的访问频率自适应地进行合并和分割. 每个 aggregation interval, 比较相邻区域的访问频率, 当频率差较小时进行合并. 然后, 在报告并清除每个区域的聚合访问频率之后, 如果区域总数不超过分割后用户指定的最大区域数, 则将每个区域分割为两到三个区域. 通过这种方式, DAMON 提供了最佳的质量和最小的开销, 同时为用户设置了相应的限制. | 为了保持 region 内的页面具有相似的访问频率, DAMON 会动态地合并该和切割 region. 每次聚合间隔, DAMON 比较相邻 region 的访问频率, 如果频率相差较小, 则进行合并, 减少的 region 数量可以减少开销. 如果总 region 数不超过用户配置的最大 region, 则为了提高精度, 可以对 region 进行拆分. |
| Dynamic Target Space Update Handling | 监视目标地址范围可以动态的变化. 例如, 虚拟内存可以动态映射和取消映射. 物理内存可能被热插拔. 由于在某些情况下更改可能非常频繁, 因此 DAMON 会检查动态内存映射更改, 并仅针对每个用户指定的时间间隔(regions update interval)将其应用于抽象的目标区域. |
@@ -6685,18 +6685,13 @@ DAMON 利用两个核心机制 : **基于区域的采样**和**自适应区域
| 2021/07/16 | SeongJae Park <sjpark@amazon.com>/<sj38.park@gmail.com> | [Introduce Data Access MONitor (DAMON)](https://damonitor.github.io) | 数据访问监视器 DAMON | v34 ☑ [5.15-rc1](https://kernelnewbies.org/LinuxChanges#Linux_5.15.DAMON.2C_a_data_access_monitor) | [PatchWork v24,00/14](https://lore.kernel.org/patchwork/patch/1375732), [LWN](https://lwn.net/Articles/1461471)<br>*-*-*-*-*-*-*-* <br>[PatchWork v34,00/13](https://patchwork.kernel.org/project/linux-mm/cover/20210716081449.22187-1-sj38.park@gmail.com) |
| 2021/08/31 | SeongJae Park <sjpark@amazon.com>/<sj38.park@gmail.com>/<sjpark@amazon.de> | [mm/damon/vaddr: Safely walk page table](https://patchwork.kernel.org/project/linux-mm/patch/20210831161800.29419-1-sj38.park@gmail.com) | 提交 linux-mm 的 [3f49584b262c ("mm/damon: implement primitives for the virtual memory address spaces")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3f49584b262c) 尝试使用 follow_invalidate_PTE() 查找任意虚拟地址的 PTE 或 PMD, 但没有正确锁定. 此提交通过在正确的锁定(保持 mmap 读取锁定)下使用另一个页面表遍历函数来解决此问题, 并使用了更通用的 walk_page_range(). | v1 ☐ | [PatchWork v2](https://patchwork.kernel.org/project/linux-mm/patch/20210831161800.29419-1-sj38.park@gmail.com) |
| 2021/09/17 | SeongJae Park <sjpark@amazon.com> | [mm, mm/damon: Trivial fixes](https://patchwork.kernel.org/project/linux-mm/cover/20210917123958.3819-1-sj@kernel.org) | DAMON 的 fix 补丁. | v1 ☐ | [PatchWork 0/5](https://patchwork.kernel.org/project/linux-mm/cover/20210917123958.3819-1-sj@kernel.org) |
| 2021/10/08 | SeongJae Park <sjpark@amazon.com> | [mm/damon/dbgfs: Implement recording feature](https://patchwork.kernel.org/project/linux-mm/patch/20211008094509.16179-1-sj@kernel.org) | 为 'damon-dbgfs' 实现 'recording' 特性<br>用户空间可以通过 'damon_aggregate' 跟踪点事件获得监视结果. 为了简单起见, 跟踪点事件有一些重复的信息, 比如 'target_id' 和 'nr_regions'. 这造成它的大小比实际需要的要大. 另外, 对于一些简单的用例, 处理跟踪点可能会很复杂. 为了给用户空间提供一种更有效和简单的监控结果的方法, 这个提交实现了 'damon-dbgfs' 中的 'recording' 特性. 该特性通过一个名为 'record' 的新 debugfs 文件导出到用户空间, 该文件位于 '/damon/' 目录下. 该文件允许用户以简单格式在常规二进制文件中记录监视的访问模式. 记录的结果首先写入内存缓冲区并批处理刷新到文件中. 用户可以通过读取和写入 record 文件来获取和设置缓冲区的大小和结果文件的路径. | v1 ☐ | [PatchWork 1/4](https://patchwork.kernel.org/project/linux-mm/patch/20211008094509.16179-1-sj@kernel.org) |
| 2021/10/12 | SeongJae Park <sjpark@amazon.com> | [DAMON: Support Physical Memory Address Space Monitoring](https://www.phoronix.com/scan.php?page=news_item&px=DAMON-Physical-Monitoring) | 允许物理地址空间监控. | v1 ☑ 5.16-rc1 | [PatchWork RFC,v9,00/10](https://patchwork.kernel.org/project/linux-mm/cover/20201007071409.12174-1-sjpark@amazon.com)<br>*-*-*-*-*-*-*-* <br>[PatchWork RFC,v10,00/13](https://patchwork.kernel.org/project/linux-mm/cover/20201216094221.11898-1-sjpark@amazon.com))<br>*-*-*-*-*-*-*-* <br>[PatchWork 0/7](https://patchwork.kernel.org/project/linux-mm/cover/20211012205711.29216-1-sj@kernel.org)|
| 2021/10/12 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon/dbgfs: add region_stat interface](https://patchwork.kernel.org/project/linux-mm/patch/20211012054948.90381-1-xhao@linux.alibaba.com) | DAMON 中使用 damon-dbgfs 操作带来了很大的遍历, 有时候如果我希望能够查看任务的划分区域 nr_access 等值, 当前这不能直接通过 dbgfs 接口查看, 所以添加一个接口 "region_stat" 来显示. | v1 ☐ | [PatchWork](https://patchwork.kernel.org/project/linux-mm/patch/20211012054948.90381-1-xhao@linux.alibaba.com/) |
| 2021/10/13 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon: Adjust the size of kbuf array to avoid overflow](https://patchwork.kernel.org/project/linux-mm/patch/20211013114854.15705-1-xhao@linux.alibaba.com) | NA | v1 ☐ | [PatchWork](https://patchwork.kernel.org/project/linux-mm/patch/20211013114854.15705-1-xhao@linux.alibaba.com) |
| 2021/10/16 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon/core: Optimize kdamod.%d thread creation code](https://patchwork.kernel.org/project/linux-mm/patch/20211016165914.96049-1-xhao@linux.alibaba.com) | 当 ctx->adaptive_targets 列表为空, 无需创建并调用kdamond. 只有当 ctx->adaptive_targets 列表不为空, 且 ctx->kdamond 指针为 NULL 时, 才调用__damon_start函数. | v1 ☐ | [PatchWork v1](https://patchwork.kernel.org/project/linux-mm/patch/20211016165616.95849-1-xhao@linux.alibaba.com)<br>*-*-*-*-*-*-*-* <br>[PatchWork v2](https://patchwork.kernel.org/project/linux-mm/patch/20211016165914.96049-1-xhao@linux.alibaba.com) |
| 2021/10/21 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon/dbgfs: Optimize target_ids interface write operation](https://patchwork.kernel.org/project/linux-mm/patch/bc341f48b5558f6816dcef22eca4f4a590efdc67.1634834628.git.xhao@linux.alibaba.com) | NA | v2 ☐ | [PatchWork v1](https://patchwork.kernel.org/project/linux-mm/patch/20211021085611.81211-1-xhao@linux.alibaba.com)<br>*-*-*-*-*-*-*-* <br>[PatchWork v2](https://patchwork.kernel.org/project/linux-mm/patch/bc341f48b5558f6816dcef22eca4f4a590efdc67.1634834628.git.xhao@linux.alibaba.com) |
| 2021/10/27 | Changbin Du <changbin.du@gmail.com> | [mm/damon: simplify stop mechanism](https://patchwork.kernel.org/project/linux-mm/patch/20211027130517.4404-1-changbin.du@gmail.com) | NA | v2 ☐ | [PatchWork v2](https://patchwork.kernel.org/project/linux-mm/patch/20211027130517.4404-1-changbin.du@gmail.com) |
| 2022/02/15 | SeongJae Park <sj@kernel.org> | [Allow DAMON user code independent of monitoring primitives](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=851040566a008f7248cb754d5bb9a3e34f2effe5) | 614655 | v1 ☑ 5.18-rc1 | [LORE v1,0/8](https://lore.kernel.org/all/20220215184603.1479-1-sj@kernel.org) |
| 2022/02/16 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon: Add NUMA access statistics function support](https://patchwork.kernel.org/project/linux-mm/cover/cover.1645024354.git.xhao@linux.alibaba.com/) | 614856 | v1 ☐☑ | [LORE v1,0/5](https://lore.kernel.org/r/cover.1645024354.git.xhao@linux.alibaba.com) |
| 2022/02/17 | SeongJae Park <sj@kernel.org> | [Introduce DAMON sysfs interface](https://patchwork.kernel.org/project/linux-mm/cover/20220217161938.8874-1-sj@kernel.org/) | 615483 | v1 ☐☑ | [LORE v1,0/4](https://lore.kernel.org/r/20220217161938.8874-1-sj@kernel.org)<br>*-*-*-*-*-*-*-* <br>[LORE, v1,00/12](https://patchwork.kernel.org/project/linux-mm/cover/20220223152051.22936-1-sj@kernel.org) |
| 2022/03/15 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon: Add CMA minotor support](https://patchwork.kernel.org/project/linux-mm/cover/cover.1647378112.git.xhao@linux.alibaba.com/) | 为 DAMON 增加 CMA 内存监控功能. 在某些内存紧张的情况下, 通过监控 CMA 内存释放更多内存将是一个不错的选择. | v1 ☐☑ | [LORE v1,0/3](https://lore.kernel.org/r/cover.1647378112.git.xhao@linux.alibaba.com) |
| 2021/01/07 | SeongJae Park <sjpark@amazon.com> | [tools/perf: Integrate DAMON in perf](https://lore.kernel.org/all/20210107120729.22328-1-sjpark@amazon.com) | perf 支持 DAMON 监控. | v1 ☐☑✓ | [LORE](https://lore.kernel.org/all/20210107120729.22328-1-sjpark@amazon.com) |
| 2022/04/18 | Yuanchu Xie <yuanchu@google.com> | [[RESEND] selftests/damon: add damon to selftests root Makefile](https://patchwork.kernel.org/project/linux-mm/patch/20220418202017.3583638-1-yuanchu@google.com/) | 633136 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220418202017.3583638-1-yuanchu@google.com) |
| 2021/12/10 | SeongJae Park <sj@kernel.org> | [mm/damon/schemes: Extend stats for better online analysis and tuning](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=dbcb9b9f954f71fb46be34af624c9edaaa171414) | 20211210150016.35349-1-sj@kernel.org | v1 ☑✓ 5.17-rc1 | [LORE v1,0/6](https://lore.kernel.org/all/20211210150016.35349-1-sj@kernel.org) |
| 2022/01/14 | Baolin Wang <baolin.wang@linux.alibaba.com> | [mm/damon: add access checking for hugetlb pages](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=49f4203aae06ba9d67b500c90339b262b0a52637) | TODO | v1 ☐☑✓ | [LORE](https://lore.kernel.org/all/6afcbd1fda5f9c7c24f320d26a98188c727ceec3.1639623751.git.baolin.wang@linux.alibaba.com), [COMMIT](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=49f4203aae06ba9d67b500c90339b262b0a52637) |
@@ -6704,10 +6699,26 @@ DAMON 利用两个核心机制 : **基于区域的采样**和**自适应区域
| 2022/05/07 | Gautam Menghani <gautammenghani201@gmail.com> | [Add documentation for Enum value 'NR_DAMON_OPS' in](https://patchwork.kernel.org/project/linux-mm/patch/20220507165620.110706-1-gautammenghani201@gmail.com/) | 639422 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220507165620.110706-1-gautammenghani201@gmail.com) |
### 13.6.3 DAMOS(DAMON Operation Schemes)
### 13.6.3 DAMON Interface
-------
#### 13.6.3.1 DAMON Operation Schemes
DAMON 最开始引入的时候, 为 DAMON 设计了 debugfs, 位于 `/sys/kernel/debug/damon` 目录下. 然而, 使 DMON 工具的使用和配置依赖于 debugfs, 是非常不合理的, DAMON 并不是只用于调试. 此外, debugfs 接口通过一个文件接收多个值. 例如, schemes 文件接收 18 个值. 结果, 它效率低下, 难以使用, 并且难以扩展. 特别是, 保持用户空间工具的向后兼容性越来越具有挑战性. 因此最好是实现另一个可靠和灵活的接口, 并逐步弃用 DAMON_DBGFS.
因此, v5.18 [Introduce DAMON sysfs interface](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=b18402726bd10e122c65eecc244ca1cdcb868cc8) 引入了基于 sysfs 的 DAMON 新用户界面. 新接口的思想是, 使用目录层次结构, 每个值都有一个专用文件. 通过 damo 等用户态程序, 可以很直观的使用 json 文件灵活地配置 DAMON. 按照作者的预期, debufs 接口将在下个 LTS 版本被废弃.
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:----:|:----:|:---:|:----:|:---------:|:----:|
| 2021/10/08 | SeongJae Park <sjpark@amazon.com> | [mm/damon/dbgfs: Implement recording feature](https://patchwork.kernel.org/project/linux-mm/patch/20211008094509.16179-1-sj@kernel.org) | 为 'damon-dbgfs' 实现 'recording' 特性<br>用户空间可以通过 'damon_aggregate' 跟踪点事件获得监视结果. 为了简单起见, 跟踪点事件有一些重复的信息, 比如 'target_id' 和 'nr_regions'. 这造成它的大小比实际需要的要大. 另外, 对于一些简单的用例, 处理跟踪点可能会很复杂. 为了给用户空间提供一种更有效和简单的监控结果的方法, 这个提交实现了 'damon-dbgfs' 中的 'recording' 特性. 该特性通过一个名为 'record' 的新 debugfs 文件导出到用户空间, 该文件位于 '/damon/' 目录下. 该文件允许用户以简单格式在常规二进制文件中记录监视的访问模式. 记录的结果首先写入内存缓冲区并批处理刷新到文件中. 用户可以通过读取和写入 record 文件来获取和设置缓冲区的大小和结果文件的路径. | v1 ☐ | [PatchWork 1/4](https://patchwork.kernel.org/project/linux-mm/patch/20211008094509.16179-1-sj@kernel.org) |
| 2021/10/12 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon/dbgfs: add region_stat interface](https://patchwork.kernel.org/project/linux-mm/patch/20211012054948.90381-1-xhao@linux.alibaba.com) | DAMON 中使用 damon-dbgfs 操作带来了很大的遍历, 有时候如果我希望能够查看任务的划分区域 nr_access 等值, 当前这不能直接通过 dbgfs 接口查看, 所以添加一个接口 "region_stat" 来显示. | v1 ☐ | [PatchWork](https://patchwork.kernel.org/project/linux-mm/patch/20211012054948.90381-1-xhao@linux.alibaba.com/) |
| 2021/10/21 | Xin Hao <xhao@linux.alibaba.com> | [mm/damon/dbgfs: Optimize target_ids interface write operation](https://patchwork.kernel.org/project/linux-mm/patch/bc341f48b5558f6816dcef22eca4f4a590efdc67.1634834628.git.xhao@linux.alibaba.com) | NA | v2 ☐ | [PatchWork v1](https://patchwork.kernel.org/project/linux-mm/patch/20211021085611.81211-1-xhao@linux.alibaba.com)<br>*-*-*-*-*-*-*-* <br>[PatchWork v2](https://patchwork.kernel.org/project/linux-mm/patch/bc341f48b5558f6816dcef22eca4f4a590efdc67.1634834628.git.xhao@linux.alibaba.com) |
| 2022/02/17 | SeongJae Park <sj@kernel.org> | [Introduce DAMON sysfs interface](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=b18402726bd10e122c65eecc244ca1cdcb868cc8) | 615483 | v1 ☑ 5.18-rc1 | [LORE v1,0/4](https://lore.kernel.org/r/20220217161938.8874-1-sj@kernel.org)<br>*-*-*-*-*-*-*-* <br>[LORE, v1,00/12](https://patchwork.kernel.org/project/linux-mm/cover/20220223152051.22936-1-sj@kernel.org) |
| 2021/01/07 | SeongJae Park <sjpark@amazon.com> | [tools/perf: Integrate DAMON in perf](https://lore.kernel.org/all/20210107120729.22328-1-sjpark@amazon.com) | perf 支持 DAMON 监控. | v1 ☐☑✓ | [LORE](https://lore.kernel.org/all/20210107120729.22328-1-sjpark@amazon.com) |
### 13.6.4 DAMOS(DAMON Operation Schemes)
-------
#### 13.6.4.1 DAMON Operation Schemes
-------
DAMON 使用各种试探法来确定哪些内存页处于活动使用状态, 并尽可能地利用这些信息来影响内存管理.
@@ -6729,14 +6740,20 @@ DAMOS 借助 debugfs 定制自己的监控处理方案. 例如, 配置 `echo "40
| 2021/12/21 | Changbin Du <changbin.du@gmail.com> | [Add a new scheme to support demotion on tiered memory system](https://patchwork.kernel.org/project/linux-mm/cover/cover.1640077468.git.baolin.wang@linux.alibaba.com) | 现在, 在具有不同内存类型的分级内存系统上, shrink_page_list() 中的回收路径已经支持将页面降级以减慢内存节点的速度, 而不是丢弃页面. 然而, 此时快速内存节点的内存水印已经紧张, 这将增加页面降级期间的内存分配延迟. 因此, 从用户空间主动降格冷页面的新方法将更有帮助. 我们可以依靠用户空间中的 DAMON 来帮助监控快速内存节点上的冷内存, 并主动降级冷页面来降低内存节点的速度, 以保持快速内存节点处于健康状态. 这个补丁集引入了一个名为 DAMOS_DEMOTE 的新模式来支持这个特性. | v2 ☐ | [LORE 0/2](https://lore.kernel.org/all/cover.1640077468.git.baolin.wang@linux.alibaba.com) |
#### 13.6.3.2 DAMON-based Reclamation
#### 13.6.4.2 DAMON-based Reclamation
------
* Proactive Reclamation on top of DAMON/DAMOS
v5.16 基于 DAMOS 的 pageout scheme(DAMOS_PAGEOUT), 实现了主动回收 [Introduce DAMON-based Proactive Reclamation](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=bec976b691437d056a92964cb7af07ee1a54221a) 机制, 通过 DAMON_RECLAIM 开启, 可以查询查找特定时间内没有被访问的内存区域(冷页), 主动将其回收或者 PAGE_OUT. 参见 phoronix 报道 [DAMON-Based Memory Reclamation Merged For Linux 5.16](https://www.phoronix.com/news/DAMON-Reclamation-Linux-5.16) 以及 LWN 报道 [Using DAMON for proactive reclaim](https://lwn.net/Articles/863753). 内核文档 [DAMON-based Reclamation](https://www.kernel.org/doc/html/latest/admin-guide/mm/damon/reclaim.html).
v6.0 内核包含朝这个方向迈出的另一步, 使 DAMON 能够主动对内核最近最少使用(LRU) 列表上的页面进行重新排序. 参见 LWN 报道 [LRU-list manipulation with DAMON](https://lwn.net/Articles/905370) 以及内核文档 [DAMON-based LRU-lists Sorting](https://www.kernel.org/doc/html/latest/admin-guide/mm/damon/lru_sort.html).
v6.0 内核包含朝这个方向迈出的另一步, 使 DAMON 能够主动对内核最近最少使用(LRU) 列表上的页面进行重新排序. 参见 LWN 报道 [LRU-list manipulation with DAMON](https://lwn.net/Articles/905370) 以及内核文档 [DAMON-based LRU-lists Sorting](https://www.kernel.org/doc/html/latest/admin-guide/mm/damon/lru_sort.html). 作者 SeongJae Park 称这种机制为 主动 LRU 列表排序 PLRUS(proactive LRU-list sorting), 他在补丁集的 cover-letter 中声称, 如果调整得当, 这种机制可以产生一些不错的结果: "PLRUS 在内存压力下内存 PSI some 减少了 10%, 主要页面故障减少了 14%, 加速了 3.74%".
PLRUS 为 DAMOS 添加了两个新操作: [DAMOS_LRU_PRIO](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8cdcc532268df0893d9756f537cbce479f4c4831) 和 [DAMOS_LRU_DEPRIO](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=99cdc2cd180a7adc87badc9ca92f8af803d8bf3b), 第一个将导致指示的页面移动到活动列表的头部, 使它们成为内核将尝试停用或回收的最后一个页面; 相反, 第二个将停用给定的页面, 导致它们被移动到非活动列表, 换句话说, 通过这种变化, DAMOS 深入内存管理子系统, 利用其探测到的高级信息使 LRU 列表的顺序更接近实际使用情况, 如果系统突然面临内存压力并且必须快速开始回收内存, 则此排序可能特别有用.
当然这些效果依赖于 DAMON 提供的有效的监测数据, 一般数据准确度越高, 对性能的影响也越大. DAMOS 提供了一套灵活的参数来提高 DAMON 的精度和限制 DAMOS 本身使用的 CPU 时间, 对于资深的管理员和开发者这提供了很大的灵活性, 他们了解内存管理的工作原理, 并且能够准确地测量更改的影响, 它还使完全破坏系统的性能变得容易. 同时为了帮助那些没有时间或技能的管理员为他们的工作负载提出最佳的 DAMOS 调优, Park 还添加了一个名为 [damon_lru_sort 的新内核模块](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=40e983cca9274e177bd5b9379299b44d9536ac68), 它使用 DAMOS 在一组“保守”参数下执行主动 LRU 列表排序, 这些参数旨在安全地提高性能, 同时最大限度地减少开销, 该模块将使使用 LRU 列表排序功能更容易, 但它仍然具有一组重要的参数, 可以从[内核文档](https://www.kernel.org/doc/html/latest/admin-guide/mm/damon/lru_sort.html)中查阅相关资料.
PLRUS 这一机制旨在解决与 MGLRU 工作类似的问题, MGLRU 也试图更准确地了解哪些页面正在使用中, 以便做出更好的页面替换决策, 关于如何处理 MGLRU 页面移动, 有许多悬而未决的问题; 有开发者建议使用加载 BPF 程序来控制这些决策, 但 DAMOS 也可能有所帮助, 这两种机制之间的整合目前尚不存在, 但可以添加可能是一件好事.
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:----:|:----:|:---:|:----:|:---------:|:----:|
@@ -6746,6 +6763,18 @@ v6.0 内核包含朝这个方向迈出的另一步, 使 DAMON 能够主动对内
| 2022/06/13 | SeongJae Park <sj@kernel.org> | [Extend DAMOS for Proactive LRU-lists Sorting](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=6acfcd0d75244178a4a101fe0da888fa3bff29fb) | [LRU-list manipulation with DAMON](https://lwn.net/Articles/905370) | v1 ☑✓ 6.0-rc1 | [2022/05/13 LORE RFC,0/3](https://lore.kernel.org/damon/20220513150000.25797-1-sj@kernel.org)<br>*-*-*-*-*-*-*-* <br>[2022/06/13 LORE v1,0/8](https://lore.kernel.org/all/20220613192301.8817-1-sj@kernel.org) |
### 13.6.5 业界的使用
-------
OpenAnolis 龙蜥社区开源了 datop 工具, 在识别冷热内存以及跨 numa
B 站视频 [龙蜥开源工具 datop, 在识别冷热内存以及跨 numa 访存方面有什么样的优秀表现](https://www.bilibili.com/video/BV1Ra411t72z)
CSDN 宣传博客 [内存不超过5M, datop 在识别冷热内存及跨 numa 访存有多硬核?| 龙蜥技术](https://blog.csdn.net/weixin_60347558/article/details/124585007)
| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 |
|:----:|:----:|:---:|:----:|:---------:|:----:|
| 2021/12/09 | Xin Hao <xhao@linux.alibaba.com> | [`#85` Introduce Data Access MONitor (DAMON)](https://gitee.com/anolis/cloud-kernel/pulls/85/commits) | 支持 NUMA 的能力, 同时改进了 tracepoint, 方便 dattop 解析. | [openanolis, devel-5.10, PR #85](https://gitee.com/anolis/cloud-kernel/pulls/85/commits) | [GITEE,PR](https://gitee.com/anolis/cloud-kernel/pulls/85/commits) |
# 14 杂项
-------
+22 -13
View File
@@ -39,14 +39,23 @@
| microsoft | [微软的 linux 内部版本 CBL-Mariner](https://github.com/microsoft/CBL-Mariner-Linux-Kernel)<br>*-*-*-*-*-*-*-* <br>[WSL2-Linux-Kernel](https://github.com/microsoft/WSL2-Linux-Kernel)<br>*-*-*-*-*-*-*-* <br>[azure-linux-kernel](https://github.com/microsoft/azure-linux-kernel) | NA |
# 3 野的不能再野的野分支
# 3 发行版
-------
| 发行版 | open source | build |
|:-----:|:----------:|:-------:|
| MANJARO | | [packages/core/linux](https://gitlab.manjaro.org/packages/core?filter=linux) |
# 4 野的不能再野的野分支
-------
[Linux 内核为什么没有第三方的版本或分支?](https://www.zhihu.com/question/36367269/answer/144200260)
在 Linux 发展过程中, 存在诸多场景以及诸多特性和优化无法合入主线, 其中一些特性在特定场景往往表现极为出色, 当然也存在一些开发者出于兴趣, 自行进行了维护, 因此 Linux 衍生出了诸多(野)分支.
## 3.1 那些没有进主线的演进特性
## 4.1 那些没有进主线的演进特性
-------
| 分支 | 描述 | 内核 |
@@ -65,7 +74,7 @@
## 3.2 微内核
## 4.2 微内核
-------
@@ -75,7 +84,7 @@
| [darwin-xnu](https://github.com/apple/darwin-xnu) | 苹果的微内核 | [opensource](https://opensource.apple.com/source/xnu), [cbowser/xnu](https://fergofrog.com/code/cbowser/xnu) |
# 4 Linux Version
# 5 Linux Version
-------
[LWN 上各版本归档](https://lwn.net/Kernel/Index)
@@ -90,7 +99,7 @@
| 5.19 | NA | NA | NA |
| 6.0 | NA | NA | [Linux 6.0 Supporting New Intel/AMD Hardware, Performance Improvements & Much More](https://www.phoronix.com/review/linux-60-features), [6.0-rc1](https://www.phoronix.com/news/Linux-6.0-rc1-Released) |
# 5 业界会议
# 6 业界会议
-------
@@ -114,14 +123,14 @@
| [USENIX](https://www.usenix.org/conferences/all) | NA |
## 5.1 LPC
## 6.1 LPC
-------
| 日期 | 录屏 |
|:---:|:----:|
| 2021/09 | [Watch Live (Free)](https://www.linuxplumbersconf.org/event/11/page/107-watch-live-free) |
## 5.2 ASPLOS
## 6.2 ASPLOS
-------
@@ -129,12 +138,12 @@
|:---:|:----:|
| 2021/04/12 ~ 2021/04/23 | [ASPLOS 2021](https://asplos-conference.org/2021/index.html) | [ASPLOS 2021 论文选读](https://zhuanlan.zhihu.com/p/366849275)
## 5.3 SOSP
## 6.3 SOSP
-------
[SOSP](https://sosp.org)
## 5.4 USENIX's OSDI
## 6.4 USENIX's OSDI
-------
OSDI 的全称是 USENIX Symposium on Operating Systems Design and Implementation, 但随着时代的发展, 它早已不局限在操作系统领域.
@@ -145,17 +154,17 @@ OSDI 的全称是 USENIX Symposium on Operating Systems Design and Implementatio
| 2021/04/12 ~ 2021/04/23 | [ASPLOS 2021](https://asplos-conference.org/2021/index.html) | [OSDI2021 论文选读](https://zhuanlan.zhihu.com/p/393380577) |
## 5.5 LSFMM
## 6.5 LSFMM
-------
| 日期 | 链接 |
|:---:|:----:|
| 2022/05/02 ~ 2022/05/04 | [LSFMM-2022](https://lwn.net/Articles/893733) |
# 6 统计信息
# 7 统计信息
-------
## 6.1 版本
## 7.1 版本
-------
| 网站 | 描述 |
@@ -163,7 +172,7 @@ OSDI 的全称是 USENIX Symposium on Operating Systems Design and Implementatio
| [LWN](https://lwn.net/Kernel/Index/#Releases) | LWN 每个版本都会在合并窗口发布 Merge Window, 在版本发布之后还会发布 [development statistics](https://lwn.net/Articles/867540) 信息 |
## 6.2 测试
## 7.2 测试
-------
@@ -0,0 +1,16 @@
diff a/study/kernel/00-DESCRIPTION/OPEN_SOURCE.md b/study/kernel/00-DESCRIPTION/OPEN_SOURCE.md (rejected hunks)
@@ -3,12 +3,13 @@
[Android Kernel Features](https://elinux.org/Android_Kernel_Features)
-| 公司 | github | MAIN|
+| 公司 | github | MAIN |
|:-----:|:----------:|:-------:|
| GOOGLE | [googlesource](https://android.googlesource.com/kernel/common) | NA |
| QCOM | [source.codeaurora](https://source.codeaurora.org/quic/la/kernel) | [codeaurora](https://www.codeaurora.org) |
| HUAWEI | [consumer-opensource](https://consumer.huawei.com/en/opensource/detail/?siteCode=worldwide&productCode=Smartphones&fileType=openSourceSoftware&pageSize=10&curPage=1) | [opensource](https://consumer.huawei.com/en/opensource) |
| XiaoMi | [Xiaomi_Kernel_OpenSource](https://github.com/MiCode/Xiaomi_Kernel_OpenSource), [mitwo-dev](https://github.com/mitwo-dev)| [micode](https://www.micode.net) |
+| RealMe | [realme-kernel-opensource](https://github.com/realme-kernel-opensource) | NA |
| 魅族 | [meizuosc](https://github.com/meizuosc), [lvchaqiu](https://github.com/lvchaqiu)| [魅族内核团队](https://kernel.meizu.com) |
| 三星 | [opensource.samsung.com](https://opensource.samsung.com/uploadSearch?searchValue=kernel) | [BogList](https://opensource.samsung.com/community/blogList) |
| OPPO | [oppo-source](https://github.com/oppo-source) | NA |
+8 -1
View File
@@ -5349,7 +5349,14 @@ Roman Gushchin 在邮件列表发起了 BPF 对调度器的潜在应用的讨论
-------
[Plugsched](https://gitee.com/anolis/plugsched) 是 OpenAnolos Linux 内核调度器子系统热升级的 SDK, 它可以实现在不重启系统、应用的情况下动态替换调度器子系统, 毫秒级 downtime. Plugsched 可以对生产环境中的内核调度特性动态地进行增、删、改, 以满足不同场景或应用的需求, 且支持回滚. 参见 [龙蜥开源 Plugsched: 首次实现 Linux kernel 调度器热升级 | 龙蜥技术](https://openanolis.cn/blog/detail/532955762604705772).
[Plugsched](https://gitee.com/anolis/plugsched) 是 OpenAnolos Linux 内核调度器子系统热升级的 SDK, 它可以实现在不重启系统、应用的情况下动态替换调度器子系统, 毫秒级 downtime. Plugsched 可以对生产环境中的内核调度特性动态地进行增、删、改, 以满足不同场景或应用的需求, 且支持回滚. 参见
[龙蜥开源 Plugsched: 首次实现 Linux kernel 调度器热升级 | 龙蜥技术](https://openanolis.cn/blog/detail/532955762604705772).
[Plugsched —— Linux 内核调度器热升级](https://openanolis.cn/sig/Cloud-Kernel/doc/614810558709245780)
B 站 Plugsched 介绍视频 [纯干货解读:Plugsched,首次实现 Linux kernel 调度器热升级|龙蜥大讲堂18期](https://www.bilibili.com/video/BV1cW4y1y76c).
基于 Plugsched 实现的调度器热升级, 不修改现有内核代码, 就能获得较好的可修改能力, 天然支持线上的老内核版本. 如果提前在内核调度器代码的关键数据结构中加入 Reserve 字段, 可以额外获得修改数据结构的能力, 进一步提升可修改能力.