linux – EXT4性能在包含大量小文件的系统上变得非常糟糕

前端之家收集整理的这篇文章主要介绍了linux – EXT4性能在包含大量小文件的系统上变得非常糟糕前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个只有128MB RAM的小型嵌入式设备

连接到此设备的是2TB USB2硬盘

直到最近,当文件数量超过磁盘容量阈值超过阈值时,我对设备的性能一直非常满意(我不确定哪个)

在磁盘上有很多小文件,由于编写应用程序文件的性质是以非常平衡的方式组织的 – 没有叶节点目录有超过200个文件,而且只有超过800,000个文件.

我希望能够在调查方面取得领先.磁盘性能大幅下降,设备拉得很好,然后突然性能下降就像一块石头.

我的假设是我在磁盘上为我的文件选择的组织结构以某种方式损害了inode缓存保持zippy的能力.

作为一个实验,我卸下了磁盘(刷新缓存,免费验证).然后从命令提示符我深入导航到目录结构.所有告诉这个目录(和它的孩子们)下面只包含大约3200个文件,此时“免费”显示> 117MB的可用内存

此时,我输入命令’find’后跟’free’

‘find’显示了大约3000个文件,但内存使用量从~117MB变为~2MB

我理解缓存与可用内存的平衡,以及内核如何将空页视为坏页面 – 然而,来自3000个文件目录的115MB缓存内容指向了我理解中的严重差距.我希望有人能帮我理解发生的事情

我可以假设平衡树是获取大量文件方法吗?

解决方法

非常好的问题描述.

根据你的说法,我认为你所看到的是板坯用量很高.一个很好的实验是在深入fs层次结构并发现3000个文件的同时,在3秒的延迟中运行cat / proc / meminfo和cat / proc / slabinfo.本质上发生的是内核将遍历fs结构并扫描单个文件及其inode,并且所有这些文件都存储在内存中.如果检查/ proc / slabinfo,您将看到一个名为ext4_inode_cache的对象,它告诉您每个inode将占用多少内存.将其与no对象(obj_size * no_obj)相乘,即可得到对象使用的内存量.深入到fs层次结构中,在系统达到内存区域的高水位之前,将消耗更多的内存.此时,内核将开始回收.

如果您查看meminfo和slabinfo,您将获得所需的详细信息.如果你想让我看看,请将它粘贴;)

猜你在找的Linux相关文章