关于vm.dirty_background_ratio与vm.dirty_ratio触发条件的技术问询
Linux脏页监控与内核行为答疑
问题1:当node_memory_Dirty_bytes / node_memory_MemAvailable_bytes * 100超过vm.dirty_background_ratio时,后台刷写线程是否启动?
不会直接触发。内核判断是否启动后台刷写线程的基准是系统总内存,而非MemAvailable。vm.dirty_background_ratio的定义是脏页占总内存的百分比阈值,只有当node_memory_Dirty_bytes / node_memory_MemTotal_bytes * 100超过该值时,内核才会启动后台pdflush/kswapd线程刷写脏页到磁盘。
问题2:当该值超过vm.dirty_ratio时,所有写入操作是否会被阻塞?
同样不会直接触发。vm.dirty_ratio的判断基准也是系统总内存,只有当脏页占总内存的比例超过这个阈值时,内核才会阻塞所有新的写入操作,直到脏页被刷写到磁盘、比例降到阈值以下为止。
问题3:是否应将公式改为node_memory_Dirty_bytes / (node_memory_MemFree_bytes + node_memory_KReclaimable_bytes + node_memory_SReclaimable_bytes ) * 100?
不需要。node_memory_MemAvailable_bytes本身就是内核计算出的实际可用内存,已经包含了空闲内存(MemFree)、可回收内核内存(KReclaimable)、可回收slab内存(SReclaimable)等部分,是内核认定可直接分配给应用的内存总量。直接使用MemAvailable作为分母更准确,无需手动拼接这些指标。
内容的提问来源于stack exchange,提问作者ffff
相关产品推荐
相关产品推荐

