[Crash-utility] 答复: [External Mail]Re: zram decompress support for gcore/crash-utility
Dave Anderson
anderson at redhat.com
Thu Apr 2 16:16:10 UTC 2020
----- Original Message -----
> Hi,Dave & hatayama
>
> I made two patchs in crash-utility and gcore to support zram decompress
> 1.In crash-utility,I add patch in readmem to support zram decompression,
> readmem interface automatically recognizes and decompresses zram data.
> There are some limitations to zram support,only support lzo decompress,kernel
> support lzo,lz4,lz4hc,842,zstd,but lzo is default.
>
> use "rd" command also read data even if mapping to zram
> [without patch]
> crash> rd 144fc000 2
> rd: invalid user virtual address: 144fc000 type: "64-bit UVADDR"
> [with patch]
> crash> rd 144fc000 2
> 144fc000: 06ecdc6b06ecb280 06f027f906eebebe ....k........'..
With respect to the crash utility patch:
Apparently you wrote this patch to only support ARM64? Here's what happens on an x86_64:
$ patch -p1 < $bos/0001-support-zram-decompress-in-readmem.patch
patching file defs.h
Hunk #5 succeeded at 5304 (offset 2 lines).
patching file memory.c
$ make warn
... [ cut ] ...
cc -c -g -DX86_64 -DLZO -DSNAPPY -DGDB_7_6 memory.c -Wall -O2 -Wstrict-prototypes -Wmissing-prototypes -fstack-protector -Wformat-security
In file included from memory.c:19:0:
memory.c: In function 'zram_object_addr':
defs.h:5310:27: error: 'PHYS_MASK_SHIFT' undeclared (first use in this function)
#define _PFN_BITS (PHYS_MASK_SHIFT - PAGESHIFT())
^
defs.h:5311:43: note: in expansion of macro '_PFN_BITS'
#define OBJ_INDEX_BITS (BITS_PER_LONG - _PFN_BITS - OBJ_TAG_BITS)
^
memory.c:19838:27: note: in expansion of macro 'OBJ_INDEX_BITS'
page = pfn_to_map(obj >> OBJ_INDEX_BITS);
^
defs.h:5310:27: note: each undeclared identifier is reported only once for each function it appears in
#define _PFN_BITS (PHYS_MASK_SHIFT - PAGESHIFT())
^
defs.h:5311:43: note: in expansion of macro '_PFN_BITS'
#define OBJ_INDEX_BITS (BITS_PER_LONG - _PFN_BITS - OBJ_TAG_BITS)
^
memory.c:19838:27: note: in expansion of macro 'OBJ_INDEX_BITS'
page = pfn_to_map(obj >> OBJ_INDEX_BITS);
^
memory.c: In function 'try_zram_decompress':
memory.c:19940:16: error: 'PTE_VALID' undeclared (first use in this function)
if (pte_val & PTE_VALID)
^
memory.c:19932:8: warning: unused variable 'ret' [-Wunused-variable]
ulong ret = 0;
^
make[4]: *** [memory.o] Error 1
make[3]: *** [gdb] Error 2
make[2]: *** [rebuild] Error 2
make[1]: *** [gdb_merge] Error 2
make: *** [warn] Error 2
$
So that's a non-starter. If it can't be made architecture-neutral, then at
least the other major architectures need to be supported. At a minimum all
architectures need to be able to be compiled with LZO enabled.
If you can do that, other suggestions I have for the patch are:
(1) Move all the new offset_table entries to the end of the structure to prevent
the breakage of previously-compiled extension modules that use OFFSET().
(2) Move the new LZO specific functions to diskdump.c, which is the only C file
that is set up to deal with LZO being #define'd on the fly with "make lzo".
(3) Create a dummy try_zram_decompress() function in diskdump.c that just
returns 0. Put it outside of the LZO function block, e.g.:
#ifdef LZO
zram_object_addr(args... )
...
lookup_swap_cache(args...)
...
try_zram_decompress(args...)
...
#else
try_zram_decompress(args...) { return 0; }
#endif
Alternatively, you could create a try_zram_decompress() macro in defs.h the same way.
(4) Remove the #ifdef/#endif LZO section of readmem().
(5) PLEASE do not make all the white-space changes in memory.c. It's annoying
to have to review the patch when it's cluttered with changes that are
irrelevant to the task at hand.
Thanks,
Dave
>
> 2.In gcore, I have to make a small change ,change parameter of readmem from
> PHYADDR to UVADDR, other work will be done by crash
>
> Please help review.
> Thanks
>
> -----邮件原件-----
> 发件人: Dave Anderson <anderson at redhat.com>
> 发送时间: 2020年4月2日 0:29
> 收件人: 赵乾利 <zhaoqianli at xiaomi.com>
> 抄送: d hatayama <d.hatayama at fujitsu.com>; Discussion list for crash utility
> usage, maintenance and development <crash-utility at redhat.com>
> 主题: Re: [External Mail]Re: [Crash-utility] zram decompress support for
> gcore/crash-utility
>
>
>
> ----- Original Message -----
> > Hi,Dave
> > Zram is a virtual device,it simulated as a block device,it's part of
> > memroy/ramdump,just enable CONFIG_ZRAM,no other settings needed.
> > you can refer to drivers/block/zram/zram_drv.c driver calling
> > zram_meta_alloc to alloc memory from RAM.
> >
> > We want to be able to access these zram page like a normal page.
>
> I understand all that. I'm just curious how makedumpfile will handle/filter
> the physical RAM pages that make up the zram block device.
>
> Anyway, send a patch and I'll take a look.
>
> Dave
>
>
> >
> > ________________________________________
> > From: Dave Anderson <anderson at redhat.com>
> > Sent: Wednesday, April 1, 2020 23:24
> > To: 赵乾利
> > Cc: d hatayama; Discussion list for crash utility usage, maintenance
> > and development
> > Subject: Re: [External Mail]Re: [Crash-utility] zram decompress
> > support for gcore/crash-utility
> >
> > ----- Original Message -----
> > > Hi,Dave
> > > zram is same with other swap device,but every swaped page will be
> > > compressed then saved to another memory address.
> > > The process is same with the common swap device,non-swap just a
> > > normal user address,pgd and mmu will translate to phy address
> > >
> > > please refer to below information:
> > > crash> vm -p
> > > PID: 1565 TASK: ffffffe1fce32d00 CPU: 7 COMMAND: "system_server"
> > > MM PGD RSS TOTAL_VM
> > > ffffffe264431c00 ffffffe1f54ad000 528472k 9780384k
> > > VMA START END FLAGS FILE
> > > ffffffe0ea401300 12c00000 12e00000 100073
> > > VIRTUAL PHYSICAL
> > > ...
> > > 144fc000 SWAP: /dev/block/zram0 OFFSET: 236750
> > > ...
> > > 1738e000 SWAP: /dev/block/zram0 OFFSET: 73426
> > > 1738f000 21aa2c000
> > > 17390000 1c3308000
> > > 17391000 SWAP: /dev/block/zram0 OFFSET: 73431
> > > 17392000 19c162000
> > > 17393000 19c132000
> > > 17394000 SWAP: /dev/block/zram0 OFFSET: 234576
> > > 17395000 19c369000
> > > 17396000 20b35c000
> > > 17397000 18011e000
> > > 17398000 SWAP: /dev/block/zram0 OFFSET: 73433
> > > 17399000 1dc3d2000
> > > 1739a000 1bc59f000
> > > 1739b000 SWAP: /dev/block/zram0 OFFSET: 73437
> > >
> > >
> > > crash> vtop -c 1565 144fc000
> > > VIRTUAL PHYSICAL
> > > 144fc000 (not mapped)
> > >
> > > PAGE DIRECTORY: ffffffe1f54ad000
> > > PGD: ffffffe1f54ad000 => 1f54ab003
> > > PMD: ffffffe1f54ab510 => 1f43b8003
> > > PTE: ffffffe1f43b87e0 => 39cce00
> > >
> > > PTE SWAP OFFSET
> > > 39cce00 /dev/block/zram0 236750
> > >
> > > VMA START END FLAGS FILE
> > > ffffffe148bafe40 144c0000 14540000 100073
> > >
> > > SWAP: /dev/block/zram0 OFFSET: 236750
> >
> > Ok, so with respect to user-space virtual addresses, there is nothing
> > other than handling zram swap-backed memory.
> >
> > So what you're proposing is that when reading user-space memory that
> > happens to be backed-up on a zram swap device, then the user data
> > could alternatively be read from the zram swap device, and presented
> > as if it were present in physical memory?
> >
> > Are the physical RAM pages that make up the contents of a zram device
> > collected with a typical filtered compressed kdump? If not, what
> > makedumpfile -d flag is required for them to be captured?
> >
> > Dave
> >
> >
> > #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部
> > 或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
> > This e-mail and its attachments contain confidential information from
> > XIAOMI, which is intended only for the person or entity whose address
> > is listed above. Any use of the information contained herein in any
> > way (including, but not limited to, total or partial disclosure,
> > reproduction, or dissemination) by persons other than the intended
> > recipient(s) is prohibited. If you receive this e-mail in error,
> > please notify the sender by phone or email immediately and delete
> > it!******/#
> >
>
> #/******本邮件及其附件含有小米公司的保密信息,仅限于发送给上面地址中列出的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本邮件!
> This e-mail and its attachments contain confidential information from
> XIAOMI, which is intended only for the person or entity whose address is
> listed above. Any use of the information contained herein in any way
> (including, but not limited to, total or partial disclosure, reproduction,
> or dissemination) by persons other than the intended recipient(s) is
> prohibited. If you receive this e-mail in error, please notify the sender by
> phone or email immediately and delete it!******/#
>
More information about the Crash-utility
mailing list