今天想要来看看 RISC-V Linux 核心有支援哪些核心功能(需要各个架构自行实作的核心功能)。
子系统 | 特点 | Kconfig | 状态 | 简介 |
---|---|---|---|---|
core | cBPF-JIT | HAVE_CBPF_JIT | TODO | 支援 cBPF JIT 的优化 |
core | eBPF-JIT | HAVE_EBPF_JIT | ok | 支援 eBPF JIT 的优化 |
core | generic-idle-thread | GENERIC_SMP_IDLE_THREAD | ok | 利用通用 SMP 闲置执行绪的基础设施 |
core | jump-labels | HAVE_ARCH_JUMP_LABEL | ok | 支援动态调整,高效率的分支 |
core | thread-info-in-task | THREAD_INFO_IN_TASK | ok | 利用核心基础设施把 thread_info 置入 task_struct 内 |
core | tracehook | HAVE_ARCH_TRACEHOOK | ok | 支援处理 tracehook (ptrace) 暂存器的应用程序介面 |
debug | debug-vm-pgtable | ARCH_HAS_DEBUG_VM_PGTABLE | ok | 支援针对是否符合 |
debug | gcov-profile-all | ARCH_HAS_GCOV_PROFILE_ALL | ok | 支援整体核心 GCOV 程序码覆盖率的剖析 |
debug | KASAN | HAVE_ARCH_KASAN | ok | 支援 KASAN 动态的记忆体检查 |
debug | kcov | ARCH_HAS_KCOV | ok | 支援 kcov 基於程序码覆盖率所做的随机测试 |
debug | kgdb | HAVE_ARCH_KGDB | ok | 支援 kGDB 核心除错器 |
debug | kmemleak | HAVE_DEBUG_KMEMLEAK | ok | 支援核心记忆体漏失侦测器 |
debug | kprobes | HAVE_KPROBES | ok | arch supports live patched kernel probe |
debug | kprobes-on-ftrace | HAVE_KPROBES_ON_FTRACE | ok | arch supports combined kprobes and ftrace live patching |
debug | kretprobes | HAVE_KRETPROBES | ok | arch supports kernel function-return probes |
debug | optprobes | HAVE_OPTPROBES | TODO | arch supports live patched optprobes |
debug | stackprotector | HAVE_STACKPROTECTOR | ok | 支援编译器辅助的 stack overflow 保护机制 |
debug | uprobes | ARCH_SUPPORTS_UPROBES | ok | arch supports live patched user probes |
debug | user-ret-profiler | HAVE_USER_RETURN_NOTIFIER | TODO | arch supports user-space return from system call profiler |
io | dma-contiguous | HAVE_DMA_CONTIGUOUS | ok | 支援 DMA 的连续记忆体配置器 |
locking | cmpxchg-local | HAVE_CMPXCHG_LOCAL | TODO | 支援 this_cpu_cmpxchg() API |
locking | lockdep | LOCKDEP_SUPPORT | ok | 支援动态 locking 正确性除错的基础设施 |
locking | queued-rwlocks | ARCH_USE_QUEUED_RWLOCKS | TODO | arch supports queued rwlocks |
locking | queued-spinlocks | ARCH_USE_QUEUED_SPINLOCKS | TODO | arch supports queued spinlocks |
perf | kprobes-event | HAVE_REGS_AND_STACK_ACCESS_API | ok | arch supports kprobes with perf events |
perf | perf-regs | HAVE_PERF_REGS | ok | 支援 perf 事件暂存器的存取 |
perf | perf-stackdump | HAVE_PERF_USER_STACK_DUMP | ok | arch supports perf events stack dumps |
sched | membarrier-sync-core | ARCH_HAS_MEMBARRIER_SYNC_CORE | TODO | arch supports core serializing membarrier |
sched | numa-balancing | ARCH_SUPPORTS_NUMA_BALANCING | ok | arch supports NUMA balancing |
seccomp | seccomp-filter | HAVE_ARCH_SECCOMP_FILTER | ok | arch supports seccomp filters |
time | arch-tick-broadcast | ARCH_HAS_TICK_BROADCAST | ok | 提供 tick_broadcast() |
time | clockevents | !LEGACY_TIMER_TICK | ok | 支援通用的时脉事件 |
time | context-tracking | HAVE_CONTEXT_TRACKING | ok | arch supports context tracking for NO_HZ_FULL |
time | irq-time-acct | HAVE_IRQ_TIME_ACCOUNTING | ok | 支援精准 IRQ 时间的稽核 |
time | virt-cpuacct | HAVE_VIRT_CPU_ACCOUNTING | TODO | 支援精准虚拟 CPU 时间的稽核 |
vm | batch-unmap-tlb-flush | ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH | TODO | 支援 "将 TLB flush 延至多个分页被取消映射时执行" |
vm | ELF-ASLR | ARCH_HAS_ELF_RANDOMIZE | ok | "arch randomizes the stack,heap and binary images of ELF binaries" |
vm | huge-vmap | HAVE_ARCH_HUGE_VMAP | TODO | 支援 arch_vmap_pud_supported() 和 arch_vmap_pmd_supported() 虚拟记忆体 APIs |
vm | ioremap_prot | HAVE_IOREMAP_PROT | TODO | 支援 ioremap_prot() |
vm | PG_uncached | ARCH_USES_PG_UNCACHED | TODO | 支援 PG_uncached 分页旗标 |
vm | pte_special | ARCH_HAS_PTE_SPECIAL | ok | 支援 pte_special()/pte_mkspecial() 虚拟记忆体 APIs |
vm | THP | HAVE_ARCH_TRANSPARENT_HUGEPAGE | ok | 支援巨大分页 |
上面提到这麽多的核心功能,就挑里面我比较理解的,来看看有什麽功用吧!
这边整理了一些 feature 的简介,有些是目前超出我的理解范围、有些则是时间上来不及,所以先空着,希望有机会再回来检视补齐罗!
有些东西真的太难翻译啦!XD
arch supports live patched user probes
感觉英文还比翻成中文之後好懂 XD还有打开 ${linux}/Documentation/riscv/features.rst 发现只有以下两行,看来这个 feature 应该是透过某种方式被自动产生出来,看来这篇翻译的 patch 并不是直接翻译就可以完成的。
.. SPDX-License-Identifier: GPL-2.0
.. kernel-feat:: $srctree/Documentation/features riscv
$srctree/Documentation/features
,发现有一个 list-arch.sh
,猜测是在文件"编译"的过程中,会去执行这个脚本,而这个脚本就会去遍历 feature 资料夹中所有描述 feature 的档案,来确认哪些架构支援哪些功能,最後在 render 出这一个表格。linux-doc 的 maintainer 终於回信了,他指出我并没有在适当的 index 档案内,加入新增的翻译档案,希望修正这些,并且提醒每次再送 patch 之前,要先 build 过,确认 make 的过程是可以正确结束的,再送 patch;的确是一个当头棒喝啊!前几天再送 patch 的时候,都只有跑过 checkpatch.pl
,并没有实际把整个文件相关的档案都 build 过、检验过,确实不可取!
Kernel 的功能非常的多样,有的用在除错、有的用在效能分析,而各个项目相关的技术也是多如牛毛,所以想要成为一个 kernel 程序码的贡献者,说难吗?其实机会非常的多,看看这个表格 status 还是标示 TODO 的部分;但说简单吗?核心程序码的检验非常的严格,但的的确却不失为一个自我挑战的好机会!
这篇结束後,RISC-V 相关的文件就只剩下 PMU 了!在蒐集相关资料的过程中,发现在 RISC-V Task Group 有大量的讨论,而相关的 Spec 也在今年有了个样子,感觉对我来说会是个不那麽好懂的文件,可能会需要多点时间爬梳,所以接下来可能会留个几天,来仔细地看看这份文件,那麽我要先来去修前几天的 patch 罗!
感谢各位观看,我们明天再来一起挑战 PMU!
<<: Day 13 复习 golang concurrency 语法篇 II
>>: Day 13 | 同步与非同步- Thread类别与runOnUiThread()方法
昨天主要介绍了视窗看门狗和独立看门狗的差别,今天来看这如何计算,这计算方式再参考手册里面有举例说明,...
今天来带大家了解一下 NiFi 原生的 Monitoring 是怎麽运作的,像是 Disk, Mem...
slot 在子元件(内层)中预留空间,由父元件(外层)设定、分配内容。 子元件本身对slot无控制权...
接下来探讨一种透过牛顿法来找到相除解的方法 收敛除法 Step1 : 规格化 N 和 D,令 D 趋...
去年宝哥在 Modern WEB 中介绍过 Angular 有时会发生版本不相容的 issue , ...