我有一个场景,一个任务是内存和I / O密集型,我需要找到一个很好的平衡,我可以分配给流程多少可用的RAM以及我应该留给系统构建它的I / O缓存用于正在使用的块设备.
我怀疑当前正在发生的大多数I / O是访问相当小的文件子集(或大文件的一部分),并且可以通过增加可用于I / O缓冲的RAM来优化性能.
理想情况下,我可以创建类似“热图”的东西,向我显示大多数时间访问文件的哪些部分.
安装程序目前基于AWS / EC2 m1.large实例上的CentOS 5.磁盘设置可以是RAID0设置(LVM)中的短暂块设备,也可以是单个(500GB)EBS
更新:最初,这个问题是讨论磁盘块,这是误导,因为我实际上对正在访问的逻辑块感兴趣,我不关心它们在物理设备上的位置.我改变了这一点,以明确它是我感兴趣的文件的一部分.我为这种混乱道歉.
解决方法
您要求的内容对调整缓冲区缓存并不是很有用 – 如果您有一个连续的磁盘(或一个呈现为一个并且表现为一个的阵列)并且正在考虑优化磁盘布局,那么它可能很有用,但这已经进入Deep Filesystem Magic.
您可以阅读McKusick关于文件系统设计的论文(or spend 42 minutes and watch this great video),以获得文件系统如何为您优化文件系统的基本概念 – 文件系统非常擅长将on-disklayout设置为正确.
在缓冲区高速缓存优化方面,您需要查看缓存命中数与缓存未命中数(特别是导致未命中的原因).磁盘上的物理位置并不重要 – 重要的是你需要多少次才能获得你想要的磁盘,以及你的缓存是否足够大以至于不会一直搅动(基本上否定了缓存效率).
调整比其他任何东西都更加试错 – 一个非常低效的经验法则是将缓冲区缓存的最大文件/数据块的大小减去2倍,但是你几乎总是更好的开始非常倾向于应用程序或缓存,并调整到最佳性能.