162306a36Sopenharmony_ci.. include:: ../disclaimer-zh_CN.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci:Original: Documentation/virt/guest-halt-polling.rst
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci:翻译:
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci 司延腾 Yanteng Si <siyanteng@loongson.cn>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci:校译:
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci 时奎亮 Alex Shi <alexs@kernel.org>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci.. _cn_virt_guest-halt-polling:
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci========================================
1662306a36Sopenharmony_ci客户机停机轮询机制(Guest halt polling)
1762306a36Sopenharmony_ci========================================
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cicpuidle_haltpoll驱动,与haltpoll管理器一起,允许客户机vcpus在停机前轮询
2062306a36Sopenharmony_ci一定的时间。
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci这为物理机侧的轮询提供了以下好处:
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	1) 在执行轮询时,POLL标志被设置,这允许远程vCPU在执行唤醒时避免发送
2562306a36Sopenharmony_ci	   IPI(以及处理IPI的相关成本)。
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	2) 可以避免虚拟机退出的成本。
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci客户机侧轮询的缺点是,即使在物理机中的其他可运行任务中也会进行轮询。
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci其基本逻辑如下。一个全局值,即guest_halt_poll_ns,是由用户配置的,表示允
3262306a36Sopenharmony_ci许轮询的最大时间量。这个值是固定的。
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci每个vcpu都有一个可调整的guest_halt_poll_ns("per-cpu guest_halt_poll_ns"),
3562306a36Sopenharmony_ci它由算法响应事件进行调整(解释如下)。
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci模块参数
3862306a36Sopenharmony_ci========
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cihaltpoll管理器有5个可调整的模块参数:
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci1) guest_halt_poll_ns:
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci轮询停机前执行的最大时间,以纳秒为单位。
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci默认值: 200000
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci2) guest_halt_poll_shrink:
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci当唤醒事件发生在全局的guest_halt_poll_ns之后,用于缩减每个CPU的guest_halt_poll_ns
5162306a36Sopenharmony_ci的划分系数。
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci默认值: 2
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci3) guest_halt_poll_grow:
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci当事件发生在per-cpu guest_halt_poll_ns之后但在global guest_halt_poll_ns之前,
5862306a36Sopenharmony_ci用于增长per-cpu guest_halt_poll_ns的乘法系数。
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci默认值: 2
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci4) guest_halt_poll_grow_start:
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci在系统空闲的情况下,每个cpu guest_halt_poll_ns最终达到零。这个值设置了增长时的
6562306a36Sopenharmony_ci初始每cpu guest_halt_poll_ns。这个值可以从10000开始增加,以避免在最初的增长阶
6662306a36Sopenharmony_ci段出现失误。:
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci10k, 20k, 40k, ... (例如,假设guest_halt_poll_grow=2).
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci默认值: 50000
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci5) guest_halt_poll_allow_shrink:
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci允许缩减的Bool参数。设置为N以避免它(一旦达到全局的guest_halt_poll_ns值,每CPU的
7562306a36Sopenharmony_ciguest_halt_poll_ns将保持高位)。
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci默认值: Y
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci模块参数可以从Debugfs文件中设置,在::
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci	/sys/module/haltpoll/parameters/
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci进一步说明
8462306a36Sopenharmony_ci==========
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci- 在设置guest_halt_poll_ns参数时应该小心,因为一个大的值有可能使几乎是完全空闲机
8762306a36Sopenharmony_ci  器上的cpu使用率达到100%。
88