0001 .. include:: ../disclaimer-zh_CN.rst
0002
0003 :Original: Documentation/virt/guest-halt-polling.rst
0004
0005 :翻译:
0006
0007 司延腾 Yanteng Si <siyanteng@loongson.cn>
0008
0009 :校译:
0010
0011 时奎亮 Alex Shi <alexs@kernel.org>
0012
0013 .. _cn_virt_guest-halt-polling:
0014
0015 ========================================
0016 客户机停机轮询机制(Guest halt polling)
0017 ========================================
0018
0019 cpuidle_haltpoll驱动,与haltpoll管理器一起,允许客户机vcpus在停机前轮询
0020 一定的时间。
0021
0022 这为物理机侧的轮询提供了以下好处:
0023
0024 1) 在执行轮询时,POLL标志被设置,这允许远程vCPU在执行唤醒时避免发送
0025 IPI(以及处理IPI的相关成本)。
0026
0027 2) 可以避免虚拟机退出的成本。
0028
0029 客户机侧轮询的缺点是,即使在物理机中的其他可运行任务中也会进行轮询。
0030
0031 其基本逻辑如下。一个全局值,即guest_halt_poll_ns,是由用户配置的,表示允
0032 许轮询的最大时间量。这个值是固定的。
0033
0034 每个vcpu都有一个可调整的guest_halt_poll_ns("per-cpu guest_halt_poll_ns"),
0035 它由算法响应事件进行调整(解释如下)。
0036
0037 模块参数
0038 ========
0039
0040 haltpoll管理器有5个可调整的模块参数:
0041
0042 1) guest_halt_poll_ns:
0043
0044 轮询停机前执行的最大时间,以纳秒为单位。
0045
0046 默认值: 200000
0047
0048 2) guest_halt_poll_shrink:
0049
0050 当唤醒事件发生在全局的guest_halt_poll_ns之后,用于缩减每个CPU的guest_halt_poll_ns
0051 的划分系数。
0052
0053 默认值: 2
0054
0055 3) guest_halt_poll_grow:
0056
0057 当事件发生在per-cpu guest_halt_poll_ns之后但在global guest_halt_poll_ns之前,
0058 用于增长per-cpu guest_halt_poll_ns的乘法系数。
0059
0060 默认值: 2
0061
0062 4) guest_halt_poll_grow_start:
0063
0064 在系统空闲的情况下,每个cpu guest_halt_poll_ns最终达到零。这个值设置了增长时的
0065 初始每cpu guest_halt_poll_ns。这个值可以从10000开始增加,以避免在最初的增长阶
0066 段出现失误。:
0067
0068 10k, 20k, 40k, ... (例如,假设guest_halt_poll_grow=2).
0069
0070 默认值: 50000
0071
0072 5) guest_halt_poll_allow_shrink:
0073
0074 允许缩减的Bool参数。设置为N以避免它(一旦达到全局的guest_halt_poll_ns值,每CPU的
0075 guest_halt_poll_ns将保持高位)。
0076
0077 默认值: Y
0078
0079 模块参数可以从Debugfs文件中设置,在::
0080
0081 /sys/module/haltpoll/parameters/
0082
0083 进一步说明
0084 ==========
0085
0086 - 在设置guest_halt_poll_ns参数时应该小心,因为一个大的值有可能使几乎是完全空闲机
0087 器上的cpu使用率达到100%。