1.. include:: ../disclaimer-zh_CN.rst 2 3:Original: Documentation/virt/guest-halt-polling.rst 4 5:翻译: 6 7 司延腾 Yanteng Si <siyanteng@loongson.cn> 8 9:校译: 10 11 时奎亮 Alex Shi <alexs@kernel.org> 12 13.. _cn_virt_guest-halt-polling: 14 15======================================== 16客户机停机轮询机制(Guest halt polling) 17======================================== 18 19cpuidle_haltpoll驱动,与haltpoll管理器一起,允许客户机vcpus在停机前轮询 20一定的时间。 21 22这为物理机侧的轮询提供了以下好处: 23 24 1) 在执行轮询时,POLL标志被设置,这允许远程vCPU在执行唤醒时避免发送 25 IPI(以及处理IPI的相关成本)。 26 27 2) 可以避免虚拟机退出的成本。 28 29客户机侧轮询的缺点是,即使在物理机中的其他可运行任务中也会进行轮询。 30 31其基本逻辑如下。一个全局值,即guest_halt_poll_ns,是由用户配置的,表示允 32许轮询的最大时间量。这个值是固定的。 33 34每个vcpu都有一个可调整的guest_halt_poll_ns("per-cpu guest_halt_poll_ns"), 35它由算法响应事件进行调整(解释如下)。 36 37模块参数 38======== 39 40haltpoll管理器有5个可调整的模块参数: 41 421) guest_halt_poll_ns: 43 44轮询停机前执行的最大时间,以纳秒为单位。 45 46默认值: 200000 47 482) guest_halt_poll_shrink: 49 50当唤醒事件发生在全局的guest_halt_poll_ns之后,用于缩减每个CPU的guest_halt_poll_ns 51的划分系数。 52 53默认值: 2 54 553) guest_halt_poll_grow: 56 57当事件发生在per-cpu guest_halt_poll_ns之后但在global guest_halt_poll_ns之前, 58用于增长per-cpu guest_halt_poll_ns的乘法系数。 59 60默认值: 2 61 624) guest_halt_poll_grow_start: 63 64在系统空闲的情况下,每个cpu guest_halt_poll_ns最终达到零。这个值设置了增长时的 65初始每cpu guest_halt_poll_ns。这个值可以从10000开始增加,以避免在最初的增长阶 66段出现失误。: 67 6810k, 20k, 40k, ... (例如,假设guest_halt_poll_grow=2). 69 70默认值: 50000 71 725) guest_halt_poll_allow_shrink: 73 74允许缩减的Bool参数。设置为N以避免它(一旦达到全局的guest_halt_poll_ns值,每CPU的 75guest_halt_poll_ns将保持高位)。 76 77默认值: Y 78 79模块参数可以从Debugfs文件中设置,在:: 80 81 /sys/module/haltpoll/parameters/ 82 83进一步说明 84========== 85 86- 在设置guest_halt_poll_ns参数时应该小心,因为一个大的值有可能使几乎是完全空闲机 87 器上的cpu使用率达到100%。 88