Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1882610
  • 博文数量: 1000
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7921
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-20 09:23
个人简介

storage R&D guy.

文章分类

全部博文(1000)

文章存档

2019年(5)

2017年(47)

2016年(38)

2015年(539)

2014年(193)

2013年(178)

分类: 服务器与存储

2015-09-22 16:30:49

针对linux IO性能的调优可以从以下几个方面考虑:

1.块设备的预读粒度,根据读、写操作的粒度来确定此数值的大小

2.块设备的调度算法,主要有cfq、deadline、Anticipatory、noop四种;

其中:

noop不对请求做出特定的排序,只做IO请求的聚合,适合ssd、ramdisk等不需要磁头寻址的设备

cfq(complete fair queueing),根据磁盘扇区号排序,减少磁盘寻道时间,实现了IO聚合,它的特点是对所有请求进程保证完全的公平,也就是在一个特定的时间内,保证每个进程的请求数量一样多

deadline根据硬盘扇区号进行读写的排序,并为请求设置最后期限,防止这些请求在一段时间内得不到调度

anticipatory识别请求的进程号,能够利用请求的局部性特点,适合顺序读写场景

总结:noop应用在ssd设备上;cfq、deadline应用在零散io请求,比如数据库;anticipatory应用在顺序io读写的场景

3.利用posix_fadvise对应用程序的读写进行优化,主要用到willneed方式将文件内容读到page cache,dontneed将文件的page cache清空,sequntial将文件的预取窗口放大2倍

4.使用taskset将进程与cpu核绑定

5.利用iostat、sar,来分析从硬盘上读取的数据与网卡发送的数据流量是否一致

6.对小写、小读比如mysql数据库应用,使用ssd来存储

7.尽量加大物理内存,并且禁用swap分区

8.应用程序尽量避免线程泛滥,尽量采用线程池化或者单线程多任务

9.保证应用正确的前提下,减小锁的粒度

10.采用TOE、RDMA网卡

11.使用零拷贝sendfile发送socket文件

12.使用异步、非阻塞方式发送文件

13.使用AIO

14.对RAID的chunk进行调优、文件系统的block参数进行调优,针对读取粒度选择合适的chunk和block参数

15.均中断

阅读(786) | 评论(0) | 转发(0) |
0

上一篇:类型的光纤接口

下一篇:rpmbuild制作rpm包

给主人留下些什么吧!~~