← Documents Documentation/virt/kvm/x86/cpuid.rst GitHub 원문 ↗

Linux 6.18.37 · 가상화 / KVM / x86

KVM CPUID bits

KVM signature와 EAX feature bitmap, EDX realtime hint를 정의합니다.

Source pathDocumentation/virt/kvm/x86/cpuid.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

cpuid.rst:1-124

KVM signature와 EAX feature bitmap, EDX realtime hint를 정의합니다.

레지스터, 비트 필드, 구조체와 호출 순서를 원문 표기 및 줄 좌표와 함께 보존했습니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ==============
4 KVM CPUID bits
5 ==============
6
7 :Author: Glauber Costa <glommer@gmail.com>
8
9 A guest running on a kvm host, can check some of its features using
10 cpuid. This is not always guaranteed to work, since userspace can
11 mask-out some, or even all KVM-related cpuid features before launching
12 a guest.
13
14 KVM cpuid functions are:
15
16 function: KVM_CPUID_SIGNATURE (0x40000000)
17
18 returns::
19
20 eax = 0x40000001
21 ebx = 0x4b4d564b
22 ecx = 0x564b4d56
23 edx = 0x4d
24
25 Note that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM".
26 The value in eax corresponds to the maximum cpuid function present in this leaf,
27 and will be updated if more functions are added in the future.
28 Note also that old hosts set eax value to 0x0. This should
29 be interpreted as if the value was 0x40000001.
30 This function queries the presence of KVM cpuid leafs.
31
32 function: define KVM_CPUID_FEATURES (0x40000001)
33
34 returns::
35
36 ebx, ecx
37 eax = an OR'ed group of (1 << flag)
38
39 where ``flag`` is defined as below:
40
41 ================================== =========== ================================
42 flag value meaning
43 ================================== =========== ================================
44 KVM_FEATURE_CLOCKSOURCE 0 kvmclock available at msrs
45 0x11 and 0x12
46
47 KVM_FEATURE_NOP_IO_DELAY 1 not necessary to perform delays
48 on PIO operations
49
50 KVM_FEATURE_MMU_OP 2 deprecated
51
52 KVM_FEATURE_CLOCKSOURCE2 3 kvmclock available at msrs
53 0x4b564d00 and 0x4b564d01
54
55 KVM_FEATURE_ASYNC_PF 4 async pf can be enabled by
56 writing to msr 0x4b564d02
57
58 KVM_FEATURE_STEAL_TIME 5 steal time can be enabled by
59 writing to msr 0x4b564d03
60
61 KVM_FEATURE_PV_EOI 6 paravirtualized end of interrupt
62 handler can be enabled by
63 writing to msr 0x4b564d04
64
65 KVM_FEATURE_PV_UNHALT 7 guest checks this feature bit
66 before enabling paravirtualized
67 spinlock support
68
69 KVM_FEATURE_PV_TLB_FLUSH 9 guest checks this feature bit
70 before enabling paravirtualized
71 tlb flush
72
73 KVM_FEATURE_ASYNC_PF_VMEXIT 10 paravirtualized async PF VM EXIT
74 can be enabled by setting bit 2
75 when writing to msr 0x4b564d02
76
77 KVM_FEATURE_PV_SEND_IPI 11 guest checks this feature bit
78 before enabling paravirtualized
79 send IPIs
80
81 KVM_FEATURE_POLL_CONTROL 12 host-side polling on HLT can
82 be disabled by writing
83 to msr 0x4b564d05.
84
85 KVM_FEATURE_PV_SCHED_YIELD 13 guest checks this feature bit
86 before using paravirtualized
87 sched yield.
88
89 KVM_FEATURE_ASYNC_PF_INT 14 guest checks this feature bit
90 before using the second async
91 pf control msr 0x4b564d06 and
92 async pf acknowledgment msr
93 0x4b564d07.
94
95 KVM_FEATURE_MSI_EXT_DEST_ID 15 guest checks this feature bit
96 before using extended destination
97 ID bits in MSI address bits 11-5.
98
99 KVM_FEATURE_HC_MAP_GPA_RANGE 16 guest checks this feature bit before
100 using the map gpa range hypercall
101 to notify the page state change
102
103 KVM_FEATURE_MIGRATION_CONTROL 17 guest checks this feature bit before
104 using MSR_KVM_MIGRATION_CONTROL
105
106 KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24 host will warn if no guest-side
107 per-cpu warps are expected in
108 kvmclock
109 ================================== =========== ================================
110
111 ::
112
113 edx = an OR'ed group of (1 << flag)
114
115 Where ``flag`` here is defined as below:
116
117 ================== ============ =================================
118 flag value meaning
119 ================== ============ =================================
120 KVM_HINTS_REALTIME 0 guest checks this feature bit to
121 determine that vCPUs are never
122 preempted for an unlimited time
123 allowing optimizations
124 ================== ============ =================================
125

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

게스트의 KVM 기능 탐지

1-15

KVM host에서 실행하는 guest는 CPUID로 일부 KVM 기능을 확인할 수 있습니다. 그러나 userspace가 guest 실행 전에 일부 또는 모든 KVM CPUID feature를 mask할 수 있으므로 host 지원이 항상 guest 노출로 이어지지는 않습니다.

.. SPDX-License-Identifier: GPL-2.0

==============
KVM CPUID bits
==============

:Author: Glauber Costa <glommer@gmail.com>

A guest running on a kvm host, can check some of its features using
cpuid. This is not always guaranteed to work, since userspace can
mask-out some, or even all KVM-related cpuid features before launching
a guest.

KVM cpuid functions are:

KVM_CPUID_SIGNATURE

16-31

`KVM_CPUID_SIGNATURE (0x40000000)` leaf는 KVM CPUID leaf 존재와 signature를 보고합니다.

KVM signature leaf
Register값과 의미
`EAX``0x40000001`, 현재 최대 KVM CPUID function
`EBX``0x4b4d564b`
`ECX``0x564b4d56`
`EDX``0x4d`; EBX·ECX·EDX를 합치면 `KVMKVMKVM`

반환 register 값입니다.

미래 leaf가 추가되면 EAX 최대값도 갱신됩니다. 오래된 host의 EAX=0은 `0x40000001`로 해석해야 합니다.

function: KVM_CPUID_SIGNATURE (0x40000000)

returns::

   eax = 0x40000001
   ebx = 0x4b4d564b
   ecx = 0x564b4d56
   edx = 0x4d

Note that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM".
The value in eax corresponds to the maximum cpuid function present in this leaf,
and will be updated if more functions are added in the future.
Note also that old hosts set eax value to 0x0. This should
be interpreted as if the value was 0x40000001.
This function queries the presence of KVM cpuid leafs.

KVM_CPUID_FEATURES

32-124

`KVM_CPUID_FEATURES (0x40000001)`의 EAX는 `(1 << flag)`를 OR한 feature bitmap이고 EBX·ECX는 이 문서에서 별도 의미를 정의하지 않습니다.

EAX KVM feature bit
BitFeature의미
0`KVM_FEATURE_CLOCKSOURCE`MSR 0x11·0x12의 kvmclock
1`KVM_FEATURE_NOP_IO_DELAY`PIO delay 불필요
2`KVM_FEATURE_MMU_OP`deprecated
3`KVM_FEATURE_CLOCKSOURCE2`MSR 0x4b564d00·01의 kvmclock
4`KVM_FEATURE_ASYNC_PF`MSR 0x4b564d02로 async PF 활성화
5`KVM_FEATURE_STEAL_TIME`MSR 0x4b564d03으로 steal time 활성화
6`KVM_FEATURE_PV_EOI`MSR 0x4b564d04의 PV EOI
7`KVM_FEATURE_PV_UNHALT`PV spinlock 지원
9`KVM_FEATURE_PV_TLB_FLUSH`PV TLB flush
10`KVM_FEATURE_ASYNC_PF_VMEXIT`MSR 0x4b564d02 bit 2의 async PF VM exit
11`KVM_FEATURE_PV_SEND_IPI`PV IPI 송신
12`KVM_FEATURE_POLL_CONTROL`MSR 0x4b564d05로 host HLT polling 비활성화
13`KVM_FEATURE_PV_SCHED_YIELD`PV scheduler yield
14`KVM_FEATURE_ASYNC_PF_INT`MSR 0x4b564d06·07의 async PF interrupt와 ack
15`KVM_FEATURE_MSI_EXT_DEST_ID`MSI address bit 11-5의 extended destination ID
16`KVM_FEATURE_HC_MAP_GPA_RANGE`GPA page state 변경 하이퍼콜
17`KVM_FEATURE_MIGRATION_CONTROL``MSR_KVM_MIGRATION_CONTROL` 사용
24`KVM_FEATURE_CLOCKSOURCE_STABLE_BIT`guest별 kvmclock warp가 예상되지 않음을 host가 보장

guest가 MSR 또는 하이퍼콜 기능 사용 전에 확인하는 비트입니다.

EDX는 별도 hint bitmap입니다. 현재 bit 0의 `KVM_HINTS_REALTIME`은 vCPU가 무제한 시간 선점되지 않음을 guest에 알려 관련 최적화를 허용합니다.

function: define KVM_CPUID_FEATURES (0x40000001)

returns::

          ebx, ecx
          eax = an OR'ed group of (1 << flag)

where ``flag`` is defined as below:

================================== =========== ================================
flag                               value       meaning
================================== =========== ================================
KVM_FEATURE_CLOCKSOURCE            0           kvmclock available at msrs
                                               0x11 and 0x12

KVM_FEATURE_NOP_IO_DELAY           1           not necessary to perform delays
                                               on PIO operations

KVM_FEATURE_MMU_OP                 2           deprecated

KVM_FEATURE_CLOCKSOURCE2           3           kvmclock available at msrs
                                               0x4b564d00 and 0x4b564d01

KVM_FEATURE_ASYNC_PF               4           async pf can be enabled by
                                               writing to msr 0x4b564d02

KVM_FEATURE_STEAL_TIME             5           steal time can be enabled by
                                               writing to msr 0x4b564d03

KVM_FEATURE_PV_EOI                 6           paravirtualized end of interrupt
                                               handler can be enabled by
                                               writing to msr 0x4b564d04

KVM_FEATURE_PV_UNHALT              7           guest checks this feature bit
                                               before enabling paravirtualized
                                               spinlock support

KVM_FEATURE_PV_TLB_FLUSH           9           guest checks this feature bit
                                               before enabling paravirtualized
                                               tlb flush

KVM_FEATURE_ASYNC_PF_VMEXIT        10          paravirtualized async PF VM EXIT
                                               can be enabled by setting bit 2
                                               when writing to msr 0x4b564d02

KVM_FEATURE_PV_SEND_IPI            11          guest checks this feature bit
                                               before enabling paravirtualized
                                               send IPIs

KVM_FEATURE_POLL_CONTROL           12          host-side polling on HLT can
                                               be disabled by writing
                                               to msr 0x4b564d05.

KVM_FEATURE_PV_SCHED_YIELD         13          guest checks this feature bit
                                               before using paravirtualized
                                               sched yield.

KVM_FEATURE_ASYNC_PF_INT           14          guest checks this feature bit
                                               before using the second async
                                               pf control msr 0x4b564d06 and
                                               async pf acknowledgment msr
                                               0x4b564d07.

KVM_FEATURE_MSI_EXT_DEST_ID        15          guest checks this feature bit
                                               before using extended destination
                                               ID bits in MSI address bits 11-5.

KVM_FEATURE_HC_MAP_GPA_RANGE       16          guest checks this feature bit before
                                               using the map gpa range hypercall
                                               to notify the page state change

KVM_FEATURE_MIGRATION_CONTROL      17          guest checks this feature bit before
                                               using MSR_KVM_MIGRATION_CONTROL

KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24          host will warn if no guest-side
                                               per-cpu warps are expected in
                                               kvmclock
================================== =========== ================================

::

      edx = an OR'ed group of (1 << flag)

Where ``flag`` here is defined as below:

================== ============ =================================
flag               value        meaning
================== ============ =================================
KVM_HINTS_REALTIME 0            guest checks this feature bit to
                                determine that vCPUs are never
                                preempted for an unlimited time
                                allowing optimizations
================== ============ =================================