土法炼钢兴趣小组的算法知识备份

【操作系统百科】稳定与不稳定 ABI

文章导航

分类入口
os
标签入口
#abi#sysfs#debugfs#syscall#userspace-api

目录

写监控脚本读 /sys/class/net/eth0/speed——升级内核后还能用吗?答案取决于这个接口在 ABI 光谱上的位置。

一、先看图

flowchart LR
    STABLE[稳定 ABI<br/>永不破坏] --> SYSCALL[系统调用<br/>最稳定]
    STABLE --> SYSFS[sysfs<br/>Documentation/ABI/stable]
    TESTING[测试 ABI<br/>可能变] --> SYSFS_T[sysfs<br/>Documentation/ABI/testing]
    UNSTABLE[不稳定<br/>随时变] --> DEBUGFS[debugfs]
    UNSTABLE --> TRACEFS[tracefs]
    UNSTABLE --> PROCFS_D[/proc 部分接口]

    classDef stable fill:#3fb95022,stroke:#3fb950,color:#adbac7;
    classDef test fill:#f0883e22,stroke:#f0883e,color:#adbac7;
    classDef unstable fill:#f8514922,stroke:#f85149,color:#adbac7;
    class SYSCALL,SYSFS stable
    class SYSFS_T test
    class DEBUGFS,TRACEFS,PROCFS_D unstable

二、Linus 的规则

“We do not break userspace. Period.”

系统调用一旦发布 → 永远不删除、不改变语义。用户态程序依赖的行为 → 即使是 bug → 如果有足够多的用户 → 变成 feature。

2.1 例外

三、Documentation/ABI

Documentation/ABI/
├── stable/         # 承诺稳定
├── testing/        # 可能变化(需要通知)
├── obsolete/       # 计划移除
└── removed/        # 已移除

每个文件描述一个 ABI 接口:

What:           /sys/class/net/<iface>/speed
Date:           April 2005
KernelVersion:  2.6.12
Contact:        netdev@vger.kernel.org
Description:    Shows the interface speed in Mbps.
Users:          NetworkManager, ethtool

四、sysfs 规则

4.1 one value per file

sysfs 的黄金规则:每个文件只包含一个值。

cat /sys/class/net/eth0/speed
# 1000

不是像 /proc/meminfo 那样的多行表格。

4.2 可依赖性

五、debugfs / tracefs

mount -t debugfs debugfs /sys/kernel/debug
mount -t tracefs tracefs /sys/kernel/debug/tracing

明确非 ABI——格式、路径、内容随时可能变化。

不要在生产监控脚本中依赖 debugfs/tracefs 的具体格式。

六、/proc 的混乱历史

/proc 是最早的内核信息接口——不遵循 sysfs 规则:

七、sysctl

sysctl -a | head
sysctl net.ipv4.tcp_max_syn_backlog

sysctl 通过 /proc/sys/ 暴露 → 大部分稳定但有例外(被重命名或移除的 sysctl)。

八、syscall 的超级稳定性

系统调用号 → 永远不变
系统调用语义 → 永远不变

例:open(2) 从 1991 年到今天 → 同一个系统调用号 → 同一个语义。

新功能 → 新 syscall(openat2)→ 不改旧的。

九、UAPI headers

include/uapi/linux/

用户空间可以包含的头文件 → 定义了 struct、常量、ioctl 号 → 一旦发布即稳定。

十、小结


参考文献

工具


上一篇内核模块生态 下一篇ftrace

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-17 · os

【操作系统百科】系统调用 ABI:x86_64 / arm64 / riscv / Windows NT 对照

系统调用是 OS 最稳定的接口。本文拆解 Linux syscall 的参数寄存器约定、返回值规范(负 errno 与 2-value ABI)、x86_64 SYSCALL、arm64 SVC、RISC-V ECALL、Windows NT 的 int 2e/syscall/SYSENTER 历史;说明为什么 Linux 承诺 \"don't break userspace\"、什么东西算 syscall ABI、vDSO 如何用共享内存加速、Go/musl/glibc 各自怎么实现 syscall stub。

2026-06-24 · os

【操作系统百科】/proc 与 /sys

为什么 /proc/self/status 的字段总让人困惑?本文讲 procfs vs sysfs 设计哲学、常用字段解读、pid namespace 下表现、per-cgroup 接口、稳定性分级。

2026-04-27 · os

【操作系统百科】内存回收

Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。

2026-04-28 · os

【操作系统百科】交换

swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。


By .