Skip to the content.

Backing Device

之所以不是 block dev ,是为了照顾 nfs 9p 之类的 backend

backing-dev.c 主要提供的 bdi 就是为了 page-writeback 使用。 backing-dev.c 主要使用了 sysfs 和 debugfs

如果理解这个参数就差不多了吧。

bdi

struct backing_dev_info

每一个 device 初始化两个 workqueue

如果想要进一步分析,看看 page-writeback 机制吧

基本结构

bdi_collect_stats 有多个 list_for_each_entry_rcu(wb, &bdi->wb_list, bdi_node)

和 cgroup 的关系

cgroup 需要使用 CONFIG_CGROUP_WRITEBACK 来控制

如果系统内存很小,快速的 dirty page,如何防止的?

猜测是,dirty page 就需要分配 page ,然后这个时候需要将老的 dirty page 写回去。

但是现在没有什么直观的测试方法!

nfs 挂载,为什么会有四个调用

^C
  bdi_alloc
  super_setup_bdi_name
  nfs_get_tree_common
  vfs_get_tree
  nfs_do_submount
  nfs4_submount
  nfs_d_automount
  __traverse_mounts
  step_into
  path_lookupat
  filename_lookup
  vfs_path_lookup
  mount_subtree
  do_nfs4_mount
  nfs4_try_get_tree
  vfs_get_tree
  do_new_mount
  __se_sys_mount
  do_syscall_64
  entry_SYSCALL_64_after_hwframe
  [unknown]
    1

  bdi_alloc
  super_setup_bdi_name
  nfs_get_tree_common
  vfs_get_tree
  fc_mount
  do_nfs4_mount
  nfs4_try_get_tree
  vfs_get_tree
  do_new_mount
  __se_sys_mount
  do_syscall_64
  entry_SYSCALL_64_after_hwframe
  [unknown]
    1

  bdi_alloc
  super_setup_bdi_name
  nfs_get_tree_common
  vfs_get_tree
  nfs_do_submount
  nfs4_submount
  nfs_d_automount
  __traverse_mounts
  step_into
  link_path_walk
  path_lookupat
  filename_lookup
  vfs_path_lookup
  mount_subtree
  do_nfs4_mount
  nfs4_try_get_tree
  vfs_get_tree
  do_new_mount
  __se_sys_mount
  do_syscall_64
  entry_SYSCALL_64_after_hwframe
  [unknown]
    2

nfs_get_tree_common : 如何理解 nfs 的 s_dev

		error = super_setup_bdi_name(s, "%u:%u", MAJOR(server->s_dev),
					     MINOR(server->s_dev));

CONFIG_CGROUP_WRITEBACK 的确是占据一半内容

如果一个 cgroup 中同时用了多个 bdi ,如何控制?

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。