← Documents Documentation/admin-guide/kdump/vmcoreinfo.rst GitHub 원문 ↗

Linux 6.18.37 · Administration / Crash Dumping

VMCOREINFO

Crash와 makedumpfile이 vmcore를 해석하도록 ELF note에 기록하는 공통·아키텍처별 심벌, 구조체 크기, 필드 오프셋과 주소 범위를 설명합니다.

Source pathDocumentation/admin-guide/kdump/vmcoreinfo.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

ELF note의 역할

vmcoreinfo.rst:1-46

덤프 분석 도구가 커널 메모리 배치를 재구성하는 데 VMCOREINFO가 필요한 이유를 설명합니다.

공통 메모리 정보

vmcoreinfo.rst:47-197

노드·주소 변환 심벌, 핵심 구조체 크기와 멤버 오프셋을 정리합니다.

로그와 페이지 필터

vmcoreinfo.rst:198-340

printk 링 버퍼 구성요소와 덤프에서 페이지를 제외하는 플래그를 설명합니다.

x86과 ARM

vmcoreinfo.rst:341-477

x86_64·x86_32·ARM64·arm의 주소 변환, KASLR, SME와 PAC 관련 항목을 정리합니다.

s390, powerpc, sh, RISCV64

vmcoreinfo.rst:478-596

나머지 아키텍처의 CPU·NUMA·vmemmap·page size·가상 주소 범위 항목을 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 ==========
2 VMCOREINFO
3 ==========
4
5 What is it?
6 ===========
7
8 VMCOREINFO is a special ELF note section. It contains various
9 information from the kernel like structure size, page size, symbol
10 values, field offsets, etc. These data are packed into an ELF note
11 section and used by user-space tools like crash and makedumpfile to
12 analyze a kernel's memory layout.
13
14 Common variables
15 ================
16
17 init_uts_ns.name.release
18 ------------------------
19
20 The version of the Linux kernel. Used to find the corresponding source
21 code from which the kernel has been built. For example, crash uses it to
22 find the corresponding vmlinux in order to process vmcore.
23
24 PAGE_SIZE
25 ---------
26
27 The size of a page. It is the smallest unit of data used by the memory
28 management facilities. It is usually 4096 bytes of size and a page is
29 aligned on 4096 bytes. Used for computing page addresses.
30
31 init_uts_ns
32 -----------
33
34 The UTS namespace which is used to isolate two specific elements of the
35 system that relate to the uname(2) system call. It is named after the
36 data structure used to store information returned by the uname(2) system
37 call.
38
39 User-space tools can get the kernel name, host name, kernel release
40 number, kernel version, architecture name and OS type from it.
41
42 (uts_namespace, name)
43 ---------------------
44
45 Offset of the name's member. Crash Utility and Makedumpfile get
46 the start address of the init_uts_ns.name from this.
47
48 node_online_map
49 ---------------
50
51 An array node_states[N_ONLINE] which represents the set of online nodes
52 in a system, one bit position per node number. Used to keep track of
53 which nodes are in the system and online.
54
55 swapper_pg_dir
56 --------------
57
58 The global page directory pointer of the kernel. Used to translate
59 virtual to physical addresses.
60
61 _stext
62 ------
63
64 Defines the beginning of the text section. In general, _stext indicates
65 the kernel start address. Used to convert a virtual address from the
66 direct kernel map to a physical address.
67
68 VMALLOC_START
69 -------------
70
71 Stores the base address of vmalloc area. makedumpfile gets this value
72 since is necessary for vmalloc translation.
73
74 mem_map
75 -------
76
77 Physical addresses are translated to struct pages by treating them as
78 an index into the mem_map array. Right-shifting a physical address
79 PAGE_SHIFT bits converts it into a page frame number which is an index
80 into that mem_map array.
81
82 Used to map an address to the corresponding struct page.
83
84 contig_page_data
85 ----------------
86
87 Makedumpfile gets the pglist_data structure from this symbol, which is
88 used to describe the memory layout.
89
90 User-space tools use this to exclude free pages when dumping memory.
91
92 mem_section|(mem_section, NR_SECTION_ROOTS)|(mem_section, section_mem_map)
93 --------------------------------------------------------------------------
94
95 The address of the mem_section array, its length, structure size, and
96 the section_mem_map offset.
97
98 It exists in the sparse memory mapping model, and it is also somewhat
99 similar to the mem_map variable, both of them are used to translate an
100 address.
101
102 MAX_PHYSMEM_BITS
103 ----------------
104
105 Defines the maximum supported physical address space memory.
106
107 page
108 ----
109
110 The size of a page structure. struct page is an important data structure
111 and it is widely used to compute contiguous memory.
112
113 pglist_data
114 -----------
115
116 The size of a pglist_data structure. This value is used to check if the
117 pglist_data structure is valid. It is also used for checking the memory
118 type.
119
120 zone
121 ----
122
123 The size of a zone structure. This value is used to check if the zone
124 structure has been found. It is also used for excluding free pages.
125
126 free_area
127 ---------
128
129 The size of a free_area structure. It indicates whether the free_area
130 structure is valid or not. Useful when excluding free pages.
131
132 list_head
133 ---------
134
135 The size of a list_head structure. Used when iterating lists in a
136 post-mortem analysis session.
137
138 nodemask_t
139 ----------
140
141 The size of a nodemask_t type. Used to compute the number of online
142 nodes.
143
144 (page, flags|_refcount|mapping|lru|_mapcount|private|compound_order|compound_head)
145 ----------------------------------------------------------------------------------
146
147 User-space tools compute their values based on the offset of these
148 variables. The variables are used when excluding unnecessary pages.
149
150 (pglist_data, node_zones|nr_zones|node_mem_map|node_start_pfn|node_spanned_pages|node_id)
151 -----------------------------------------------------------------------------------------
152
153 On NUMA machines, each NUMA node has a pg_data_t to describe its memory
154 layout. On UMA machines there is a single pglist_data which describes the
155 whole memory.
156
157 These values are used to check the memory type and to compute the
158 virtual address for memory map.
159
160 (zone, free_area|vm_stat|spanned_pages)
161 ---------------------------------------
162
163 Each node is divided into a number of blocks called zones which
164 represent ranges within memory. A zone is described by a structure zone.
165
166 User-space tools compute required values based on the offset of these
167 variables.
168
169 (free_area, free_list)
170 ----------------------
171
172 Offset of the free_list's member. This value is used to compute the number
173 of free pages.
174
175 Each zone has a free_area structure array called free_area[NR_PAGE_ORDERS].
176 The free_list represents a linked list of free page blocks.
177
178 (list_head, next|prev)
179 ----------------------
180
181 Offsets of the list_head's members. list_head is used to define a
182 circular linked list. User-space tools need these in order to traverse
183 lists.
184
185 (vmap_area, va_start|list)
186 --------------------------
187
188 Offsets of the vmap_area's members. They carry vmalloc-specific
189 information. Makedumpfile gets the start address of the vmalloc region
190 from this.
191
192 (zone.free_area, NR_PAGE_ORDERS)
193 --------------------------------
194
195 Free areas descriptor. User-space tools use this value to iterate the
196 free_area ranges. NR_PAGE_ORDERS is used by the zone buddy allocator.
197
198 prb
199 ---
200
201 A pointer to the printk ringbuffer (struct printk_ringbuffer). This
202 may be pointing to the static boot ringbuffer or the dynamically
203 allocated ringbuffer, depending on when the core dump occurred.
204 Used by user-space tools to read the active kernel log buffer.
205
206 printk_rb_static
207 ----------------
208
209 A pointer to the static boot printk ringbuffer. If @prb has a
210 different value, this is useful for viewing the initial boot messages,
211 which may have been overwritten in the dynamically allocated
212 ringbuffer.
213
214 clear_seq
215 ---------
216
217 The sequence number of the printk() record after the last clear
218 command. It indicates the first record after the last
219 SYSLOG_ACTION_CLEAR, like issued by 'dmesg -c'. Used by user-space
220 tools to dump a subset of the dmesg log.
221
222 printk_ringbuffer
223 -----------------
224
225 The size of a printk_ringbuffer structure. This structure contains all
226 information required for accessing the various components of the
227 kernel log buffer.
228
229 (printk_ringbuffer, desc_ring|text_data_ring|dict_data_ring|fail)
230 -----------------------------------------------------------------
231
232 Offsets for the various components of the printk ringbuffer. Used by
233 user-space tools to view the kernel log buffer without requiring the
234 declaration of the structure.
235
236 prb_desc_ring
237 -------------
238
239 The size of the prb_desc_ring structure. This structure contains
240 information about the set of record descriptors.
241
242 (prb_desc_ring, count_bits|descs|head_id|tail_id)
243 -------------------------------------------------
244
245 Offsets for the fields describing the set of record descriptors. Used
246 by user-space tools to be able to traverse the descriptors without
247 requiring the declaration of the structure.
248
249 prb_desc
250 --------
251
252 The size of the prb_desc structure. This structure contains
253 information about a single record descriptor.
254
255 (prb_desc, info|state_var|text_blk_lpos|dict_blk_lpos)
256 ------------------------------------------------------
257
258 Offsets for the fields describing a record descriptors. Used by
259 user-space tools to be able to read descriptors without requiring
260 the declaration of the structure.
261
262 prb_data_blk_lpos
263 -----------------
264
265 The size of the prb_data_blk_lpos structure. This structure contains
266 information about where the text or dictionary data (data block) is
267 located within the respective data ring.
268
269 (prb_data_blk_lpos, begin|next)
270 -------------------------------
271
272 Offsets for the fields describing the location of a data block. Used
273 by user-space tools to be able to locate data blocks without
274 requiring the declaration of the structure.
275
276 printk_info
277 -----------
278
279 The size of the printk_info structure. This structure contains all
280 the meta-data for a record.
281
282 (printk_info, seq|ts_nsec|text_len|dict_len|caller_id)
283 ------------------------------------------------------
284
285 Offsets for the fields providing the meta-data for a record. Used by
286 user-space tools to be able to read the information without requiring
287 the declaration of the structure.
288
289 prb_data_ring
290 -------------
291
292 The size of the prb_data_ring structure. This structure contains
293 information about a set of data blocks.
294
295 (prb_data_ring, size_bits|data|head_lpos|tail_lpos)
296 ---------------------------------------------------
297
298 Offsets for the fields describing a set of data blocks. Used by
299 user-space tools to be able to access the data blocks without
300 requiring the declaration of the structure.
301
302 atomic_long_t
303 -------------
304
305 The size of the atomic_long_t structure. Used by user-space tools to
306 be able to copy the full structure, regardless of its
307 architecture-specific implementation.
308
309 (atomic_long_t, counter)
310 ------------------------
311
312 Offset for the long value of an atomic_long_t variable. Used by
313 user-space tools to access the long value without requiring the
314 architecture-specific declaration.
315
316 (free_area.free_list, MIGRATE_TYPES)
317 ------------------------------------
318
319 The number of migrate types for pages. The free_list is described by the
320 array. Used by tools to compute the number of free pages.
321
322 NR_FREE_PAGES
323 -------------
324
325 On linux-2.6.21 or later, the number of free pages is in
326 vm_stat[NR_FREE_PAGES]. Used to get the number of free pages.
327
328 PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_hwpoison|PG_head_mask
329 --------------------------------------------------------------------------
330
331 Page attributes. These flags are used to filter various unnecessary for
332 dumping pages.
333
334 PAGE_SLAB_MAPCOUNT_VALUE|PAGE_BUDDY_MAPCOUNT_VALUE|PAGE_OFFLINE_MAPCOUNT_VALUE|PAGE_HUGETLB_MAPCOUNT_VALUE|PAGE_UNACCEPTED_MAPCOUNT_VALUE
335 ------------------------------------------------------------------------------------------------------------------------------------------
336
337 More page attributes. These flags are used to filter various unnecessary for
338 dumping pages.
339
340
341 x86_64
342 ======
343
344 phys_base
345 ---------
346
347 Used to convert the virtual address of an exported kernel symbol to its
348 corresponding physical address.
349
350 init_top_pgt
351 ------------
352
353 Used to walk through the whole page table and convert virtual addresses
354 to physical addresses. The init_top_pgt is somewhat similar to
355 swapper_pg_dir, but it is only used in x86_64.
356
357 pgtable_l5_enabled
358 ------------------
359
360 User-space tools need to know whether the crash kernel was in 5-level
361 paging mode.
362
363 node_data
364 ---------
365
366 This is a struct pglist_data array and stores all NUMA nodes
367 information. Makedumpfile gets the pglist_data structure from it.
368
369 (node_data, MAX_NUMNODES)
370 -------------------------
371
372 The maximum number of nodes in system.
373
374 KERNELOFFSET
375 ------------
376
377 The kernel randomization offset. Used to compute the page offset. If
378 KASLR is disabled, this value is zero.
379
380 KERNEL_IMAGE_SIZE
381 -----------------
382
383 Currently unused by Makedumpfile. Used to compute the module virtual
384 address by Crash.
385
386 sme_mask
387 --------
388
389 AMD-specific with SME support: it indicates the secure memory encryption
390 mask. Makedumpfile tools need to know whether the crash kernel was
391 encrypted. If SME is enabled in the first kernel, the crash kernel's
392 page table entries (pgd/pud/pmd/pte) contain the memory encryption
393 mask. This is used to remove the SME mask and obtain the true physical
394 address.
395
396 Currently, sme_mask stores the value of the C-bit position. If needed,
397 additional SME-relevant info can be placed in that variable.
398
399 For example::
400
401 [ misc ][ enc bit ][ other misc SME info ]
402 0000_0000_0000_0000_1000_0000_0000_0000_0000_0000_..._0000
403 63 59 55 51 47 43 39 35 31 27 ... 3
404
405 x86_32
406 ======
407
408 X86_PAE
409 -------
410
411 Denotes whether physical address extensions are enabled. It has the cost
412 of a higher page table lookup overhead, and also consumes more page
413 table space per process. Used to check whether PAE was enabled in the
414 crash kernel when converting virtual addresses to physical addresses.
415
416 ARM64
417 =====
418
419 VA_BITS
420 -------
421
422 The maximum number of bits for virtual addresses. Used to compute the
423 virtual memory ranges.
424
425 kimage_voffset
426 --------------
427
428 The offset between the kernel virtual and physical mappings. Used to
429 translate virtual to physical addresses.
430
431 PHYS_OFFSET
432 -----------
433
434 Indicates the physical address of the start of memory. Similar to
435 kimage_voffset, which is used to translate virtual to physical
436 addresses.
437
438 KERNELOFFSET
439 ------------
440
441 The kernel randomization offset. Used to compute the page offset. If
442 KASLR is disabled, this value is zero.
443
444 KERNELPACMASK
445 -------------
446
447 The mask to extract the Pointer Authentication Code from a kernel virtual
448 address.
449
450 TCR_EL1.T1SZ
451 ------------
452
453 Indicates the size offset of the memory region addressed by TTBR1_EL1.
454 The region size is 2^(64-T1SZ) bytes.
455
456 TTBR1_EL1 is the table base address register specified by ARMv8-A
457 architecture which is used to lookup the page-tables for the Virtual
458 addresses in the higher VA range (refer to ARMv8 ARM document for
459 more details).
460
461 MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END
462 -----------------------------------------------------------------------------
463
464 Used to get the correct ranges:
465 MODULES_VADDR ~ MODULES_END-1 : Kernel module space.
466 VMALLOC_START ~ VMALLOC_END-1 : vmalloc() / ioremap() space.
467 VMEMMAP_START ~ VMEMMAP_END-1 : vmemmap region, used for struct page array.
468
469 arm
470 ===
471
472 ARM_LPAE
473 --------
474
475 It indicates whether the crash kernel supports large physical address
476 extensions. Used to translate virtual to physical addresses.
477
478 s390
479 ====
480
481 lowcore_ptr
482 -----------
483
484 An array with a pointer to the lowcore of every CPU. Used to print the
485 psw and all registers information.
486
487 high_memory
488 -----------
489
490 Used to get the vmalloc_start address from the high_memory symbol.
491
492 (lowcore_ptr, NR_CPUS)
493 ----------------------
494
495 The maximum number of CPUs.
496
497 powerpc
498 =======
499
500
501 node_data|(node_data, MAX_NUMNODES)
502 -----------------------------------
503
504 See above.
505
506 contig_page_data
507 ----------------
508
509 See above.
510
511 vmemmap_list
512 ------------
513
514 The vmemmap_list maintains the entire vmemmap physical mapping. Used
515 to get vmemmap list count and populated vmemmap regions info. If the
516 vmemmap address translation information is stored in the crash kernel,
517 it is used to translate vmemmap kernel virtual addresses.
518
519 mmu_vmemmap_psize
520 -----------------
521
522 The size of a page. Used to translate virtual to physical addresses.
523
524 mmu_psize_defs
525 --------------
526
527 Page size definitions, i.e. 4k, 64k, or 16M.
528
529 Used to make vtop translations.
530
531 vmemmap_backing|(vmemmap_backing, list)|(vmemmap_backing, phys)|(vmemmap_backing, virt_addr)
532 --------------------------------------------------------------------------------------------
533
534 The vmemmap virtual address space management does not have a traditional
535 page table to track which virtual struct pages are backed by a physical
536 mapping. The virtual to physical mappings are tracked in a simple linked
537 list format.
538
539 User-space tools need to know the offset of list, phys and virt_addr
540 when computing the count of vmemmap regions.
541
542 mmu_psize_def|(mmu_psize_def, shift)
543 ------------------------------------
544
545 The size of a struct mmu_psize_def and the offset of mmu_psize_def's
546 member.
547
548 Used in vtop translations.
549
550 sh
551 ==
552
553 node_data|(node_data, MAX_NUMNODES)
554 -----------------------------------
555
556 See above.
557
558 X2TLB
559 -----
560
561 Indicates whether the crashed kernel enabled SH extended mode.
562
563 RISCV64
564 =======
565
566 VA_BITS
567 -------
568
569 The maximum number of bits for virtual addresses. Used to compute the
570 virtual memory ranges.
571
572 PAGE_OFFSET
573 -----------
574
575 Indicates the virtual kernel start address of the direct-mapped RAM region.
576
577 phys_ram_base
578 -------------
579
580 Indicates the start physical RAM address.
581
582 MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END|KERNEL_LINK_ADDR
583 ----------------------------------------------------------------------------------------------
584
585 Used to get the correct ranges:
586
587 * MODULES_VADDR ~ MODULES_END : Kernel module space.
588 * VMALLOC_START ~ VMALLOC_END : vmalloc() / ioremap() space.
589 * VMEMMAP_START ~ VMEMMAP_END : vmemmap space, used for struct page array.
590 * KERNEL_LINK_ADDR : start address of Kernel link and BPF
591
592 va_kernel_pa_offset
593 -------------------
594
595 Indicates the offset between the kernel virtual and physical mappings.
596 Used to translate virtual to physical addresses.
597

3. 한국어 전문 번역

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

VMCOREINFO와 기본 식별 정보

1-46

VMCOREINFO는 특별한 ELF note 섹션입니다. 커널의 구조체 크기, 페이지 크기, 심벌 값과 필드 오프셋 등을 ELF note에 묶어 넣습니다. `crash`와 `makedumpfile` 같은 사용자 공간 도구가 이 데이터를 이용해 커널 메모리 배치를 분석합니다.

항목의미와 용도
init_uts_ns.name.releaseLinux 커널 버전입니다. 커널을 빌드한 대응 소스 코드를 찾는 데 사용합니다. 예를 들어 Crash는 vmcore를 처리할 대응 `vmlinux`를 이 값으로 찾습니다.
PAGE_SIZE메모리 관리가 사용하는 최소 데이터 단위인 페이지의 크기입니다. 보통 4096바이트이며 페이지도 4096바이트 경계에 맞춰집니다. 페이지 주소 계산에 사용합니다.
init_uts_ns`uname(2)` 시스템 호출과 관련된 두 시스템 요소를 격리하는 UTS namespace입니다. 사용자 공간 도구는 여기서 커널 이름, 호스트 이름, 커널 release 번호와 version, 아키텍처 이름, OS 유형을 얻습니다.
(uts_namespace, name)`name` 멤버의 오프셋입니다. Crash와 Makedumpfile은 이 값으로 `init_uts_ns.name`의 시작 주소를 구합니다.

노드와 메모리 주소 변환

47-106
항목의미와 용도
node_online_map시스템의 온라인 노드 집합을 노드 번호당 한 비트로 나타내는 `node_states[N_ONLINE]` 배열입니다.
swapper_pg_dir커널의 전역 페이지 디렉터리 포인터입니다. 가상 주소를 물리 주소로 변환할 때 사용합니다.
_stexttext 섹션의 시작이며 일반적으로 커널 시작 주소를 뜻합니다. direct kernel map의 가상 주소를 물리 주소로 바꿀 때 사용합니다.
VMALLOC_STARTvmalloc 영역의 기본 주소입니다. Makedumpfile이 vmalloc 주소를 변환하는 데 필요합니다.
mem_map물리 주소를 `PAGE_SHIFT`만큼 오른쪽으로 이동해 page frame number를 얻고, 이를 `mem_map` 배열의 인덱스로 사용하여 대응 `struct page`를 찾습니다.
contig_page_dataMakedumpfile이 메모리 배치를 설명하는 `pglist_data` 구조체를 얻는 심벌입니다. 사용자 공간 도구는 이를 이용해 덤프에서 free page를 제외합니다.
mem_section|(mem_section, NR_SECTION_ROOTS)|(mem_section, section_mem_map)`mem_section` 배열 주소, 배열 길이, 구조체 크기와 `section_mem_map` 오프셋입니다. sparse memory mapping 모델에서 주소를 변환하며 `mem_map`과 비슷한 역할을 합니다.
MAX_PHYSMEM_BITS지원 가능한 물리 주소 공간 메모리의 최대 비트 수를 정의합니다.

핵심 메모리 구조체 크기

107-143
항목의미와 용도
page`struct page`의 크기입니다. 연속 메모리를 계산하는 데 널리 사용하는 핵심 구조체입니다.
pglist_data`pglist_data` 구조체 크기입니다. 구조체 유효성과 메모리 유형을 확인할 때 사용합니다.
zone`zone` 구조체 크기입니다. zone을 찾았는지 확인하고 free page를 제외하는 데 사용합니다.
free_area`free_area` 구조체 크기입니다. 구조체 유효성을 판별하고 free page를 제외할 때 유용합니다.
list_head`list_head` 구조체 크기입니다. 사후 분석에서 목록을 순회할 때 사용합니다.
nodemask_t`nodemask_t` 유형 크기입니다. 온라인 노드 수를 계산할 때 사용합니다.

메모리 구조체 필드 오프셋

144-197
항목의미와 용도
(page, flags|_refcount|mapping|lru|_mapcount|private|compound_order|compound_head)사용자 공간 도구가 각 변수의 오프셋으로 값을 계산하며 불필요한 페이지를 제외할 때 사용합니다.
(pglist_data, node_zones|nr_zones|node_mem_map|node_start_pfn|node_spanned_pages|node_id)NUMA의 각 노드는 메모리 배치를 설명하는 `pg_data_t`를 가지며 UMA에는 전체 메모리를 설명하는 `pglist_data` 하나가 있습니다. 메모리 유형 확인과 memory map 가상 주소 계산에 사용합니다.
(zone, free_area|vm_stat|spanned_pages)각 노드는 메모리 범위를 나타내는 여러 zone으로 나뉩니다. 사용자 공간 도구가 이 변수들의 오프셋으로 필요한 값을 계산합니다.
(free_area, free_list)`free_list` 멤버 오프셋입니다. 각 zone의 `free_area[NR_PAGE_ORDERS]` 배열 안에서 free page block 연결 목록을 따라 free page 수를 계산합니다.
(list_head, next|prev)원형 연결 목록을 정의하는 `list_head`의 `next`와 `prev` 오프셋입니다. 사용자 공간 도구의 목록 순회에 필요합니다.
(vmap_area, va_start|list)vmalloc 전용 정보를 담는 `vmap_area` 멤버 오프셋입니다. Makedumpfile이 vmalloc 영역 시작 주소를 얻습니다.
(zone.free_area, NR_PAGE_ORDERS)free area descriptor입니다. 사용자 공간 도구가 `free_area` 범위를 순회하며, `NR_PAGE_ORDERS`는 zone buddy allocator가 사용합니다.

printk 링 버퍼와 페이지 필터

198-340
항목의미와 용도
prb활성 printk ringbuffer(`struct printk_ringbuffer`)를 가리키는 포인터입니다. 크래시 시점에 따라 정적 부팅 링 버퍼나 동적 할당 링 버퍼를 가리키며 커널 로그를 읽는 데 사용합니다.
printk_rb_static정적 부팅 printk 링 버퍼 포인터입니다. `@prb`가 다른 값을 가리키면 동적 링 버퍼에서 덮어쓴 초기 부팅 메시지를 보는 데 유용합니다.
clear_seq마지막 clear 명령 뒤의 `printk()` 레코드 sequence number입니다. `dmesg -c` 같은 `SYSLOG_ACTION_CLEAR` 이후 첫 레코드를 나타내며 dmesg 로그 일부만 덤프할 때 사용합니다.
printk_ringbuffer커널 로그 버퍼의 여러 구성요소에 접근하는 모든 정보를 담는 `printk_ringbuffer` 구조체 크기입니다.
(printk_ringbuffer, desc_ring|text_data_ring|dict_data_ring|fail)구조체 선언 없이 커널 로그 버퍼를 읽도록 printk 링 버퍼 구성요소의 오프셋을 제공합니다.
prb_desc_ring레코드 descriptor 집합 정보를 담는 `prb_desc_ring` 구조체 크기입니다.
(prb_desc_ring, count_bits|descs|head_id|tail_id)구조체 선언 없이 descriptor 집합을 순회하도록 관련 필드 오프셋을 제공합니다.
prb_desc레코드 descriptor 하나의 정보를 담는 `prb_desc` 구조체 크기입니다.
(prb_desc, info|state_var|text_blk_lpos|dict_blk_lpos)구조체 선언 없이 descriptor를 읽도록 단일 레코드 descriptor 필드의 오프셋을 제공합니다.
prb_data_blk_lpostext 또는 dictionary data block이 해당 data ring의 어디에 있는지 담는 `prb_data_blk_lpos` 구조체 크기입니다.
(prb_data_blk_lpos, begin|next)구조체 선언 없이 data block 위치를 찾도록 `begin`과 `next` 필드 오프셋을 제공합니다.
printk_info레코드의 모든 metadata를 담는 `printk_info` 구조체 크기입니다.
(printk_info, seq|ts_nsec|text_len|dict_len|caller_id)구조체 선언 없이 레코드 metadata를 읽도록 관련 필드 오프셋을 제공합니다.
prb_data_ringdata block 집합 정보를 담는 `prb_data_ring` 구조체 크기입니다.
(prb_data_ring, size_bits|data|head_lpos|tail_lpos)구조체 선언 없이 data block 집합에 접근하도록 관련 필드 오프셋을 제공합니다.
atomic_long_t아키텍처별 구현과 관계없이 전체 구조체를 복사할 수 있도록 제공하는 `atomic_long_t` 구조체 크기입니다.
(atomic_long_t, counter)아키텍처별 선언 없이 `atomic_long_t` 변수의 long 값에 접근하는 `counter` 오프셋입니다.
(free_area.free_list, MIGRATE_TYPES)페이지 migrate type의 수입니다. `free_list` 배열을 해석해 free page 수를 계산할 때 사용합니다.
NR_FREE_PAGESLinux 2.6.21 이상에서 `vm_stat[NR_FREE_PAGES]`에 저장되는 free page 수를 얻습니다.
PG_lru|PG_private|PG_swapcache|PG_swapbacked|PG_hwpoison|PG_head_mask덤프에 불필요한 여러 페이지를 필터링하는 page attribute 플래그입니다.
PAGE_SLAB_MAPCOUNT_VALUE|PAGE_BUDDY_MAPCOUNT_VALUE|PAGE_OFFLINE_MAPCOUNT_VALUE|PAGE_HUGETLB_MAPCOUNT_VALUE|PAGE_UNACCEPTED_MAPCOUNT_VALUE덤프에 불필요한 페이지를 더 세밀하게 필터링하는 추가 page attribute 값입니다.

x86_64 항목

341-404
항목의미와 용도
phys_base내보낸 커널 심벌의 가상 주소를 대응 물리 주소로 변환합니다.
init_top_pgt전체 페이지 테이블을 순회해 가상 주소를 물리 주소로 변환합니다. `swapper_pg_dir`와 비슷하지만 x86_64에서만 사용합니다.
pgtable_l5_enabled크래시한 커널이 5-level paging 모드였는지 사용자 공간 도구에 알립니다.
node_data모든 NUMA 노드 정보를 저장하는 `struct pglist_data` 배열입니다. Makedumpfile이 여기서 `pglist_data`를 얻습니다.
(node_data, MAX_NUMNODES)시스템이 지원하는 최대 노드 수입니다.
KERNELOFFSET커널 randomization 오프셋입니다. page offset 계산에 사용하며 KASLR이 꺼져 있으면 0입니다.
KERNEL_IMAGE_SIZE현재 Makedumpfile은 사용하지 않습니다. Crash가 모듈 가상 주소를 계산할 때 사용합니다.
sme_maskSME를 지원하는 AMD 시스템의 secure memory encryption mask입니다. 첫 번째 커널에서 SME가 켜졌다면 crash kernel의 `pgd`/`pud`/`pmd`/`pte`에 암호화 mask가 들어 있으므로, 이를 제거해 실제 물리 주소를 구합니다. 현재는 C-bit 위치를 저장하며 필요하면 다른 SME 정보도 함께 담을 수 있습니다.
sme_mask 64비트 배치
비트 구간필드역할
63..48misc기타 상위 비트
47enc bit메모리 암호화 C-bit 위치
46..0other misc SME info추가 SME 관련 정보

원문의 ASCII 비트 그림을 같은 의미의 필드 표로 재구성했습니다. bit 47 부근의 C-bit가 암호화 여부를 표시하고 나머지 비트는 기타 SME 정보에 사용할 수 있습니다.

x86_32 항목

405-415
항목의미와 용도
X86_PAEPhysical Address Extension 활성화 여부입니다. PAE는 페이지 테이블 조회 비용과 프로세스별 페이지 테이블 공간을 늘립니다. 크래시 커널의 가상 주소를 물리 주소로 변환할 때 PAE 사용 여부를 확인합니다.

ARM64 항목

416-468
항목의미와 용도
VA_BITS가상 주소의 최대 비트 수이며 가상 메모리 범위 계산에 사용합니다.
kimage_voffset커널 가상 mapping과 물리 mapping 사이의 오프셋이며 가상 주소를 물리 주소로 변환합니다.
PHYS_OFFSET메모리 시작 물리 주소입니다. 가상 주소를 물리 주소로 바꾸는 `kimage_voffset`과 비슷한 역할을 합니다.
KERNELOFFSET커널 randomization 오프셋입니다. page offset 계산에 사용하며 KASLR이 꺼져 있으면 0입니다.
KERNELPACMASK커널 가상 주소에서 Pointer Authentication Code를 추출하는 mask입니다.
TCR_EL1.T1SZ`TTBR1_EL1`이 주소 지정하는 메모리 영역의 크기 오프셋입니다. 영역 크기는 `2^(64-T1SZ)`바이트입니다. `TTBR1_EL1`은 ARMv8-A가 정의한 table base address register로 상위 VA 범위의 page table 조회에 사용합니다.
MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END`MODULES_VADDR`~`MODULES_END-1`은 커널 모듈 공간, `VMALLOC_START`~`VMALLOC_END-1`은 `vmalloc()`/`ioremap()` 공간, `VMEMMAP_START`~`VMEMMAP_END-1`은 `struct page` 배열용 vmemmap 영역입니다.

arm 항목

469-477
항목의미와 용도
ARM_LPAE크래시 커널이 Large Physical Address Extension을 지원하는지 나타내며 가상 주소를 물리 주소로 변환할 때 사용합니다.

s390 항목

478-496
항목의미와 용도
lowcore_ptr각 CPU의 lowcore를 가리키는 포인터 배열입니다. PSW와 모든 레지스터 정보를 출력할 때 사용합니다.
high_memory`high_memory` 심벌에서 `vmalloc_start` 주소를 얻는 데 사용합니다.
(lowcore_ptr, NR_CPUS)지원하는 최대 CPU 수입니다.

powerpc 항목

497-549
항목의미와 용도
node_data|(node_data, MAX_NUMNODES)앞의 공통·x86_64 설명과 같이 NUMA 노드 정보와 시스템 최대 노드 수를 제공합니다.
contig_page_data앞의 공통 설명과 같이 메모리 배치를 설명하는 `pglist_data`를 얻고 free page를 제외할 때 사용합니다.
vmemmap_list전체 vmemmap 물리 mapping을 유지합니다. vmemmap 목록 수와 채워진 영역 정보를 얻으며, crash kernel에 변환 정보가 있으면 vmemmap 커널 가상 주소를 물리 주소로 바꿉니다.
mmu_vmemmap_psize페이지 크기이며 가상 주소를 물리 주소로 변환할 때 사용합니다.
mmu_psize_defs4k, 64k, 16M 같은 페이지 크기 정의이며 vtop 변환에 사용합니다.
vmemmap_backing|(vmemmap_backing, list)|(vmemmap_backing, phys)|(vmemmap_backing, virt_addr)vmemmap 가상 주소 공간은 물리 mapping을 추적하는 전통적 페이지 테이블이 없고 단순 연결 목록을 사용합니다. 사용자 공간 도구는 vmemmap 영역 수를 계산하려고 `list`, `phys`, `virt_addr` 오프셋을 사용합니다.
mmu_psize_def|(mmu_psize_def, shift)`struct mmu_psize_def`의 크기와 `shift` 멤버 오프셋이며 vtop 변환에 사용합니다.

sh 항목

550-562
항목의미와 용도
node_data|(node_data, MAX_NUMNODES)앞에서 설명한 NUMA 노드 정보와 최대 노드 수를 제공합니다.
X2TLB크래시한 커널이 SH extended mode를 활성화했는지 나타냅니다.

RISCV64 항목

563-596
항목의미와 용도
VA_BITS가상 주소의 최대 비트 수이며 가상 메모리 범위 계산에 사용합니다.
PAGE_OFFSETdirect-mapped RAM 영역의 가상 커널 시작 주소를 나타냅니다.
phys_ram_base물리 RAM의 시작 주소를 나타냅니다.
MODULES_VADDR|MODULES_END|VMALLOC_START|VMALLOC_END|VMEMMAP_START|VMEMMAP_END|KERNEL_LINK_ADDR`MODULES_VADDR`~`MODULES_END`는 커널 모듈 공간, `VMALLOC_START`~`VMALLOC_END`는 `vmalloc()`/`ioremap()` 공간, `VMEMMAP_START`~`VMEMMAP_END`는 `struct page` 배열용 vmemmap 공간입니다. `KERNEL_LINK_ADDR`은 Kernel link와 BPF의 시작 주소입니다.
va_kernel_pa_offset커널 가상 mapping과 물리 mapping 사이의 오프셋이며 가상 주소를 물리 주소로 변환합니다.