Linux性能优化实战学习笔记:第二十三讲
一、索引节点和目录
1、索引节点
2、目录项
3、关系
为了帮助你理解目录项、索引节点以及文件数据的关系,我画了一张示意图,你可以对照这张图,来回忆刚刚讲过的内容,把只知识和细节串联起来
4、Slabs
5、系统格式化
二、虚拟文件系统
1、Linux文件系统的架构图
这里、我画了一张Linux文件系统的架构图,帮你更好地理解系统调用、VFS、缓存、文件系统以及块存储之间的关系图
2、基于磁盘的文件系统
2、基于内存的文件系统
3、网络文件系统
三、文件系统I/O
1、cat过程解析
2、标准库缓存
3、操作系统页缓存
4、是否阻塞自身运行
5、等待响应结果
四、性能观测
1、容量
1、查看文件系统的磁盘空间使用情况
1 2 3 | [root@luoahong ~] # df /dev/sda1 Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 4010852 0 4010852 0% /dev |
2、df -h获得更好的可读性
1 2 3 | [root@luoahong ~] # df -h /dev/sda1 Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 0 3.9G 0% /dev |
3、查看索引节点使用情况
1 2 3 | [root@luoahong ~] # df -i /dev/sda1 Filesystem Inodes IUsed IFree IUse% Mounted on devtmpfs 1002713 401 1002312 1% /dev |
4、小结
2、缓存
1、free输出的Cache是页缓存和可回收Slab缓存的和
1 2 3 4 | [root@luoahong ~] # cat /proc/meminfo | grep -E "SReclaimable|Cached" Cached: 314664 kB SwapCached: 0 kB SReclaimable: 37348 kB |
2、所有目录项和各文件系统索引节点的缓存情况:
1 2 3 4 5 6 7 8 9 10 11 | [root@luoahong ~] # cat /proc/slabinfo | grep -E '^#|dentry|inode' # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail> ovl_inode 98 98 664 49 8 : tunables 0 0 0 : slabdata 2 2 0 xfs_inode 7740 8424 896 36 8 : tunables 0 0 0 : slabdata 234 234 0 mqueue_inode_cache 36 36 896 36 8 : tunables 0 0 0 : slabdata 1 1 0 hugetlbfs_inode_cache 53 53 608 53 8 : tunables 0 0 0 : slabdata 1 1 0 sock_inode_cache 2550 2550 640 51 8 : tunables 0 0 0 : slabdata 50 50 0 shmem_inode_cache 1764 1833 696 47 8 : tunables 0 0 0 : slabdata 39 39 0 proc_inode_cache 2945 3038 656 49 8 : tunables 0 0 0 : slabdata 62 62 0 inode_cache 25746 25872 584 56 8 : tunables 0 0 0 : slabdata 462 462 0 dentry 39767 42966 192 42 2 : tunables 0 0 0 : slabdata 1023 1023 0 |
3、找到内存占用最多的缓存类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [root@luoahong ~] # slabtop Active / Total Objects (% used) : 384466 / 393627 (97.7%) Active / Total Slabs (% used) : 7262 / 7262 (100.0%) Active / Total Caches (% used) : 95 / 140 (67.9%) Active / Total Size (% used) : 107507.27K / 111249.76K (96.6%) Minimum / Average / Maximum Object : 0.01K / 0.28K / 16.62K OBJS ACTIVE USE OBJ SIZE SLABS OBJ /SLAB CACHE SIZE NAME 48420 48420 100% 0.13K 807 60 6456K kernfs_node_cache 43008 39809 92% 0.19K 1024 42 8192K dentry 33799 33799 100% 0.05K 463 73 1852K Acpi-Parse 25872 25746 99% 0.57K 462 56 14784K inode_cache 25536 23690 92% 0.50K 399 64 12768K kmalloc-512 21760 21760 100% 0.03K 170 128 680K kmalloc-32 18688 18688 100% 0.02K 73 256 292K kmalloc-16 12800 12764 99% 0.20K 320 40 2560K vm_area_struct 12352 11907 96% 0.06K 193 64 772K anon_vma_chain 10248 10248 100% 0.07K 183 56 732K Acpi-Operand 9920 9211 92% 0.06K 155 64 620K kmalloc-64 9786 9786 100% 0.09K 233 42 932K kmalloc-96 9728 9728 100% 0.01K 19 512 76K kmalloc-8 9024 8704 96% 0.25K 141 64 2256K filp 8992 8844 98% 2.00K 562 16 17984K kmalloc-2k 8424 7740 91% 0.88K 234 36 7488K xfs_inode 8262 8262 100% 0.04K 81 102 324K Acpi-Namespace 7590 7590 100% 0.09K 165 46 660K anon_vma 5208 5208 100% 0.57K 93 56 2976K radix_tree_node 4128 3841 93% 1.00K 129 32 4128K kmalloc-1k 3904 3904 100% 0.12K 61 64 488K pid 3776 3520 93% 0.25K 59 64 944K skbuff_head_cache 3740 3740 100% 0.05K 44 85 176K ftrace_event_field 3276 3276 100% 0.19K 78 42 624K cred_jar 3038 2945 96% 0.64K 62 49 1984K proc_inode_cache 2880 2288 79% 0.12K 45 64 360K kmalloc-128 |
4、小结
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构