在具有许多小文件的系统上,EXT4的性能确实变得很差


10

我有一个只有128MB RAM的小型嵌入式设备

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

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

磁盘上有许多小文件,由于编写应用程序文件的性质,它们是以非常平衡的方式组织的-叶子节点目录中没有超过200个文件,而只有80万个文件。

我希望在调查方面取得领先。磁盘性能大幅下降,设备运行良好,然后突然性能下降。

我的假设是,我在磁盘上为我的文件选择的组织结构在某种程度上损害了inode缓存保持zippy的能力。

作为实验,我卸下了磁盘(刷新缓存,免费验证)。然后,从命令提示符下,我导航至目录结构。所有人都知道该目录(及其子目录)下仅包含大约3200个文件,此时“免费”显示了超过117MB的可用内存

此时,我键入命令“ find”,然后键入“ free”

'find'显示了大约3000个文件,但内存使用量从〜117MB增至〜2MB

我了解了缓存与可用内存之间的平衡,以及内核如何将一个空页视为一个坏页-但是,从3000个文件的目录中缓存的115MB内容在我的理解上存在严重差距。我希望有人能帮助我了解发生了什么

我可以假设平衡树是拥有大量文件的方法吗?

Answers:


9

很好的问题描述。

根据您所说的,我认为您看到的是平板的使用率很高。一个好的实验是在深入fs层次结构并发现3000个文件的同时,运行a cat /proc/meminfocat /proc/slabinfo经过3秒的延迟。本质上发生的是内核将遍历fs结构并扫描各个文件及其索引节点,并将它们全部存储在内存中。如果检查/proc/slabinfo,将看到一个名为的对象ext4_inode_cache,该对象告诉您每个索引节点将占用多少内存。将此乘以对象数(obj_size * no_obj),即可得到对象使用的内存量。深入fs层次结构,将消耗更多的内存,直到系统达到内存区域的高水位标记为止。此时,内核将开始回收。

如果您拨入meminfo和slabinfo,您将获得所需的详细信息。如果您想让我看一下,请将其粘贴;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.