[Crash-utility] [RFC] makedumpfile, crash: LZO compression support
HATAYAMA Daisuke
d.hatayama at jp.fujitsu.com
Fri Nov 18 06:54:39 UTC 2011
Hello Dave,
From: Dave Anderson <anderson at redhat.com>
Subject: Re: [Crash-utility] [RFC] makedumpfile, crash: LZO compression support
Date: Thu, 17 Nov 2011 13:25:31 -0500 (EST)
>
>
> ----- Original Message -----
>> Hello,
>>
>> This is a RFC patch set that adds LZO compression support to
>> makedumpfile and crash utility. LZO is as good as in size but by far
>> better in speed than ZLIB, leading to reducing down time during
>> generation of crash dump and refiltering.
>>
>> How to build:
>>
>> 1. Get LZO library, which is provided as lzo-devel package on recent
>> linux distributions, and is also available on author's website:
>> http://www.oberhumer.com/opensource/lzo/.
>>
>> 2. Apply the patch set to makedumpfile v1.4.0 and crash v6.0.0.
>>
>> 3. Build both using make. But for crash, do the following now:
>>
>> $ make CFLAGS="-llzo2"
>>
>> How to use:
>>
>> I've newly used -l option for lzo compression in this patch. So for
>> example, do as follows:
>>
>> $ makedumpfile -l vmcore dumpfile
>> $ crash vmlinux dumpfile
>>
>> Request of configure-like feature for crash utility:
>>
>> I would like configure-like feature on crash utility for users to
>> select wheather to add LZO feature actually or not in build-time,
>> that is: ./configure --enable-lzo or ./configure --disable-lzo.
>>
>> The reason is that support staff often downloads and installs the
>> latest version of crash utility on machines where lzo library is not
>> provided.
>
> Right, at least on Fedora, these three packages would need to be installed:
>
> lzo-2.06-1.fc15.x86_64
> lzo-minilzo-2.06-1.fc15.x86_64
> lzo-devel-2.06-1.fc15.x86_64
>
>>
>> Looking at the source code, it looks to me that crash does some kind
>> of configuration processing in a local manner, around configure.c,
>> and I guess it's difficult to use autoconf tools directly.
>>
>> Or is there another better way?
>
> Instead of using CFLAGS, it would be preferable to dynamically append "-llzo2" to
> the string that the gdb_merge stanza in the Makefile writes to the "mergelibs"
> file here:
>
> gdb_merge: force
> @if [ ! -f ${GDB}/README ]; then \
> make --no-print-directory gdb_unzip; fi
> ===> @echo "${LDFLAGS} -lz -ldl -rdynamic" > ${GDB}/gdb/mergelibs
> @echo "../../${PROGRAM} ../../${PROGRAM}lib.a" > ${GDB}/gdb/mergeobj
> @if [ ! -f ${GDB}/config.status ]; then \
> (cd ${GDB}; ./configure ${GDB_CONF_FLAGS} --with-separate-debug-dir=/usr/lib/debug \
> --with-bugurl="" --with-expat=no --with-python=no; \
> make --no-print-directory; echo ${TARGET} > crash.target) \
> else (cd ${GDB}/gdb; make --no-print-directory;); fi
> @if [ ! -f ${GDB}/gdb/libgdb.a ]; then \
> echo; echo "gdb build failed: ${GDB}/gdb/libgdb.a does not exist"; \
> echo; exit 1; fi
>
> It also requires an additional #define so that the #include line in defs.h
> and the calls to lzo_init() and lzo1x_decompress_safe() in diskdump.c can
> be encapsulated, i.e., something like:
>
> #ifdef LZO
> #include <lzo/lzo1x.h>
> #endif
>
> #ifdef LZO
> dd->lzo_supported = lzo_init() == LZO_E_OK;
> #endif
>
> #ifdef LZO
> ret = lzo1x_decompress_safe(dd->compressed_page, pd.size,
> dd->page_cache_hdr[i].pg_bufptr,
> &retlen, LZO1X_MEM_DECOMPRESS);
> #endif
>
> The -DLZO would only need to be passed to the diskump.c compile line.
>
> This could involve configure.c, but conceivably it could all be done within the
> Makefile itself. For example, by entering something like "make compress=lzo2",
> and then adding this to the Makefile:
>
> ifneq ($(compress),)
> ifeq ($(compress), lzo2)
> LZOFLAG=-DLZO
> LZOLIB=-llzo2
> endif
> endif
>
> And then the diskdump.c compile line could use ${LZOFLAG}, and the
> gdb_merge stanza could include ${LZOLIB}.
>
Thanks for accepting the request and for detailed instructions.
I'll reflect these configuration logic in the next patch.
Thanks.
HATAYAMA, Daisuke
More information about the Crash-utility
mailing list