有没有办法收集有关在磁盘上访问块的统计信息?
我有一个任务既是内存又是I / O密集的场景,我需要find一个很好的平衡点,我可以分配给这个进程有多less可用内存,以及我应该为系统构buildI / Ocaching正在使用的块设备。
我怀疑目前正在发生的大部分I / O正在访问一个相当小的文件子集(或部分大文件),并且可以通过增加可用于I / O缓冲的RAM来优化性能。
理想情况下,我可以创build类似“热图”的东西,显示大部分时间访问文件的哪些部分。
目前安装程序基于AWS / EC2 m1.large实例上的CentOS 5。 磁盘设置可以是RAID0设置(LVM)中的临时块设备,也可以是单个(500GB)EBS
更新:最初,这个问题是关于磁盘块,这是误导,因为我真正感兴趣的逻辑块被访问,我不在乎他们在物理设备上。 我改变了这一点,以明确这是我感兴趣的文件的一部分。我对这个混淆抱歉。
我不确定你完全理解现代的缓冲区caching是如何工作的 – 你只是想要限制你的进程使用的RAM数量(因此缓冲区caching“足够”可用,但是你想关于它在错误的方式。
你所要求的对于调整缓冲区caching并不是很有用 – 如果你有一个连续的磁盘(或者一个呈现为一个并且performance为一个的数组),并且正在寻求优化磁盘布局,但这是进入深度文件系统魔术。
您可以阅读McKusick关于文件系统devise( 或花费42分钟,观看这个伟大的video )的论文,以获得文件系统已经尝试为您优化的一个基本概念 – 文件系统非常擅长使磁盘上的布局正确。
就缓冲区高速caching优化而言,您需要查看高速caching命中数与高速caching未命中数(特别是导致未命中的情况)。 磁盘上的物理位置并不重要 – 重要的是您需要多less次才能打开磁盘才能获得所需的内容,以及caching是否足够大以至于不会持续搅动(实质上是否定了caching效率)。
debugging比其他任何尝试都要多 – 一个非常低效的经验法则是将缓冲区caching中最大的文件/数据块的大小保留2倍,但几乎总是比较好极大地偏向应用程序或caching,并调整为最佳性能。
如果你正在谈论一个服务器级的系统,还有其他的variables需要考虑。 我明白你的要求,但在现代系统中,这些东西已经被多级caching和智能RAID控制器的优化所抽象。
对于写偏移的活动,应该将大部分随机写入工作负载写入电池或闪存备份的非易失性caching(以便提供快速写入确认),并顺序地将其合并并刷新到您的磁盘。 如果你没有使用这样的东西,你就把performance留在桌子上。
为了阅读活动,操作系统做了一个合理的cachine工作。 有额外的控制器caching帮助。 除此之外,您可以使用一些技巧来帮助控制您的虚拟内存子系统。 (请参阅: 虚拟内存Toucher )
另请参阅: 清除/刷新高速caching的内存
但是,我们需要您的设置的细节,以帮助理解如何提供帮助。
使用iotop 。 那正是你所需要的。
我将把我的选票投入DSTAT( http://dag.wieers.com/home-made/dstat/ )。 看看top-io,top-latency,top-mem等一些开关。它不会为你做一个热图或者磁盘的哪个部分被访问,但是它可能会帮助你指向正确的方向