Hi folks,
I'm going to make crash coredump support pmem region. So
I have modified kexec-tools to add pmem region to PT_LOAD of vmcore.
But it failed at makedumpfile, log are as following:
In my environment, i found the last 512 pages in pmem region will cause the
error.
qemu commandline:
-object
memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/root/qemu-dax.img,share=yes,size=4267704320,align=2097152
-device nvdimm,node=0,label-size=4194304,memdev=memnvdimm0,id=nvdimm0,slot=0
ndctl info:
[root@rdma-server ~]# ndctl list
[
{
"dev":"namespace0.0",
"mode":"devdax",
"map":"dev",
"size":4127195136,
"uuid":"f6fc1e86-ac5b-48d8-9cda-4888a33158f9",
"chardev":"dax0.0",
"align":4096
}
]
[root@rdma-server ~]# ndctl list -iRD
{
"dimms":[
{
"dev":"nmem0",
"id":"8680-56341200",
"handle":1,
"phys_id":0
}
],
"regions":[
{
"dev":"region0",
"size":4263510016,
"align":16777216,
"available_size":0,
"max_available_extent":0,
"type":"pmem",
"iset_id":10248187106440278,
"mappings":[
{
"dimm":"nmem0",
"offset":0,
"length":4263510016,
"position":0
}
],
"persistence_domain":"unknown"
}
]
}
iomem info:
[root@rdma-server ~]# cat /proc/iomem | grep Persi
140000000-23e1fffff : Persistent Memory
makedumpfile info:
[ 57.229110] kdump.sh[240]: mem_map[ 71] ffffea0008e00000 238000
23e200
Firstly, i wonder that
1) makedumpfile read the whole range of iomem(same with the PT_LOAD of pmem)
2) 1st kernel side only setup mem_map(vmemmap) for this namespace, which size
is 512 pages smaller than iomem for some reasons.
3) Since there is an align in nvdimm region(16MiB in above), i also guess the
maximum size of the pmem can used by user should
be ALIGN(iomem, 10MiB), after this alignment, the last 512 pages will be
dropped. then kernel only setups vmemmap for this
range. but i didn't see any code doing such things in kernel side.
So if you guy know the reasons, please let me know :), any hint/feedback is
very welcome.
--------------------------------
[ 56.380802] kdump.sh[240]: OFFSET(atomic_long_t.counter)=0
[ 56.385976] kdump.sh[240]: SIZE(latched_seq)=64
[ 56.390217] kdump.sh[240]: OFFSET(latched_seq.val)=48
[ 56.395750] kdump.sh[240]: LENGTH(free_area.free_list)=5
[ 56.401295] kdump.sh[240]: NUMBER(NR_FREE_PAGES)=0
[ 56.406772] kdump.sh[240]: NUMBER(PG_lru)=4
[ 56.408783] kdump.sh[240]: NUMBER(PG_private)=13
[ 56.415401] kdump.sh[240]: NUMBER(PG_swapcache)=10
[ 56.421269] kdump.sh[240]: NUMBER(PG_swapbacked)=19
[ 56.426797] kdump.sh[240]: NUMBER(PG_slab)=9
[ 56.428911] kdump.sh[240]: NUMBER(PG_head_mask)=65536
[ 56.435175] kdump.sh[240]: NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE)=-129
[ 56.437522] kdump.sh[240]: NUMBER(HUGETLB_PAGE_DTOR)=2
[ 56.442233] kdump.sh[240]: NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE)=-257
[ 56.446943] kdump.sh[240]: SYMBOL(kallsyms_names)=ffffffff9e5eb9b0
[ 56.452486] kdump.sh[240]: SYMBOL(kallsyms_num_syms)=ffffffff9e5eb9a8
[ 56.458891] kdump.sh[240]: SYMBOL(kallsyms_token_table)=ffffffff9e76e038
Excluding unnecessary pages : [ 2.7 %] \
__vtop4_x86_64: Can't get a valid pte.
[ 56.476355] kdump.sh[240]: readmem: Can't convert a virtual
address(ffffea0008f80000) to physical address.
[ 56.483192] kdump.sh[240]: readmem: type_addr: 0, addr:ffffea0008f80000,
size:32768
[ 56.489350] kdump.sh[240]: __exclude_unnecessary_pages: Can't read the
buffer of struct page.
[ 56.494516] kdump.sh[240]: create_2nd_bitmap: Can't exclude unnecessary
pages.
[ 56.501427] kdump[242]: saving vmcore failed, _exitcode:1
[ 56.506871] kdump.sh[240]: SYMBOL(kallsyms_token_index)=ffffffff9e76e3e8
[ 56.511820] kdump.sh[240]: SYMBOL(kallsyms_offsets)=ffffffff9e574240
[ 56.516816] kdump.sh[240]: SYMBOL(kallsyms_relative_base)=ffffffff9e5eb9a0
[ 56.522270] kdump.sh[240]: NUMBER(phys_base)=4330618880
[ 56.526372] kdump.sh[240]: SYMBOL(init_top_pgt)=ffffffff9ea26000
[ 56.531827] kdump.sh[240]: NUMBER(pgtable_l5_enabled)=0
[ 56.535773] kdump.sh[240]: SYMBOL(node_data)=ffffffff9f2829a0
[ 56.540830] kdump.sh[240]: LENGTH(node_data)=64
[ 56.545405] kdump.sh[240]: KERNELOFFSET=1b400000
[ 56.549841] kdump.sh[240]: NUMBER(KERNEL_IMAGE_SIZE)=1073741824
[ 56.554862] kdump.sh[240]: NUMBER(sme_mask)=0
[ 56.558820] kdump.sh[240]: CRASHTIME=1669635006
[ 56.562812] kdump.sh[240]: phys_base : 102200000 (vmcoreinfo)
[ 56.567343] kdump.sh[240]: max_mapnr : 23e200
[ 56.572837] kdump.sh[240]: There is enough free memory to be done in one
cycle.
[ 56.577843] kdump.sh[240]: Buffer size for the cyclic mode: 587904
[ 56.582390] kdump.sh[240]: The kernel version is not supported.
[ 56.590812] kdump.sh[240]: The makedumpfile operation may be incomplete.
[ 56.593489] kdump.sh[240]: page_offset : ffff888000000000 (pt_load)
[ 56.599405] kdump.sh[240]: num of NODEs : 1
[ 56.601457] kdump.sh[240]: Memory type : SPARSEMEM_EX
[ 56.605806] kdump.sh[240]: mem_map pfn_start
pfn_end
[ 56.611275] kdump.sh[240]: mem_map[ 0] ffffea0000000000 0
8000
[ 56.619601] kdump.sh[240]: mem_map[ 1] ffffea0000200000 8000
10000
[ 56.626356] kdump.sh[240]: mem_map[ 2] ffffea0000400000 10000
18000
[ 56.631342] kdump.sh[240]: mem_map[ 3] ffffea0000600000 18000
20000
[ 56.636392] kdump.sh[240]: mem_map[ 4] ffffea0000800000 20000
28000
[ 56.642359] kdump.sh[240]: mem_map[ 5] ffffea0000a00000 28000
30000
[ 56.649430] kdump.sh[240]: mem_map[ 6] ffffea0000c00000 30000
38000
[ 56.656364] kdump.sh[240]: mem_map[ 7] ffffea0000e00000 38000
40000
[ 56.659915] kdump.sh[240]: mem_map[ 8] ffffea0001000000 40000
48000
[ 56.666405] kdump.sh[240]: mem_map[ 9] ffffea0001200000 48000
50000
[ 56.671485] kdump.sh[240]: mem_map[ 10] ffffea0001400000 50000
58000
[ 56.678435] kdump.sh[240]: mem_map[ 11] ffffea0001600000 58000
60000
[...skip...]
[ OK ] Closed udev Control Socket.
[ 57.075801] kdump.sh[240]: mem_map[ 53] ffffea0006a00000 1a8000
1b0000
[ 57.479463] systemd[1]: systemd-udevd-kernel.socket: Deactivated
successfully.
[ 57.088368] kdump.sh[240]: mem_map[ 54] ffffea0006c00000 1b0000
1b8000
[ 57.094242] kdump.sh[240]: mem_map[ 55] ffffea0006e00000 1b8000
1c0000
[ OK ] Closed udev Kernel Socket.
[ 57.500084] systemd[1]: systemd-tmpfiles-setup-dev.service: Deactivated
successfully.
[ 57.101694] kdump.sh[240]: mem_map[ 56] ffffea0007000000 1c0000
1c8000
[ 57.113148] kdump.sh[240]: mem_map[ 57] ffffea0007200000 1c8000
1d0000
[ 57.120456] kdump.sh[240]: mem_map[ 58] ffffea0007400000 1d0000
1d8000
[ OK ] Stopped Create Static Device Nodes in /dev.
[ 57.128022] kdump.sh[240]: mem_map[ 59] ffffea0007600000 1d8000
1e0000
[ 57.136194] kdump.sh[240]: mem_map[ 60] ffffea0007800000 1e0000
1e8000
[ 57.146275] kdump.sh[240]: mem_map[ 61] ffffea0007a00000 1e8000
1f0000
[ 57.153289] kdump.sh[240]: mem_map[ 62] ffffea0007c00000 1f0000
1f8000
[ 57.165975] kdump.sh[240]: mem_map[ 63] ffffea0007e00000 1f8000
200000
[ 57.178271] kdump.sh[240]: mem_map[ 64] ffffea0008000000 200000
208000
[ OK ] Unmounted /sysroot.
[ 57.189515] kdump.sh[240]: mem_map[ 65] ffffea0008200000 208000
210000
[ 57.195177] kdump.sh[240]: mem_map[ 66] ffffea0008400000 210000
218000
[ 57.202848] kdump.sh[240]: mem_map[ 67] ffffea0008600000 218000
220000
[ 57.211403] kdump.sh[240]: mem_map[ 68] ffffea0008800000 220000
228000
[ 57.220052] kdump.sh[240]: mem_map[ 69] ffffea0008a00000 228000
230000
[ 57.224179] kdump.sh[240]: mem_map[ 70] ffffea0008c00000 230000
238000
[ 57.229110] kdump.sh[240]: mem_map[ 71] ffffea0008e00000 238000
23e200
[ 57.237287] kdump.sh[240]: mmap() is available on the kernel.
[ 57.243230] kdump.sh[240]: makedumpfile Failed.
[ 57.246415] systemd[1]: kdump-capture.service: Failed with result
'exit-code'.
[ 57.255054] kdump[264]: Kdump is using the default log level(3).
[ 57.262390] systemd[1]: Failed to start Kdump Vmcore Save Service.
Thanks
Zhijian