Light From Twitter
开一个单独的文档记录一些想要保存 或者 感觉自己需要学习的内容。
听说你们没有女朋友,不好打发时间,玩起来:https://t.co/bFsK2OfHVc
— plantegg (@plantegg) May 5, 2024
我也推荐一个Neso Academy 的操作系统课,目前油管上英文教这门课就这个我觉得教的最好:https://t.co/yQtZdRgYBx https://t.co/vdJYgIRnPd pic.twitter.com/g1QUBjCVQm
— Susan the dice tree (@feltanimalworld) May 26, 2024
这是我最推荐的 CS 专业必看的操作系统课程,由哈工大出品,哈工大的李治军教授主讲。
需要懂一点点的 x86 汇编,看完之后编程水平会突飞猛进。
也可以购买他编写的教材《操作系统原理、实现与实践》。因为是教材,所以很便宜。https://t.co/HoKyedPADk pic.twitter.com/OBgqPBW8qi
— Austin(坚持每周分享✊) (@austinit) May 26, 2024
之前和读者聊到,“现在envoy用来做七层网关,要想达到好用,就差几个关键技术点没解决”。我决定开一个系列,不定期更新,写写 Envoy 目前还做得不够好的地方。https://t.co/xc52r1P4Wi 今天是第一篇,讲讲路由变更粒度。
— Zexuan Luo (@spacewander_lzx) May 26, 2024
还记得 Google 之前搞的用 eBPF 来做 CPU Schedule 的 Customize 么?https://t.co/wW0F5DESoN最近内核的老哥们很认真的在推这个事 https://t.co/plkrY8Y5a7额外推荐一个视频https://t.co/ruenu06Oirhttps://t.co/3Q9lvrISfh
— NadeshikoManju@摇曳露营 S3 放送中 (@Manjusaka_Lee) May 9, 2024
BTW,几年前写过一个排查内核侧,特别是驱动内侧使用的工具…:https://t.co/lRbDGBy0wX
已经用它找出过一大堆现网问题了,比如 nv,intel mlx 驱动分配内存却用任何工具看不出来的地方这个就可以瞬间看到… 缺点是需要重现现场,它需要动态抓取页面分配事件,前天还用这个迅速排查了几个问题…
— silosrc (@silosrc) April 30, 2024
Course on Linux debugging, profiling and tracing training by @bootlincom
Slides: https://t.co/OxmADoTOEHLab exercises: https://t.co/3Irhh332w1Lab material (.tar.xz): https://t.co/psVOfoxSbW#Linux #linuxkernel pic.twitter.com/s9J4ud9nuQ
— 0xor0ne (@0xor0ne) April 25, 2024
又有一本入坑内核开发的好书
《Linux Kernel Programming by Kaiwan N Billimoria》第二版。这本书最大的特点是:新+保姆式上手。
第一版基于内核5.4,第二版6.1,内容很新。(在内核和模块开发资料当中很难得)其次对于第一次涉及这个领域的小伙伴也非常友好,从安装虚拟机到第一次编译内核(续 pic.twitter.com/vXFMzN4MYt
— Hema shushu (@hemashushu) March 20, 2024
发现身边的小伙伴 Git 用的不是很熟练,我推荐了三个教程给他们。第一个是入门练手的:可以通过动画非常直观的了解 git 各种操作背后的原理,如 git tree 是如何生成和合并的。
非常推荐!https://t.co/SKGIAf6McNhttps://t.co/64guGEBMt5
还有两个是…..⬇️⬇️
— Guangzheng Li (@iguangzhengli) June 7, 2023
https://t.co/JQMNcjxskH
发现一个开源的小游戏还挺有趣,可以通过游戏来学习 git~ https://t.co/PNrfhrrMJf pic.twitter.com/53xXonlY0D
— Guangzheng Li (@iguangzhengli) April 22, 2024
Best Practices for OpenZFS L2ARC in the Era of NVMe (SDC 2019)https://www.youtube.com/watch?v=yHgSU6iqrlE
SSH Tunnels Cheat Sheet:
linux 系统调用open和close: https://blog.csdn.net/weixin_42330983/article/details/127266412
blktrace 命令说明
Blktrace 命令是一款 Linux 内核块设备 I/O 层的跟踪工具。它可以获取 I/O 请求队列的各种详细情况,包括进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等。
一个I/O请求进入block layer之后,可能会经历下面的过程:
Q Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它设备
G Split: 可能会因为I/O请求与扇区边界未对齐、或者size太大而被分拆(split)成多个物理I/O
I Merge: 可能会因为与其它I/O请求的物理位置相邻而合并(merge)成一个I/O
D 被IO Scheduler依照调度策略发送给driver
C 被driver提交给硬件,经过HBA、电缆(光纤、网线等)、交换机(SAN或网络)、最后到达存储设备,设备完成IO请求之后再把结果发回。
常见的状态切换 Q–G–I–D–C
259,2 0 2 0.000001080 7134 Q W 756856 + 800 [dd]
259,2 0 3 0.000004247 7134 X W 756856 / 757368 [dd]
259,2 0 4 0.000005806 7134 G W 756856 + 512 [dd]
259,2 0 5 0.000008792 7134 I W 756856 + 512 [dd]
259,2 0 6 0.000012844 7134 G W 757368 + 288 [dd]
259,2 0 7 0.000013202 7134 I W 757368 + 288 [dd]
259,2 0 8 0.000031708 1830 D W 756856 + 512 [kworker/0:1H]
259,2 0 9 0.000034250 1830 D W 757368 + 288 [kworker/0:1H]
259,2 0 10 0.001598439 7135 C W 756856 + 512 [0]
259,2 0 11 0.001689880 7135 C W 757368 + 288 [0]
# 主,从设备号 , 起始Sector 为0 , 写几个, 时间 , pid , 状态 , R/W , 未知
保留 blktrace 的结果为 bin 文件。
blktrace -d /dev/sdb
使用blkparse 分析已经有的记录
# 记录性能数据 到 文件。
root@ip-172-31-11-235:/home/ec2-user|⇒ blktrace -d /dev/nvme0n1p1
^C=== nvme0n1p1 ===
CPU 0: 1 events, 1 KiB data
CPU 1: 0 events, 0 KiB data
Total: 1 events (dropped 0), 1 KiB data
# 每个cpu设备每个设备存储一个单独的文件。
root@ip-172-31-11-235:/home/ec2-user|⇒ ll
total 4.0K
-rw-r--r-- 1 root root 56 Nov 4 17:55 nvme0n1p1.blktrace.0
-rw-r--r-- 1 root root 0 Nov 4 17:55 nvme0n1p1.blktrace.1
root@ip-172-31-11-235:/home/ec2-user|⇒ blkparse -i nvme0n1p1.blktrace.0
# 格式化分析的数据为bin。
root@ip-172-31-11-235:/home/ec2-user|⇒ blkparse -i nvme0n1p1 -d nvme0n1p1.blktrace.bin
# 使用一个简易的图形方式分析结果。
root@ip-172-31-11-235:/home/ec2-user|⇒ btt -i nvme0n1p1.blktrace.bin