sync SYSCALL_DEFINE0(sync)
free_more_memory
do_try_to_free_pages
=>void wakeup_flusher_threads(long nr_pages)
{
bdi_writeback_all(NULL, nr_pages);
=>void bdi_writeback_all(struct super_block *sb, long nr_pages)
{
list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) {
bdi_alloc_queue_work(bdi, &args);
=>void bdi_alloc_queue_work(struct backing_dev_info *bdi, struct wb_writeback_args *args)
{
bdi_queue_work(bdi, work);
=>void bdi_queue_work(struct backing_dev_info *bdi, struct bdi_work *work)
{
list_add_tail_rcu(&work->list, &bdi->work_list);
if (unlikely(list_empty_careful(&bdi->wb_list)))
wake_up_process(default_backing_dev_info.wb.task);
else {
struct bdi_writeback *wb = &bdi->wb;
if (wb->task)
wake_up_process(wb->task);
}
}
}
}
}
}
唤醒线程
int bdi_forker_task(void *ptr)
{
for (;;) {
if (wb_has_dirty_io(me) || !list_empty(&me->bdi->work_list))
wb_do_writeback(me, 0);
wb->task = kthread_run(bdi_start_fn, wb, "flush-%s", dev_name(bdi->dev));
}
}
Linux 3.2中回写机制的变革
https://blog.51cto.com/alanwu/1109952
writeback机制源码分析
https://blog.51cto.com/alanwu/1110046
linux pagecache bdi writeback 机制
https://blog.csdn.net/qqqqqq999999/article/details/77481899
mmap原理及流程(kernel 4.1版本) 博客不错
https://blog.csdn.net/omnispace/article/details/77600704
普通文件的readpage方法(do_mpage_readpage)
https://blog.csdn.net/weixin_36145588/article/details/74990382
do_mpage_readpage函数详细分析
http://blog.chinaunix.net/uid-28236237-id-4028521.html
linux2.6.37内核接两个硬盘导致读写效率变低的问题
https://blog.csdn.net/ctthuangcheng/article/details/42204425
Cgroup-memory子系统分析(1)
https://blog.csdn.net/tanzhe2017/article/details/81001507