linux 2.6.43,ext3,10K RPM SAS 磁盘,在不同文件上进行 2 次顺序写入(直接 io),就像随机写入一样
Posted
技术标签:
【中文标题】linux 2.6.43,ext3,10K RPM SAS 磁盘,在不同文件上进行 2 次顺序写入(直接 io),就像随机写入一样【英文标题】:linux 2.6.43, ext3, 10K RPM SAS disk, 2 sequential write(direct io) on different file acting like random write 【发布时间】:2015-10-05 09:01:48 【问题描述】:我最近在这个问题上停滞不前:
“在不同的文件上进行 2 次顺序写入(直接 io 4KB alignemnt 块),就像随机写入一样,在 10K RPM SAS 磁盘中产生较差的写入性能”。
最让我困惑的事情:我有一批服务器,都配备了相同类型的磁盘(raid 1 与 2 300GB 10K RPM 磁盘),但响应不同。
几台服务器都可以用这种写模式,磁盘快乐接受高达50+MB/s; (相同的内核版本,相同的文件系统,不同的库(libc 2.4)) 其他没那么多,100 op/s seams达到了底层磁盘的极限,证实了磁盘的随机写入性能; ((相同的内核版本,相同的文件系统,不同的库 (libc 2.12)))
[注意:我检查了不同 libc 的“pwrite”代码,它只告诉简单的“syscall”]
我已经设法排除了以下可能性: 1.我自己的程序中的软件错误; 通过一个简单的deamon(编译时没有动态链接),做sequcetial direct io write; 2.磁盘问题; 在一台测试机器上切换 2 个不同版本的 linux 系统,这在我的直接 io 写入模式上表现良好,并且在切换到旧的 lib 版本后几天,随机写入不好;
我尝试比较:
/sys/block/sda/queue/*,这两种方式可能不同; filefrag 只显示两个不同的文件交错顺序增长物理块 ID;
一定是某种写策略导致了这个问题,但我不知道从哪里开始:
内核设置不同?,可能与ext3如何分配磁盘块有关? raid 缓存(回写)还是磁盘缓存写策略? 或将逻辑块映射到实际物理块的底层磁盘策略?
真的很感激
【问题讨论】:
添加信息:我刚刚发现了两个不同的服务器,即使应用相同的linux内核(2.6.32.43),但版本不同: - 公司其他组制作的linux系统; - SUSE linux;也许这两个采用不同的块分配策略? 【参考方案1】:答案是: 这是因为 /sys/block/sda/queue/schedule 设置:
机器 A:显示时间表:cfq,但实际上是截止日期; MACHINE B:计划与 cfq 一致; //=> 因为我的服务器是 db svr,所以截止日期是我最好的选择;
【讨论】:
以上是关于linux 2.6.43,ext3,10K RPM SAS 磁盘,在不同文件上进行 2 次顺序写入(直接 io),就像随机写入一样的主要内容,如果未能解决你的问题,请参考以下文章