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),就像随机写入一样的主要内容,如果未能解决你的问题,请参考以下文章

安装suse linux问题求助

交换分区,进程,rpm&yum

linux 文件系统 xfsext4ext3 的区别

Linux分区类型EXT2EXT3EXT4详解

linux分区之ext2,ext3,ext4,gpt

《Linux杂记》Window读取 Ext3/Ext4文件系统数据