大数据场景下linux优化

本文基于linux环境,通过io相关配置来分析如何提高io性能

前言

提高io不仅仅需要软件方面的调整,所有的请求最终还是要通过操作系统和硬件交互,因此操作系统级别的配置也很重要。

配置分析

磁盘吞吐量就要分析linux的io相关的机制。

修改io调度策略

/sys/block/sda/queue/scheduler
linux目前有4种io调度器, noop, deadline, cfq, anticipatory,针对不同的盘可以进行定制化配置。每种调度器的场景都不一样,需要自行压测。
通常对于数据库使用来说,deadline是比较优秀的策略。

修改io队列

/sys/block/sda/queue/nr_requests
默认值是128
数据在写入盘之前,所有的io请求都会缓存起来,io队列就是控制缓存io请求数据。如果io wait指标持续很大,可以尝试调小此配置,如果机器的cpu空闲,但是io打不上去,可以尝试调小此配置。
需要注意的是不同型号的盘的队列不同,在这个前提下,尽可能将linux的io队列设置匹配对应盘的队列大小.

预读取数据大小

/sys/block/sda/queue/read_ahead_kb
默认值是128 单位KB
通过预读取数据到缓存可以有效减少io次数,但是会增加内存使用以及单次读取数据速度下降,在顺序读写场景下可以优化此配置

禁用大页面

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

关于swap内存

echo 0 > /proc/sys/vm/swappiness
swap内存其实就是虚拟内存,也就是用磁盘充当临时内存来使用,会带来性能下降

参考

一个优化的wiki
linux-queue相关配置

ulysses wechat
订阅+