qsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/accounting/taskstatsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/accounting/taskstatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/accounting/taskstatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/accounting/taskstatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/accounting/taskstatsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/accounting/taskstatsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhU/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/accounting/taskstats.rsthKubh field_body)}(h'Documentation/accounting/taskstats.rst h]h)}(h&Documentation/accounting/taskstats.rsth]h&Documentation/accounting/taskstats.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Translatorh]h Translator}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h#Yang Yang h]h)}(h"Yang Yang h](h Yang Yang <}(hjhhhNhNubh reference)}(hyang.yang29@zte.com.cnh]hyang.yang29@zte.com.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:yang.yang29@zte.com.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h每任务的统计接口h]h每任务的统计接口}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjFhhhhhK ubh)}(hwTaskstats是一个基于netlink的接口,用于从内核向用户空间发送每任务及每进程的 统计信息。h]hwTaskstats是一个基于netlink的接口,用于从内核向用户空间发送每任务及每进程的 统计信息。}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjFhhubh)}(hTaskstats设计目的:h]hTaskstats设计目的:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubh bullet_list)}(hhh](h list_item)}(h?在任务生命周期内和退出时高效的提供统计信息h]h)}(hj~h]h?在任务生命周期内和退出时高效的提供统计信息}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj|ubah}(h]h ]h"]h$]h&]uh1jzhjwhhhhhNubj{)}(h$统一不同计数子系统的接口h]h)}(hjh]h$统一不同计数子系统的接口}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jzhjwhhhhhNubj{)}(h"支持未来计数系统的扩展 h]h)}(h!支持未来计数系统的扩展h]h!支持未来计数系统的扩展}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jzhjwhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1juhhhKhjFhhubjE)}(hhh](jJ)}(h术语h]h术语}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjhhhhhKubh)}(h“pid”、“tid”、“任务”互换使用,用于描述由struct task_struct定义的标准 Linux任务。“每pid的统计数据”等价于“每任务的统计数据”。h]h“pid”、“tid”、“任务”互换使用,用于描述由struct task_struct定义的标准 Linux任务。“每pid的统计数据”等价于“每任务的统计数据”。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX>“tgid”、“进程”、“线程组”互换使用,用于描述共享mm_struct的任务集, 也就是传统的Unix进程。尽管使用了tgid这个词,即使一个任务是线程组组长, 对它的处理也没有什么不同。只要一个进程还有任何归属它的任务,它就被认为 活着。h]hX>“tgid”、“进程”、“线程组”互换使用,用于描述共享mm_struct的任务集, 也就是传统的Unix进程。尽管使用了tgid这个词,即使一个任务是线程组组长, 对它的处理也没有什么不同。只要一个进程还有任何归属它的任务,它就被认为 活着。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id2ah ]h"]术语ah$]h&]uh1jDhjFhhhhhKubjE)}(hhh](jJ)}(h用法h]h用法}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjhhhhhK ubh)}(hX1为了在任务生命周期内获得统计信息,用户空间需打开一个单播的netlink套接字 (NETLINK_GENERIC族)然后发送指定pid或tgid的命令。响应消息中包含单个 任务的统计信息(若指定了pid)或进程所有任务汇总的统计信息(若指定了tgid)。h]hX1为了在任务生命周期内获得统计信息,用户空间需打开一个单播的netlink套接字 (NETLINK_GENERIC族)然后发送指定pid或tgid的命令。响应消息中包含单个 任务的统计信息(若指定了pid)或进程所有任务汇总的统计信息(若指定了tgid)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubh)}(hXl为了在任务退出时获取统计信息,用户空间的监听者发送一个指定cpu掩码的注册命令。 cpu掩码内的cpu上有任务退出时,每pid的统计信息将发送给注册成功的监听者。使用 cpu掩码可以限制一个监听者收到的数据,并有助于对netlink接口进行流量控制,后文 将进行更详细的解释。h]hXl为了在任务退出时获取统计信息,用户空间的监听者发送一个指定cpu掩码的注册命令。 cpu掩码内的cpu上有任务退出时,每pid的统计信息将发送给注册成功的监听者。使用 cpu掩码可以限制一个监听者收到的数据,并有助于对netlink接口进行流量控制,后文 将进行更详细的解释。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(h如果正在退出的任务是线程组中最后一个退出的线程,额外一条包含每tgid统计信息的 记录也将发送给用户空间。后者包含线程组中所有线程(包括过去和现在)的每pid统计 信息总和。h]h如果正在退出的任务是线程组中最后一个退出的线程,额外一条包含每tgid统计信息的 记录也将发送给用户空间。后者包含线程组中所有线程(包括过去和现在)的每pid统计 信息总和。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh)}(hXgetdelays.c是一个简单的示例,用以演示如何使用taskstats接口获取延迟统计信息。 用户可注册cpu掩码、发送命令和处理响应、监听每tid/tgid退出数据、将收到的数据 写入文件、通过增大接收缓冲区进行基本的流量控制。h]hXgetdelays.c是一个简单的示例,用以演示如何使用taskstats接口获取延迟统计信息。 用户可注册cpu掩码、发送命令和处理响应、监听每tid/tgid退出数据、将收到的数据 写入文件、通过增大接收缓冲区进行基本的流量控制。}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjhhubeh}(h]id3ah ]h"]用法ah$]h&]uh1jDhjFhhhhhK ubjE)}(hhh](jJ)}(h接口h]h接口}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjPhhhhhK4ubh)}(h7内核用户接口封装在include/linux/taskstats.h。h]h7内核用户接口封装在include/linux/taskstats.h。}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjPhhubh)}(h为避免本文档随着接口的演进而过期,本文仅给出当前版本的概要。当本文与taskstats.h 不一致时,以taskstats.h为准。h]h为避免本文档随着接口的演进而过期,本文仅给出当前版本的概要。当本文与taskstats.h 不一致时,以taskstats.h为准。}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjPhhubh)}(hstruct taskstats是每pid和每tgid数据共用的计数结构体。它是版本化的,可在内核新增 计数子系统时进行扩展。taskstats.h中定义了各字段及语义。h]hstruct taskstats是每pid和每tgid数据共用的计数结构体。它是版本化的,可在内核新增 计数子系统时进行扩展。taskstats.h中定义了各字段及语义。}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjPhhubh)}(h用户、内核空间的数据交换是属于NETLINK_GENERIC族的netlink消息,使用netlink属性 接口。消息格式如下::h]h用户、内核空间的数据交换是属于NETLINK_GENERIC族的netlink消息,使用netlink属性 接口。消息格式如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjPhhubh literal_block)}(h+----------+- - -+-------------+-------------------+ | nlmsghdr | Pad | genlmsghdr | taskstats payload | +----------+- - -+-------------+-------------------+h]h+----------+- - -+-------------+-------------------+ | nlmsghdr | Pad | genlmsghdr | taskstats payload | +----------+- - -+-------------+-------------------+}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKAhjPhhubh)}(h!Taskstats载荷有三种类型:h]h!Taskstats载荷有三种类型:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjPhhubh)}(h1. 命令:由用户发送给内核。获取指定pid/tgid数据的命令包含一个类型为 TASKSTATS_CMD_ATTR_PID/TGID的属性,该属性包含u32的pid或tgid载荷。 pid/tgid指示用户空间要统计的任务/进程。h]h1. 命令:由用户发送给内核。获取指定pid/tgid数据的命令包含一个类型为 TASKSTATS_CMD_ATTR_PID/TGID的属性,该属性包含u32的pid或tgid载荷。 pid/tgid指示用户空间要统计的任务/进程。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjPhhubh)}(hX注册/注销获取指定cpu集上退出数据的命令包含一个类型为 TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK的属性,该属性包含cpu掩码载荷。 cpu掩码是以ascii码表示,用逗号分隔的cpu范围。例如若需监听1,2,3,5,7,8号cpu的 退出数据,cpu掩码表示为"1-3,5,7-8"。若用户空间在关闭监听套接字前忘了注销监听 的cpu集,随着时间的推移,内核会清理此监听集。但是,出于提效的目的,建议明确 执行注销。h]hX注册/注销获取指定cpu集上退出数据的命令包含一个类型为 TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK的属性,该属性包含cpu掩码载荷。 cpu掩码是以ascii码表示,用逗号分隔的cpu范围。例如若需监听1,2,3,5,7,8号cpu的 退出数据,cpu掩码表示为”1-3,5,7-8”。若用户空间在关闭监听套接字前忘了注销监听 的cpu集,随着时间的推移,内核会清理此监听集。但是,出于提效的目的,建议明确 执行注销。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjPhhubhenumerated_list)}(hhh]j{)}(hU命令的应答:内核发出应答用户空间的命令。载荷有三类属性: h]h)}(hT命令的应答:内核发出应答用户空间的命令。载荷有三类属性:h]hT命令的应答:内核发出应答用户空间的命令。载荷有三类属性:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jzhjhhhhhNubah}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.startKuh1jhjPhhhhhKRubh)}(hqa) TASKSTATS_TYPE_AGGR_PID/TGID: 本属性不包含载荷,用以指示其后为被统计对象 的pig/tgid。h]hqa) TASKSTATS_TYPE_AGGR_PID/TGID: 本属性不包含载荷,用以指示其后为被统计对象 的pig/tgid。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjPhhubj)}(hhh]j{)}(hYTASKSTATS_TYPE_PID/TGID:本属性的载荷为pig/tgid,其统计信息将被返回。 h]h)}(hXTASKSTATS_TYPE_PID/TGID:本属性的载荷为pig/tgid,其统计信息将被返回。h]hXTASKSTATS_TYPE_PID/TGID:本属性的载荷为pig/tgid,其统计信息将被返回。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1jzhj hhhhhNubah}(h]h ]h"]h$]h&]j loweralphajhj)jKuh1jhjPhhhhhKWubh)}(hc) TASKSTATS_TYPE_STATS:本属性的载荷为一个struct taskstats实例。每pid和 每tgid统计信息共用该结构体。h]hc) TASKSTATS_TYPE_STATS:本属性的载荷为一个struct taskstats实例。每pid和 每tgid统计信息共用该结构体。}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjPhhubj)}(hhh]j{)}(h^内核会在任务退出时发送新消息。其载荷包含一系列以下类型的属性: h]h)}(h]内核会在任务退出时发送新消息。其载荷包含一系列以下类型的属性:h]h]内核会在任务退出时发送新消息。其载荷包含一系列以下类型的属性:}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hj@ubah}(h]h ]h"]h$]h&]uh1jzhj=hhhhhNubah}(h]h ]h"]h$]h&]jjjhjjjKuh1jhjPhhhhhK\ubj)}(hhh](j{)}(hATASKSTATS_TYPE_AGGR_PID:指示其后两个属性为pid+stats。h]h)}(hjch]hATASKSTATS_TYPE_AGGR_PID:指示其后两个属性为pid+stats。}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjaubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubj{)}(h0TASKSTATS_TYPE_PID:包含退出任务的pid。h]h)}(hjzh]h0TASKSTATS_TYPE_PID:包含退出任务的pid。}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjxubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubj{)}(h>TASKSTATS_TYPE_STATS:包含退出任务的每pid统计信息h]h)}(hjh]h>TASKSTATS_TYPE_STATS:包含退出任务的每pid统计信息}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubj{)}(hCTASKSTATS_TYPE_AGGR_TGID:指示其后两个属性为tgid+stats。h]h)}(hjh]hCTASKSTATS_TYPE_AGGR_TGID:指示其后两个属性为tgid+stats。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubj{)}(h5TASKSTATS_TYPE_TGID:包含任务所属进程的tgidh]h)}(hjh]h5TASKSTATS_TYPE_TGID:包含任务所属进程的tgid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubj{)}(hLTASKSTATS_TYPE_STATS:包含退出任务所属进程的每tgid统计信息 h]h)}(hKTASKSTATS_TYPE_STATS:包含退出任务所属进程的每tgid统计信息h]hKTASKSTATS_TYPE_STATS:包含退出任务所属进程的每tgid统计信息}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchjubah}(h]h ]h"]h$]h&]uh1jzhj^hhhhhNubeh}(h]h ]h"]h$]h&]jj-jhjj.uh1jhjPhhhhhK^ubeh}(h]id4ah ]h"]接口ah$]h&]uh1jDhjFhhhhhK4ubjE)}(hhh](jJ)}(h每tgid的统计h]h每tgid的统计}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjhhhhhKfubh)}(h除了每任务的统计信息,taskstats还提供每进程的统计信息,因为资源管理通常以进程 粒度完成,并且仅在用户空间聚合任务统计信息效率低下且可能不准确(缺乏原子性)。h]h除了每任务的统计信息,taskstats还提供每进程的统计信息,因为资源管理通常以进程 粒度完成,并且仅在用户空间聚合任务统计信息效率低下且可能不准确(缺乏原子性)。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjhhubh)}(hX^然而,除了每任务统计信息,在内核中维护每进程统计信息存在额外的时间和空间开销。 为解决此问题,taskstats代码将退出任务的统计信息累积到进程范围的数据结构中。 当进程最后一个任务退出时,累积的进程级数据也会发送到用户空间(与每任务数据一起)。h]hX^然而,除了每任务统计信息,在内核中维护每进程统计信息存在额外的时间和空间开销。 为解决此问题,taskstats代码将退出任务的统计信息累积到进程范围的数据结构中。 当进程最后一个任务退出时,累积的进程级数据也会发送到用户空间(与每任务数据一起)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjhhubh)}(h当用户查询每tgid数据时,内核将指定线程组中所有活动线程的统计信息相加,并添加到 该线程组的累积总数(含之前退出的线程)。h]h当用户查询每tgid数据时,内核将指定线程组中所有活动线程的统计信息相加,并添加到 该线程组的累积总数(含之前退出的线程)。}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjhhubeh}(h]tgidah ]h"]每tgid的统计ah$]h&]uh1jDhjFhhhhhKfubjE)}(hhh](jJ)}(h扩展taskstatsh]h扩展taskstats}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jIhj=hhhhhKsubh)}(hp有两种方法可在未来修改内核扩展taskstats接口,以导出更多的每任务/进程统计信息:h]hp有两种方法可在未来修改内核扩展taskstats接口,以导出更多的每任务/进程统计信息:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj=hhubh)}(h1. 在现有struct taskstats末尾增加字段。该结构体中的版本号确保了向后兼容性。 用户空间将仅使用与其版本对应的结构体字段。h]h1. 在现有struct taskstats末尾增加字段。该结构体中的版本号确保了向后兼容性。 用户空间将仅使用与其版本对应的结构体字段。}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhj=hhubh)}(h2. 定义单独的统计结构体并使用netlink属性接口返回对应的数据。由于用户空间独立 处理每个netlink属性,所以总是可以忽略其不理解类型的属性(因为使用了旧版本接口)。h]h2. 定义单独的统计结构体并使用netlink属性接口返回对应的数据。由于用户空间独立 处理每个netlink属性,所以总是可以忽略其不理解类型的属性(因为使用了旧版本接口)。}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhj=hhubh)}(hX在1.和2.之间进行选择,属于权衡灵活性和开销的问题。若仅需增加少数字段,那么1.是 首选方法,因为内核和用户空间无需承担处理新netlink属性的开销。但若新字段过多的 扩展现有结构体,导致不同的用户空间计数程序不必要的接收大型结构体,而对结构体 字段并不感兴趣,那么2.是值得的。h]hX在1.和2.之间进行选择,属于权衡灵活性和开销的问题。若仅需增加少数字段,那么1.是 首选方法,因为内核和用户空间无需承担处理新netlink属性的开销。但若新字段过多的 扩展现有结构体,导致不同的用户空间计数程序不必要的接收大型结构体,而对结构体 字段并不感兴趣,那么2.是值得的。}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hj=hhubeh}(h] taskstatsah ]h"]扩展taskstatsah$]h&]uh1jDhjFhhhhhKsubjE)}(hhh](jJ)}(hTaskstats的流量控制h]hTaskstats的流量控制}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jIhjhhhhhKubh)}(h当退出任务数速率变大,监听者可能跟不上内核发送每tid/tgid退出数据的速率,而导致 数据丢失。taskstats结构体变大、cpu数量上升,都会导致这种可能性增加。h]h当退出任务数速率变大,监听者可能跟不上内核发送每tid/tgid退出数据的速率,而导致 数据丢失。taskstats结构体变大、cpu数量上升,都会导致这种可能性增加。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hQ为避免统计信息丢失,用户空间应执行以下操作中至少一项:h]hQ为避免统计信息丢失,用户空间应执行以下操作中至少一项:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjv)}(hhh](j{)}(hM增大监听者用于接收退出数据的netlink套接字接收缓存区。 h]h)}(hL增大监听者用于接收退出数据的netlink套接字接收缓存区。h]hL增大监听者用于接收退出数据的netlink套接字接收缓存区。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jzhjhhhhhNubj{)}(h创建更多的监听者,减少每个监听者监听的cpu数量。极端情况下可为每个cpu创建 一个监听者。用户还可考虑将监听者的cpu亲和性设置为监听cpu的子集,特别是当他们 仅监听一个cpu。 h]h)}(h创建更多的监听者,减少每个监听者监听的cpu数量。极端情况下可为每个cpu创建 一个监听者。用户还可考虑将监听者的cpu亲和性设置为监听cpu的子集,特别是当他们 仅监听一个cpu。h]h创建更多的监听者,减少每个监听者监听的cpu数量。极端情况下可为每个cpu创建 一个监听者。用户还可考虑将监听者的cpu亲和性设置为监听cpu的子集,特别是当他们 仅监听一个cpu。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jzhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1juhhhKhjhhubh)}(h尽管采取了这些措施,若用户空间仍收到指示接收缓存区溢出的ENOBUFS错误消息, 则应采取其他措施处理数据丢失。h]h尽管采取了这些措施,若用户空间仍收到指示接收缓存区溢出的ENOBUFS错误消息, 则应采取其他措施处理数据丢失。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id5ah ]h"]taskstats的流量控制ah$]h&]uh1jDhjFhhhhhKubeh}(h]id1ah ]h"]每任务的统计接口ah$]h&]uh1jDhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jIN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj5error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh، _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jj jjjMjJjjj:j7jjjju nametypes}(jjjMjj:jjuh}(j jFjjjJjjjPj7jjj=jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jCKsRparse_messages](hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineK uh1jhjPhhhhhKRubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "b" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “b” (ordinal 2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourceh،lineK uh1jhjPhhhhhKWubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "3" (ordinal 3)h]h>Enumerated list start value not ordinal-1: “3” (ordinal 3)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourceh،lineK uh1jhjPhhhhhK\ubetransform_messages] transformerN include_log]9Documentation/translations/zh_CN/accounting/taskstats.rst(NNNNta decorationNhhub.