Linux 特殊设备文件:从 /dev/null 到 mknod 自定义设备节点
本文要点 ls -l /dev 第一列的第一个字符 c / b 区分字符设备与块设备,后面那个 1, 3 才是关键:它是主设备号、次设备号。内核找驱动靠的是这组数字,跟文件名、跟路径毫无关系 三个"垃圾桶式"特殊文件的行为完全不同:/dev/null 写入丢弃、读立即 EOF(实测读出 0 字节);/dev/zero 读出来是无穷个 0;/dev/full 读也是 0,但任何写入都报...
本文要点 ls -l /dev 第一列的第一个字符 c / b 区分字符设备与块设备,后面那个 1, 3 才是关键:它是主设备号、次设备号。内核找驱动靠的是这组数字,跟文件名、跟路径毫无关系 三个"垃圾桶式"特殊文件的行为完全不同:/dev/null 写入丢弃、读立即 EOF(实测读出 0 字节);/dev/zero 读出来是无穷个 0;/dev/full 读也是 0,但任何写入都报...
本文要点 top / htop 里的 CPU 百分比不是内核算好的,而是工具读 /proc/stat 两次、把两次的累计值相减得到的。第一行那串数字是开机以来的累计 jiffies,这台机器上 1 个 jiffy = 10 毫秒(getconf CLKTCK = 100)。累计值说明不了"现在忙不忙":实测开机 30 小时,user 累计 136136 jiffies 也才 1.26%,idle.
本文要点 PSI 回答的是「有多少时间在等」,而不是「有多忙」。它把 CPU、内存、IO 三个资源的停顿时间做成百分比,直接可读、可直接告警 每个资源的文件里有两行:some 是「至少有一个任务在等」,full 是「所有非空闲任务都在等」。判断「整机是不是卡住了」看 full,判断「有没有人受影响」看 some ⚠️ CPU 的 full 几乎恒为 0。实测 1 核上跑 4 个忙循环:some..
本文要点iperf3 是主流的网络带宽基准测试工具,采用"一台服务端 + 一台客户端"的模式,客户端发起、服务端接收,测出点到点链路的真实吞吐服务端 iperf3 -s 启动并监听 5201 端口;客户端 iperf3 -c <主机IP> 默认用 TCP 打满带宽,输出逐秒速率与汇总-R 反向测速测下行链路,-P N 并行多流更贴近真实业务(如 Nginx 多连接并发),-u 转...
本文要点 ftrace 是内核自带的追踪框架,不需要装任何东西——它挂在 tracefs 上,本文用到的每一个功能都只是往 /sys/kernel/tracing/ 下的文件里读写文本 三个开关的心智模型:currenttracer 决定「装哪种追踪器」、tracingon 决定「录不录」、trace 是「录像带」(读它是快照,不清空、不用停录制) functiongraph 能把一次...
本文要点 排查「连不上 / 连得慢 / 连接数只涨不跌」时,内核其实一直在记录三张表:socket 表(谁在连、什么状态、队列里堆了多少字节)、累计计数器(连了多少次、失败多少次、重传多少段)、每条连接的控制块(tcpinfo:RTT、拥塞窗口、重传)。对应命令就是 ss、/proc/net/snmp、ss -ti——零安装、零抓包 ss -lnt 里 LISTEN 行的 Recv-Q /...
本文要点 Linux 有三本「登录账本」:utmp(当前登录)、wtmp(历史登录与重启)、btmp(失败登录),再加一本 lastlog(每个用户最后一次登录)——但现代 systemd 发行版里它们的分工已经变了 ⚠️ Ubuntu 22.04 上 w 会告诉你 0 users,哪怕你此刻正 SSH 登录着:sshd 只把失败登录写进 btmp,成功会话交给...
本文要点 losetup 干的事是把一个普通文件注册成块设备:truncate 造文件 → mkfs.ext4 写文件系统 → losetup -f --show 关联 → mount /dev/loop0。走完这条链,一个文件就获得了分区的一切待遇 镜像长大了内核不会自己知道:实测 truncate -s 96M 之后 blockdev --getsize64 /dev/loop0 仍然报...
本文要点 OverlayFS 用四个目录拼出一个视图:lowerdir(只读底层,可多层)、upperdir(可写层)、workdir(内核内部用的中转目录,必须与 upper 同一个文件系统)、merged(挂载点,用户看到的成品) 读走下层:lower 里的文件原样出现在 merged 里,一个字节都不复制 写要 copy-up:动一个 lower 文件,内核会把它整个复制到 upper...
本文要点 大页解决的是 TLB 查表次数:x86-64 默认页 4KiB,1GiB 工作集就是 26 万个页表项,TLB 装不下;换成 2MiB 大页只剩 512 项 透明大页由三个文件共同决定:enabled(always/madvise/never)、defrag(内核肯不肯为它做内存规整)、shmemenabled(共享内存那一侧)。这台机器是 madvise + madvise +...