内存、伪文件系统与 Overlay/FUSE

内存、伪文件系统与 Overlay/FUSE

1. ramfs/tmpfs

ramfs/ 提供简单内存文件系统;tmpfs 数据实际由 MM shmem 实现,可:

  • 使用 page cache;
  • 在启用 swap 时换出;
  • 设置 size/nr_inodes;
  • 支持 seals、huge page policy(按配置);
  • 作为 /dev/shm、容器临时层。

ramfs 没有有效容量限制,特权用户写满可耗尽内存;生产更适合有限额 tmpfs。

2. procfs

proc/ 通过 seq_file 和 task/mm/net 等接口导出动态内核状态。/proc/<pid> 可受 pid namespace、hidepid、ptrace 权限限制。大量读取 proc 可能触发昂贵遍历,不是零成本。

3. kernfs/sysfs

kernfs 提供层次节点、active reference、open file 和 notify 基础;sysfs 把 kobject 属性映射为文件。

sysfs ABI 通常要求一个属性一个值,用户态不应依赖内部目录创建时序。store callback 必须严格解析长度和范围。

4. debugfs/tracefs/configfs

  • debugfs:调试接口,无稳定 ABI;
  • tracefs:tracing 专用;
  • configfs:用户 mkdir/write 创建内核对象;
  • pstore:持久化崩溃/固件日志。

生产镜像可不挂 debugfs;不能把安全敏感控制长期暴露给普通用户。

5. OverlayFS

OverlayFS 合并:

  • lower layers:只读或基础;
  • upper:可写;
  • workdir:原子操作辅助;
  • merged view。

写 lower 文件触发 copy-up;删除以 whiteout/opaque 表示;rename、xattr、hard link、metacopy/index 等影响语义和性能。

容器镜像小文件密集写会产生大量 copy-up 和 metadata I/O。

6. FUSE

FUSE 将 VFS 请求通过 /dev/fuse 发送给用户态 daemon:

1
2
VFS op -> fuse request queue -> userspace daemon
-> backend -> reply -> waiting task

内核维护 inode/dentry/attribute 缓存、background request、interrupt 和 DAX(virtio-fs 等按配置)。daemon 卡住会让调用进程阻塞。

7. devpts/anon inode

  • devpts 管理 pseudo terminal;
  • anon_inodefs 为 epoll/eventfd/io_uring 等没有真实路径的 file 提供 inode/file;
  • nsfs 把 namespace 对象暴露为 fd;
  • configfs/sysfs 与普通持久文件系统语义不同。

8. RK3588

  • 只读根常用 EROFS/SquashFS lower + tmpfs/ext4 upper;
  • 容器 overlay upper 放在慢 eMMC 时 metadata latency明显;
  • tmpfs size 应与 memcg 联合限制;
  • FUSE 额外 context switch 对小 I/O 明显;
  • debugfs/tracefs 仅排障时开放。

文章互动

阅读 --

留言

0 条留言

正在加载留言…