SD卡读写太频繁导致cpu高的案例


dirty_background_ratio 是当系统里面的dirty page 超过这个百分比以后,系统开始启动flush 进程将dirty page flush 到磁盘。

dirty_ratio 是当系统里面的dirty page 超过这个百分比以后, 有写磁盘操作的进程会被阻塞, 等待将dirty page flush到磁盘以后再写入。

通过dd 修改不同的 dirty_ratio 来测试性能来看, dirty_ratio 如果设置的比较小,那么就很容易阻塞进程的写入所以性能比较低。如果把dirty_ratio 调整的比较大, 那么dd的速度就会快很多, 基本上能够达到磁盘写的性能。

在2.6.32 这个版本, 主要的刷盘进程是sync_supers 这个进程, 这个和之前版本的pdflush 进程不一样, 之前版本主要有pdflush 负责刷盘操作。另外一个默认启动的线程是 sync_super 线程, 这个线程是去定期将superblock 里面的内容刷新回去。到3.10.0 版本以后, 这个bdi-default 线程, flush 线程什么也都没有了, 都变成kworker, 然后把需要flush 的任务丢到这个kworker 队列里面就可以了。