转载:如何提升磁盘IO性能
目前,磁盘是机械操作的,主要是在读取和写入磁盘之前查找磁道的过程中。磁盘附带的读写缓存大小对磁盘读写速度至关重要。具有快速读写的磁盘通常具有较大的读写缓存。磁盘的查找过程是机械的,它确定其随机读写速度将明显低于顺序读写。当我们进行系统设计和实现时,我们需要考虑磁盘的这个特性。
FastDFS是一个开源且高效的分布式文件系统。它的初始实现,文件以散列模式随机分布到多个目录,后来又添加了顺序存储实践。通过比较测试,发现文件按目录顺序存储,写文件的效率明显高于目录随机存储的效率。
目前,磁盘顺序读取的速度还不错。例如,普通硬盘的IO可以达到每秒40~60MB,更好的硬盘可以达到每秒100MB左右。在多进程或多线程并发读取磁盘的情况下,随着并发数量的增加,磁盘IO效率将大大降低。主要是因为每次读取和写入,轨道可能具有大的偏移,并且轨道寻址时间增加,导致磁盘IO的性能急剧下降。对于此方案,优化方案是最小化并发读取和写入的进程或线程的数量。您可以使用锁定机制或专用磁盘IO线程来读取和写入磁盘。在FastDFS 2x版本中,磁盘读取和写入是使用专用线程完成的。
为了充分利用多个磁盘的效率,建议不要使用传统的RAID方法。一个好的做法是分别安装每个磁盘,并通过程序控制多个磁盘的并发读写。使用单个磁盘安装,可以使用多台计算机实现文件备份和冗余。
在大量文件(例如数千万个文件)之后,当随机访问许多文件时,文件系统的性能将急剧下降。业界流行的做法是通过将多个小文件组合成一个大文件来减少文件数量。 FastDFS 30支持将多个小文件合并和存储到一个大文件中。发展进度相对平稳。预计30版将于5月发布。
改进磁盘IO的另一个技巧是尽可能多地写入或尽可能多的读取。换句话说,将程序的读写缓冲区设置得尽可能大。例如,日志或重做日志写入,不是每次都直接写入磁盘,而是先缓存到内存中,然后在缓冲区满时写入磁盘,也可以定期写入磁盘。
操作系统和C库函数通常会缓存写入文件的内容,以减少实际写入文件的次数。直接调用系统函数fsync或C函数fflush将使系统的缓存机制无效,这将强制将内容刷新到磁盘。除非必要,否则不要执行强制刷牙操作。如果在操作过程中不慎将重要的数据弄丢了,可以用闪灵数据恢复找回数据;如果有重要的资料不希望别人进行查看等操作,可使用闪灵文件夹锁进行加锁。
打开终端
用top命令查看。输入:
top #查看swapiostat -x 1 10#查看%util %idle#如果 iostat 没有要 yum install sysstat#如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。idle小于70% IO压力就较大了,一般读取速度有较多的wait#如果你想对硬盘做一个IO负荷的压力测试可以用如下命令
time dd if=/dev/zero bs=1M count=2048 of=direct_2G
#此命令为在当前目录下新建一个2G的文件欢迎追问
硬盘评测一般有两个指标,一个是读写,一个就是iops。
严格的说iops和读写没有直接的关系,例如普通satassd最大io22w最大读取500m而nvme最大io50w最大io35g(大约,不做真实数据,只供说明意思)。
读写速度一般都局限于接口带宽,sata一直慢速550mpci-e的也愈来愈逼近。
iops和所用协议,(nvme协议比sata更适合ssd指令周期也短所以延迟io天生优势),所经过设备的处理能力以及数量(过南桥的硬盘延迟高一点,直通cpu的当然快,家用忽略)(数据库文件存到nas的延迟io就比san整列的差劲)有关。
从问题的描述来看,Fedora 20系统kvm虚拟机 和Debian内用virtualbox速度很快,那么BIOS设置,RAID设置,服务器硬件应该没有问题,问题出在Debian GNU/Linux 730系统+KVM虚拟机的配置上。
Linux问题通过google可以搜索到很多的解决方案,看一下下面链接是否有参考价值?
http://serverfaultcom/questions/394574/kvm-slow-guest-i-o
I solved this by manually partitioning LVM with parted prior to installation and now all guests are enjoying full performance
0条评论