1 .. include:: ../disclaimer-zh_CN.rst 2 3 :Original: Documentation/accounting/taskstats. 4 5 :Translator: Yang Yang <yang.yang29@zte.com.cn> 6 7 ================ 8 每任务的统计接口 9 ================ 10 11 Taskstats是一个基于netlink的接口,用 12 统计信息。 13 14 Taskstats设计目的: 15 16 - 在任务生命周期内和退出时高效 17 - 统一不同计数子系统的接口 18 - 支持未来计数系统的扩展 19 20 术语 21 ---- 22 23 “pid”、“tid”、“任务”互换使 24 Linux任务。“每pid的统计数据”等 25 26 “tgid”、“进程”、“线程组”互 27 也就是传统的Unix进程。尽管使用了 28 对它的处理也没有什么不同。只要 29 活着。 30 31 用法 32 ---- 33 34 为了在任务生命周期内获得统计信 35 (NETLINK_GENERIC族)然后发送指定pid 36 任务的统计信息(若指定了pid)或 37 38 为了在任务退出时获取统计信息, 39 cpu掩码内的cpu上有任务退出时,每p 40 cpu掩码可以限制一个监听者收到的 41 将进行更详细的解释。 42 43 如果正在退出的任务是线程组中最 44 记录也将发送给用户空间。后者包 45 信息总和。 46 47 getdelays.c是一个简单的示例,用以 48 用户可注册cpu掩码、发送命令和处 49 写入文件、通过增大接收缓冲区进 50 51 接口 52 ---- 53 54 内核用户接口封装在include/linux/tasks 55 56 为避免本文档随着接口的演进而过 57 不一致时,以taskstats.h为准。 58 59 struct taskstats是每pid和每tgid数据共 60 计数子系统时进行扩展。taskstats.h 61 62 用户、内核空间的数据交换是属于N 63 接口。消息格式如下:: 64 65 +----------+- - -+-------------+---------- 66 | nlmsghdr | Pad | genlmsghdr | taskstats 67 +----------+- - -+-------------+---------- 68 69 Taskstats载荷有三种类型: 70 71 1. 命令:由用户发送给内核。获取 72 TASKSTATS_CMD_ATTR_PID/TGID的属性,该属 73 pid/tgid指示用户空间要统计的任务/ 74 75 注册/注销获取指定cpu集上退出数据 76 TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK 77 cpu掩码是以ascii码表示,用逗号分 78 退出数据,cpu掩码表示为"1-3,5,7-8" 79 的cpu集,随着时间的推移,内核会 80 执行注销。 81 82 2. 命令的应答:内核发出应答用户 83 84 a) TASKSTATS_TYPE_AGGR_PID/TGID: 本属性 85 的pig/tgid。 86 87 b) TASKSTATS_TYPE_PID/TGID:本属性的载 88 89 c) TASKSTATS_TYPE_STATS:本属性的载荷 90 每tgid统计信息共用该结构体。 91 92 3. 内核会在任务退出时发送新消息 93 94 a) TASKSTATS_TYPE_AGGR_PID:指示其后两 95 b) TASKSTATS_TYPE_PID:包含退出任务的p 96 c) TASKSTATS_TYPE_STATS:包含退出任务 97 d) TASKSTATS_TYPE_AGGR_TGID:指示其后两 98 e) TASKSTATS_TYPE_TGID:包含任务所属进 99 f) TASKSTATS_TYPE_STATS:包含退出任务 100 101 每tgid的统计 102 ------------ 103 104 除了每任务的统计信息,taskstats还 105 粒度完成,并且仅在用户空间聚合 106 107 然而,除了每任务统计信息,在内 108 为解决此问题,taskstats代码将退出 109 当进程最后一个任务退出时,累积 110 111 当用户查询每tgid数据时,内核将指 112 该线程组的累积总数(含之前退出 113 114 扩展taskstats 115 ------------- 116 117 有两种方法可在未来修改内核扩展t 118 119 1. 在现有struct taskstats末尾增加字段 120 用户空间将仅使用与其版本对应的 121 122 2. 定义单独的统计结构体并使用netl 123 处理每个netlink属性,所以总是可以 124 125 在1.和2.之间进行选择,属于权衡灵 126 首选方法,因为内核和用户空间无 127 扩展现有结构体,导致不同的用户 128 字段并不感兴趣,那么2.是值得的 129 130 Taskstats的流量控制 131 ------------------- 132 133 当退出任务数速率变大,监听者可 134 数据丢失。taskstats结构体变大、cpu 135 136 为避免统计信息丢失,用户空间应 137 138 - 增大监听者用于接收退出数据的ne 139 140 - 创建更多的监听者,减少每个监 141 一个监听者。用户还可考虑将监 142 仅监听一个cpu。 143 144 尽管采取了这些措施,若用户空间 145 则应采取其他措施处理数据丢失。
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.