Linux内核中负责回写脏页的线程

Linux内存管理-数据回写 这样文件系统内部的inode需要进行回写数据时,直接将该inode设置成dirty,然后通过root_inode获取writeback,并且将需要处理的inode挂载到任务链表中,最后唤醒writeback线程进行数据回写操作。设置page页dirty标志的核心函数是__set_page_dirty(调用关系为:ext3_ordered_write_endàblock_write_endà__block_commit_writeàmark_buffer_dirtyà__set_page_dirty)。 阅读详情

内核版本 3.0和3.4.35

Linux内核里负责回写脏页的线程称为flusher线程,它们以“flush-”+“设备名”来命名,例如”[flush-8:64]”(这里设备名是指用设备号拼接的字符串)。

在BDI(即backing device info)模块初始化(default_bdi_init())时会创建”[sync_supers]”和”[bdi_default]”两个线程。其中,“[sync_supers]”线程用来周期性(间隔同flusher线程)地同步系统中所有的superblocks(遍历全局super_blocks链表)。“[bdi_default]”线程则用来在必要时创建、启动和停止flusher线程。

系统中每新增一个bdi设备(例如硬盘)就会通过bdi_register()注册到全局的bdi_list链表中,每个bdi设备都会有自己的flusher线程,在某个设备需要回写脏页时,bdi_default线程就会为其创建”[flush-devname]”线程(bdi_forker_thread())并运行,如”[flush-8:64]”。flusher线程的处理函数为bdi_writeback_thread(),负责周期性地回写脏页,实际回写操作由wb_do_writeback()函数完成(其第二个参数为1会等IO完成才返回,为0则立即返回)。

flusher线程的回写的周期间隔为 dirty_writeback_interval,默认为5秒,可通过/proc/sys/vm/dirty_writeback_centisecs修改(kernel/sysctl.c),当然,如果其所属的bdi设备没脏页或者dirty_writeback_interval被置为0,线程就闲着了。

实际上我们主动调用sync()去刷脏页的时候,就是通过wakeup_flusher_threa

Linux回收内存的时候遇到PageWriteback和PageDirty脏页怎么处理? 我们知道内存回收会遇到各种情况的page,比如正在回写的page(PageWriteback)和脏页(PageDirty)的page,内核会等待PageWriteback完成回写呢,还是说直接跳过正在回写的页面。这两种选择各有优劣,如果等待Writeback完成会影响内存分配性能;如果直接跳过呢可能影响内存回收的效率。PageDirty的page也面临类似的问题,所以我们来看下内核v4-14源码中是如何处理这两种情况的。 阅读详情

相关推荐

【随笔】Linux刷脏页

一、脏页的由来 前情摘要: 1. 在多级存储系统中,上一级高速设备会成为下一级低速设备的缓存。相较之内存,磁盘是一个低速设备,因此Linux中会通过一种叫“磁盘高速缓存”的软件机制来允许将磁盘上的一些数据保留在内存中,以加快访问速度。页高速缓存page cache就是Linux内核所使用的主要磁盘高速缓存。几乎所有的文件读写都依赖磁盘高速缓存,除非你设置了O_DIRECT标志; 2. Linux中文件系统主要分成三类:磁盘文件系统(例如ext系列)、基于内存的特殊文件系统(例如devtmpfs、bde

厚积薄发者,轻舟万重山 2548

linux内核文件一致性之被动一致性

前言        前一篇博客中我们仔细描述了Linux文件系统的主动一致性,即文件系统对外提供的用于实现文件一致性的接口,应用程序可以调用这些接口同步文件/系统的脏数据和元数据。但诚如前一篇博客中所说,一个成熟的系统不仅应该只有这些由用户控制的同步方式,系统需要提供一些方式来保证文件数据/元数据的一致性。本篇博客我们就详细描述Linux内核中这种被动一致性的实现框架以及部分细节。 思考

kai_ding的专栏 2093

高通平台camera构架sensor驱动详解

优先阅读。

a5566255的专栏 3251

RPMsg:协议简介

两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢?

SunnyZhou-1024的博客 1万+

IC芯片验证 - 手把手教你搭建UVM验证环境

这是一个UVM的demo项目

howard789的博客 3万+

真双口RAM---Quartus与Vivado开发环境区别对比

2、写和写冲突:表示两个端口写使能同时有效且写地址相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面,任何的DP RAM 都不支持写和写冲突。以上述直方图统计使用为例,博主在仿真过程中发现,vivado真双口RAM--B端口读写延迟2个clk;1、读和写冲突:如果读和写同时有效,且读和写是同一个地址时,发生RAM读写冲突,此时会把最新的写数据直接赋给读数据,称为写穿通到读。

weixin_54470733的博客 3582

基于Simulink的单级式光伏并网系统MPPT控制仿真

本文基于Simulink平台,详细介绍了单级式光伏并网系统的MPPT控制仿真实现。主要内容包括:1)阐述MPPT作为光伏系统"智能大脑"的核心作用;2)解析单级式系统架构及扰动观察法(P&O)算法原理;3)以10kW户用系统为例,分步骤演示建模过程,包括光伏阵列搭建、P&O控制器实现(含MATLAB代码)、并网控制设计等;4)通过仿真验证系统在光照突变下的动态响应性能,MPPT效率达98.3%。文章还提出了变步长P&O等优化方向,为光伏系统仿真与控制提供实用指导。

xiaoheshang_123的博客 111

手把手教你RK3588 NPU驱动与RKNN Toolkit,AI开发不迷路!

本文详细介绍了RK3588 NPU驱动安装与RKNNToolkit使用方法。首先阐述了RK3588芯片在嵌入式AI领域的优势,包括6TOPS算力和混合量化支持。随后分步骤讲解了NPU驱动安装流程,包括准备工作、编译安装、验证调试及常见问题解决。接着全面介绍了RKNNToolkit的环境搭建、基本使用流程和图像分类实战案例,涵盖模型转换、推理优化等关键环节。最后展望了RK3588在智能安防、工业自动化等领域的应用前景,为开发者提供了完整的嵌入式AI开发指南。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

环境仿真软件:EcoPath with Ecosim_(4).Ecosim模型动态模拟

Ecosim 是 EcoPath with Ecosim (EwE) 软件中的动态模拟模块,用于模拟生态系统中各个组分的动态变化过程。Ecosim 模型通过时间序列数据和动态参数,可以预测生态系统在不同管理措施下的响应。时间序列数据的输入:用户可以输入历史数据,如捕捞努力、生物量、环境因子等,用于校准模型。动态参数的设置:用户可以设置被捕食率、生长率、捕捞死亡率等动态参数,以反映生态系统的变化。模拟结果的分析。

kkchenjj的博客 893

观测器选择与工程实践建议

摘要:永磁同步电机(PMSM)无传感器控制中,观测器选型需综合考虑应用场景、性能需求与成本。消费级(家电、工具)推荐滑模观测器(SMO),成本低、鲁棒性强;工业级(伺服、泵阀)适用扩展卡尔曼滤波器(EKF),精度高但计算复杂;车规级(EPS、主驱动)需混合观测器(SMO+EKF),兼顾全速域性能与可靠性。低速时需高频注入法,IPMSM更适用。SMO易实现但存在抖振,EKF调试复杂。未来趋势是混合架构与AI增强,提升适应性与性能。选型需权衡速度范围、电机类型、处理器能力及成本。

汽车软件开发 145

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Linux中的jiffies介绍
下一篇: 一些小概念
去级得骨灰
博客等级 码龄18年 26粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值