本文共 1648 字,大约阅读时间需要 5 分钟。
sync SYSCALL_DEFINE0(sync)free_more_memorydo_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/1109952writeback机制源码分析
https://blog.51cto.com/alanwu/1110046linux pagecache bdi writeback 机制
https://blog.csdn.net/qqqqqq999999/article/details/77481899mmap原理及流程(kernel 4.1版本) 博客不错
https://blog.csdn.net/omnispace/article/details/77600704普通文件的readpage方法(do_mpage_readpage)
https://blog.csdn.net/weixin_36145588/article/details/74990382do_mpage_readpage函数详细分析
http://blog.chinaunix.net/uid-28236237-id-4028521.htmllinux2.6.37内核接两个硬盘导致读写效率变低的问题
https://blog.csdn.net/ctthuangcheng/article/details/42204425Cgroup-memory子系统分析(1)
https://blog.csdn.net/tanzhe2017/article/details/81001507