Linux IO调优的几点考虑

针对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.均中断


你可能感兴趣的:(Linux IO调优的几点考虑)