文件系统

linux/fs

procfs

linux/fs/proc

/proc/sys

  • inotify

    • max_user_instances 限制每个用户创建的inotify实例(inotify_init系统调用的最大数量)

    • max_user_watches 限制每个用户可以监控的文件目录总数(inotify_add_watch总数)

    • max_queued_events 限制单个inotify实例的事件队列最大长度

/proc/version

保存了内核版本和一些编译信息

  cat /proc/version
  Linux version 6.6.13-gentoo-x86_64 (root@livecd) (x86_64-pc-linux-gnu-gcc (Gentoo 13.2.1_p20240113-r1 p12) 13.2.1 20240113, GNU ld (Gentoo 2.41 p4) 2.41.0) #1 SMP PREEMPT_DYNAMIC Sun Feb  4 13:22:48 CST 2024

/proc/cpuinfo

保存了与CPU相关的信息

/proc/config.gz

保存了内核的config文件的gzip

zcat /proc/config.gz

/proc/kcore

fs/proc/kcore.c 动态的内核文件 包含了系统中内核运行的所有数据

/proc/irq

IRQ中断请求的详细信息

  • default_smp_affinity 指明了适用于所有非激活IRQ的默认亲和性掩码 一旦IRQ被 分配/激活,它的亲和位掩码将被设置为默认掩码。然后可以如上所述改变它。默认掩码是0xffffffff

  • IRQS(irq编号)

    • smp_affinity 指定当前IRQ关联的CPU编号的掩码

    • smp_affinity_list 指定当前IRQ关联的CPU编号的列表

限制由CPU1来处理wifi 我的wifi的irq编号94

cd /proc/irq/94
echo 1 > smp_affinity_list
cat /proc/interrupts |grep -i 'CPU\|94:'

/proc/cmdline

当前内核的启动参数

/proc/PID/maps

进程的内存布局

通过分析这个文件,我们可以了解进程使用内存的全貌,包括代码段、数据段、堆、栈、共享库、动态分配的内存等。

示例

00400000-0040b000 r-xp 00000000 08:01 1234567  /usr/bin/ls

字段

含义

004...-004..

内存地址范围

r-xp

权限标志位 分别为读,写,执行,是否为私有(p)映射

000000

偏移量 映射文件在磁盘上的偏移量(十六进制)若为匿名映射(如堆、栈),则为 0。

08:01

设备号:映射文件所在的设备标识符(主设备号:次设备号)。匿名映射通常为 00:00 或 fe:00(tmpfs)。

123456

inode号: 映射文件的inode编号 匿名映射为0

/usr/bin/ls

映射文件的路径或特殊区域 可能值: 路径, [heap]: 堆,[stack]: 栈, [anon]:匿名映射,[vdso]: 虚拟动态共享对象,[vvar]:内核变量的用户空间映射,[vsyscall]: 旧系统调用映射

/proc/PID/smaps

更详细的内存布局

字段

含义

Size

虚拟地址大小

KernelPageSize

内核页大小:系统内核使用的内存

MMUPageSize

MMU页大小

Rss

驻留内存: 实际占用的物理内存

Pss

比例共享内存: 该虚拟内存区域平摊计算后使用的物理内存大小. Pss 比 Rss 更能准确反映进程的 “实际内存消耗”

Pss_Dirty

脏页比例共享内存: Pss 中被修改过的内存(脏页) 即该区域所有物理内存都已被写入过数据

Shared_Clean

共享干净页: 被多个进程共享且未修改的物理内存

Shared_Dirty

共享脏页: 被多个进程共享且已修改的物理内存

Private_Clean

私有干净页: 仅当前内存使用的未被修改的内存

Private_Dirty

私有脏页: 仅当前进程使用且已修改的内存

Referenced

已访问内存(活跃内存): 内核不会优先同步到磁盘

Anonymous

匿名内存: 该区域无磁盘文件(非文件映射)

KSM

未使用KSM技术合并的内存页(该区域内存无重并)

LazyFree

延迟释放内存

AnonHugePages

匿名大页

ShmemPmdMapped

共享内存大页映射 共享内存通过PMD映射的大页

FilePmdMapped

文件大页映射

Shared_Hugetlb

共享大页

Private_Hugetlb

私有大页

Swap

非mmap内存由于

SwapPss

交换页比例共享内存

Locked

锁定内存: 被mlock等调用锁定

/proc/mounts

已挂载文件系统表

sysfs

/sys/devices/system/cpu/CPUID/cpufreq

内核的cpu频率调节接口

  • scaling_cur_frequencies: 当前cpu频率

  • scaling_min_freq: 当前频率下限

  • scaling_max_freq: 上限

  • scaling_governor: 当前调节器

  • scaling_drvier: 当前驱动

  • scaling_available_governors: 可用调节器

Inotify

linux/fs/notify/inotify inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。本系统的出现取代了旧有Linux核心里,拥有类似功能之dnotify模块。

Inotify事件类型

linux/include/uapi/linux/inotify.h

/* 以下是合法的、已实现的事件,用户空间可以监听这些事件 */
#define IN_ACCESS		0x00000001	/* 文件被访问 */
#define IN_MODIFY		0x00000002	/* 文件被修改 */
#define IN_ATTRIB		0x00000004	/* 元数据变更 */
#define IN_CLOSE_WRITE		0x00000008	/* 可写文件被关闭 */
#define IN_CLOSE_NOWRITE	0x00000010	/* 不可写文件被关闭 */
#define IN_OPEN			0x00000020	/* 文件被打开 */
#define IN_MOVED_FROM		0x00000040	/* 文件从X移动 */
#define IN_MOVED_TO		0x00000080	/* 文件移动到Y */
#define IN_CREATE		0x00000100	/* 子文件被创建 */
#define IN_DELETE		0x00000200	/* 子文件被删除 */
#define IN_DELETE_SELF		0x00000400	/* 自身被删除 */
#define IN_MOVE_SELF		0x00000800	/* 自身被移动 */

/* 以下是合法事件,它们会按需发送给所有监听器 */
#define IN_UNMOUNT		0x00002000	/* 底层文件系统被卸载 */
#define IN_Q_OVERFLOW		0x00004000	/* 事件队列溢出 */
#define IN_IGNORED		0x00008000	/* 文件被忽略 */

/* 辅助事件 */
#define IN_CLOSE		(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* 关闭事件 */
#define IN_MOVE			(IN_MOVED_FROM | IN_MOVED_TO) /* 移动事件 */

/* 特殊标志 */
#define IN_ONLYDIR		0x01000000	/* 仅当路径是目录时监听 */
#define IN_DONT_FOLLOW		0x02000000	/* 不追踪符号链接 */
#define IN_EXCL_UNLINK		0x04000000	/* 排除已解除链接对象的事件 */
#define IN_MASK_CREATE		0x10000000	/* 仅创建监听 */
#define IN_MASK_ADD		0x20000000	/* 添加到已存在监听的掩码 */
#define IN_ISDIR		0x40000000	/* 事件发生在目录上 */
#define IN_ONESHOT		0x80000000	/* 仅发送事件一次 */

/* 所有事件集合 */
#define IN_ALL_EVENTS	(IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
			 IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
			 IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \
			 IN_MOVE_SELF)

Inotify系统调用

  • [inotify_init][#inotify-init] Q

  • [inotify_add_watch][#inotify-add-watch]

  • [inotify_rm_watch][#inotify-rm-watch]

tmpfs

基于内存的文件系统

/dev/shm

默认为内存大小的一半 驻留在内存中 读写异常快

修改大小

mount -o remount,size=32G tmpfs /dev/shm