linux块设备3
来源:互联网 发布:淘宝全球交易线 编辑:程序博客网 时间:2024/04/28 16:04
linux 3.1.5
把调度policy用cgroup管理。
cgroup:
http://linux.chinaunix.net/techdoc/net/2008/12/23/1054425.shtml
从task到cgroup: task的cgroup(css_set), cgroup的cg_links(cg_links是cg_cgroup_link的链表头),cg_cgroup_link是cg_links的节点(使用cg_link_list), ,cg_cgroup_link也是cgroup的css_sets的节点(使用cgrp_link_list)。 这样cgroup和task就能互相查找。
blkio_group是blkio_cgroup的节点。
cgroup是cgroup_subsys_state的成员, cgroup_subsys_state是blkio_cgroup的成员。
blkio_policy_insert_node/cftype_blkg_same_policy/pn_matches_cftype/blkio_policy_delete_node/blkio_policy_search_node/: blkio_cgroup和blkio_policy_node操作。
cgroup中包含cgroup_subsys_state结构数组, 结合subsys_id可得到具体的cgroup_subsys_state组员, 对于blkio来讲, 这个id是 blkio_subsys_id(怎么得来的????)
blkio_cgroup也包含cgroup_subsys_state类型的css成员, 函数cgroup_to_blkio_cgroup, 就是由cgroup得到blkio_cgroup(保存blkio_cgroup的cgroup_subsys_state在cgroup的cgroup_subsys_state结构数组中)。
task_blkio_cgroup: 从task->cgroups->subsys[subsys_id](类型为cgroup_subsys_state)得到blkio_cgroup。blk-throttle.c和cfq-iosched.c调用它
list_for_each_entry(blkiop, &blkio_list, list): 从blkio_list中返回包含list成员的blkiop。
blkio_update_group_weight:更新属于blkio group policy组的group weight
blkio_update_group_bps: 更新bps(什么意思?), 分读或者写
blkio_update_group_iops:更新iops?, 分读写
blkio_add_stat: 更新stat, 分读写和sync/async, stat加add值
blkio_check_and_dec_stat: 递减stat(减1), 不等于0
blkio_set_start_group_wait_time: set group wait time, 对不是当前的group, 不是wait状态的设置wait时间,blkio_blkg_waiting()/blkio_mark_blkg_waiting()用csope没有找到, 可能是CONFIG_DEBUG_BLK_CGROUP没打开, sched_clock(): returns current time in nanosec units
blkio_update_group_wait_time: 更新wait time
blkio_end_empty_time:更新end empty time
blkiocg_update_set_idle_time_stats: 更新/set start idle time
blkiocg_update_idle_time_stats: 更新idle time
blkiocg_update_avg_queue_size_stats: 更新avg_queue_size_sum, avg_queue_size_samples, blkio_update_group_wait_time()
blkiocg_set_start_empty_time: set blkiocg_set_start_empty_time, 要求读写不为0, 且非空状态
blkiocg_update_dequeue_stats: 更新dequeue stat
blkiocg_update_io_add_stats:blkio_add_stat(add = 1)/blkio_end_empty_time/blkio_set_start_group_wait_time
blkiocg_update_timeslice_used: 统计使用的时间
blkiocg_update_dispatch_stats:更新服务的io数量和sectors, bytes(每cpi变量)
u64_stats_update_begin/u64_stats_update_end: rcu锁
blkiocg_update_completion_stats:更新服务时间和等待时间
blkiocg_update_io_merged_stats: 更新merged io数量(每cpu变量, 用rcu锁)
blkio_alloc_blkg_stats: 分配blkio_group_stats_cpu每cpu变量
blkiocg_add_blkio_group: 初始化blkio_group, 将blkio_cgroup的dentry保存到blkio_group的path
blkiocg_del_blkio_group: 通过blkio_group的id, 找到cgroup_subsys_state(css), 再使用container_of 得到 blkcg,使用blkcg获得spin lock, 然后调用 __blkiocg_del_blkio_group, 首先把blkg->blkcg_node从hash list中去除, 然后清除blkio_group的blkcg_id。
blkiocg_lookup_group: 根据key从blkio_cgroup中找到blkio_group
blkiocg_reset_stats: 复位 blkio_cgroup(调用blkio_reset_stats_cpu)
blkio_reset_stats_cpu: reset stats每cpu变量
blkio_fill_stat: 填充stat,
blkio_get_stat/blkio_get_stat_cpu/blkio_read_stat_cpu: 累加每cpu sectors的值并返回blkio_get_stat_cpu
blkio_check_dev_num: 由devget disk或者part, 如果disk为空或者part不为0, 返回-ENODEV, 否则为0.
blkio_policy_parse_and_set: parse and set blkio_policy_node
blkcg_get_weight: 返回policy权重
blkcg_get_read_bps: 返回policy read bps
blkcg_get_write_bps: 返回policy write bps
blkcg_get_read_iops/blkcg_get_write_iops: 返回read/write iops
blkio_delete_rule_command: whether user asked for deleting a policy rule
blkio_update_policy_rule: 用new policy的weight, iops, bps更新旧的policy
blkio_update_blkg_policy:更新group policy
blkio_update_policy_node_blkg: 更新cgroup policy
cft操作函数(文件操作用)
blkiocg_file_write: 生成new policy, 调用blkio_policy_search_node插在查找old policy, 如果old policy 不存在, 且new policy的blkio_delete_rule_command返回0, 插入new policy, 并用new policy更新cgroup。如果old policy 存在,且new policy的blkio_delete_rule_command返回1, 删除old policy, 用new p更新cgroup, 否则用new p更新old p, 然后再用new p更新cgroup, 如果new p新插入policy list, 那么不删除new p。
blkio_print_policy_node: 使用proc的seq file打印policy info
blkiocg_file_read: read blkcg->policy_list, 并调用blkio_print_policy_node打印policy info
blkio_read_blkg_stats: 统计blkcg中的跟cft policy(BLKIO_POLICY_PROP or BLKIO_POLICY_THROTL)一致的类型为type的总数,
blkiocg_file_read_map: 根据cft的属性和name type调用blkio_read_blkg_stats, 奇怪的是有时由于show_total为0, 实际上就是读了一遍, 看来没什么用。
blkio_weight_write: 更新blkg的weight
blkiocg_file_read_u64: 放回blkcg->weight
blkiocg_file_write_u64: 调用blkio_weight_write
blkio_files: cftype数组, 定义了name, private, 还有其他函数, 主要就是前面的这几个read/write函数
cgroup subsys函数
blkiocg_populate: 调用cgroup_add_files, 将blkio_files的cft加入到cgroup的dentry子目录的d_fsdata (调用lookup_one_len()查找name匹配), 并调用cgroup_create_file创建cgroup的inode,初始化其操作函数。
blkiocg_destroy: 销毁subsys的cgroup
blkiocg_create: 创建并初始化cgroup
blkiocg_can_attach_task: 判断是否允许blkiocg能否attach到task, 绑定在这个任务上的ioc包含的任务数超过1个就不行。
blkiocg_attach_task: ioc->cgroup_changed = 1
blkio_policy_register/blkio_policy_unregister: policy register/unregister
init_cgroup_blkio/exit_cgroup_blkio: load/unload blk cgroup system, 注册blkio_subsys结构(类型cgroup_subsys), 包含上述的create/destroy等等函数
- linux块设备3
- LINUX块设备驱动3
- LINUX块设备驱动<3>
- Linux 块设备驱动 (3)
- linux 块设备,字符设备
- Linux块设备驱动
- Linux块设备驱动
- linux块设备
- linux块设备2
- linux块设备4
- linux块设备5
- linux块设备6
- linux块设备7
- linux块设备8
- Linux 块设备分析
- Linux块设备驱动
- linux块设备驱动
- Linux块设备驱动
- 让程序只能加载一次
- 《算法导论》第6章 堆排序 (3)K路归并
- 如何利用“命令提示符” 进入WINDOWS中的各个目录的实例演示。
- 网页讲究1
- 第9周作业(一)
- linux块设备3
- CSS3 breadcrumbs
- 网易校园招聘笔试题目
- 详解:强引用 软引用 弱引用 虚引用
- C++网络编程(socket)TCP
- java中key值可以重复的map:IdentityHashMap
- 操作将HTML文件转成XML文件的类
- 出现问题:BOOTSTRP导致访问侵犯在IMSCUT.DL的解决办法
- 面向UDP的无连接的C++网络编程