diff mbox series

[v2,3/4] configure: add qpl option

Message ID 20231109154638.488213-4-yuan1.liu@intel.com (mailing list archive)
State New, archived
Headers show
Series Live Migration Acceleration with IAA Compression | expand

Commit Message

Yuan Liu Nov. 9, 2023, 3:46 p.m. UTC
the Query Processing Library (QPL) is an open-source library that
supports data compression and decompression features.

add --enable-qpl and --disable-qpl options to enable and disable
the QPL compression accelerator. The QPL compression accelerator
can accelerate the Zlib compression algorithm during the live migration.

Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
---
 meson.build                   | 7 +++++++
 meson_options.txt             | 2 ++
 scripts/meson-buildoptions.sh | 3 +++
 3 files changed, 12 insertions(+)

--
2.39.3

Comments

Fabiano Rosas Dec. 1, 2023, 5:44 p.m. UTC | #1
Yuan Liu <yuan1.liu@intel.com> writes:

> the Query Processing Library (QPL) is an open-source library that
> supports data compression and decompression features.
>
> add --enable-qpl and --disable-qpl options to enable and disable
> the QPL compression accelerator. The QPL compression accelerator
> can accelerate the Zlib compression algorithm during the live migration.
>
> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> ---
>  meson.build                   | 7 +++++++
>  meson_options.txt             | 2 ++
>  scripts/meson-buildoptions.sh | 3 +++
>  3 files changed, 12 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index 259dc5f308..b4ba30b4fa 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1032,6 +1032,11 @@ if not get_option('zstd').auto() or have_block
>                      required: get_option('zstd'),
>                      method: 'pkg-config')
>  endif
> +qpl = not_found
> +if not get_option('qpl').auto()
> +    qpl = dependency('libqpl', required: get_option('qpl'),
> +                     method: 'pkg-config')
> +endif

Hm.. I'm not having success with pkg-config:

../meson.build:1043:10: ERROR: Dependency "libqpl" not found, tried
pkgconfig

It seems it doesn't find the static library. I had to use this instead:

qpl = declare_dependency(dependencies: cc.find_library('qpl',
                         required: get_option('qpl')))

What am I missing here?

>  virgl = not_found
>
>  have_vhost_user_gpu = have_tools and targetos == 'linux' and pixman.found()
> @@ -2165,6 +2170,7 @@ config_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim)
>  config_host_data.set('CONFIG_STATX', has_statx)
>  config_host_data.set('CONFIG_STATX_MNT_ID', has_statx_mnt_id)
>  config_host_data.set('CONFIG_ZSTD', zstd.found())
> +config_host_data.set('CONFIG_QPL', qpl.found())
>  config_host_data.set('CONFIG_FUSE', fuse.found())
>  config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
>  config_host_data.set('CONFIG_SPICE_PROTOCOL', spice_protocol.found())
> @@ -4325,6 +4331,7 @@ summary_info += {'snappy support':    snappy}
>  summary_info += {'bzip2 support':     libbzip2}
>  summary_info += {'lzfse support':     liblzfse}
>  summary_info += {'zstd support':      zstd}
> +summary_info += {'Query Processing Library support': qpl}
>  summary_info += {'NUMA host support': numa}
>  summary_info += {'capstone':          capstone}
>  summary_info += {'libpmem support':   libpmem}
> diff --git a/meson_options.txt b/meson_options.txt
> index 3c7398f3c6..71cd533985 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -255,6 +255,8 @@ option('xkbcommon', type : 'feature', value : 'auto',
>         description: 'xkbcommon support')
>  option('zstd', type : 'feature', value : 'auto',
>         description: 'zstd compression support')
> +option('qpl', type : 'feature', value : 'auto',
> +       description: 'Query Processing Library support')
>  option('fuse', type: 'feature', value: 'auto',
>         description: 'FUSE block device export')
>  option('fuse_lseek', type : 'feature', value : 'auto',
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 7ca4b77eae..0909d1d517 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -220,6 +220,7 @@ meson_options_help() {
>    printf "%s\n" '                  Xen PCI passthrough support'
>    printf "%s\n" '  xkbcommon       xkbcommon support'
>    printf "%s\n" '  zstd            zstd compression support'
> +  printf "%s\n" '  qpl             Query Processing Library support'
>  }
>  _meson_option_parse() {
>    case $1 in
> @@ -556,6 +557,8 @@ _meson_option_parse() {
>      --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
>      --enable-zstd) printf "%s" -Dzstd=enabled ;;
>      --disable-zstd) printf "%s" -Dzstd=disabled ;;
> +    --enable-qpl) printf "%s" -Dqpl=enabled ;;
> +    --disable-qpl) printf "%s" -Dqpl=disabled ;;
>      *) return 1 ;;
>    esac
>  }
> --
> 2.39.3
Yuan Liu Dec. 4, 2023, 6:57 a.m. UTC | #2
> -----Original Message-----
> From: Fabiano Rosas <farosas@suse.de>
> Sent: Saturday, December 2, 2023 1:45 AM
> To: Liu, Yuan1 <yuan1.liu@intel.com>; quintela@redhat.com;
> peterx@redhat.com; leobras@redhat.com
> Cc: qemu-devel@nongnu.org; Liu, Yuan1 <yuan1.liu@intel.com>; Zou, Nanhai
> <nanhai.zou@intel.com>
> Subject: Re: [PATCH v2 3/4] configure: add qpl option
> 
> Yuan Liu <yuan1.liu@intel.com> writes:
> 
> > the Query Processing Library (QPL) is an open-source library that
> > supports data compression and decompression features.
> >
> > add --enable-qpl and --disable-qpl options to enable and disable the
> > QPL compression accelerator. The QPL compression accelerator can
> > accelerate the Zlib compression algorithm during the live migration.
> >
> > Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> > Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> > ---
> >  meson.build                   | 7 +++++++
> >  meson_options.txt             | 2 ++
> >  scripts/meson-buildoptions.sh | 3 +++
> >  3 files changed, 12 insertions(+)
> >
> > diff --git a/meson.build b/meson.build index 259dc5f308..b4ba30b4fa
> > 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -1032,6 +1032,11 @@ if not get_option('zstd').auto() or have_block
> >                      required: get_option('zstd'),
> >                      method: 'pkg-config')  endif
> > +qpl = not_found
> > +if not get_option('qpl').auto()
> > +    qpl = dependency('libqpl', required: get_option('qpl'),
> > +                     method: 'pkg-config') endif
> 
> Hm.. I'm not having success with pkg-config:
> 
> ../meson.build:1043:10: ERROR: Dependency "libqpl" not found, tried
> pkgconfig
> 
> It seems it doesn't find the static library. I had to use this instead:
> 
> qpl = declare_dependency(dependencies: cc.find_library('qpl',
>                          required: get_option('qpl')))
> 
> What am I missing here?
Sorry about this, the QPL repo(https://github.com/intel/qpl) does not yet support libqpl pkg-config file, we are in the process of adding this functionality and we hope to resolve libqpl's dependencies through pkg-config file.
I will explicitly address this issue and provide relevant documentation in the next version.

For the pkg-config test, 
1. create /usr/lib64/pkgconfig/libqpl.pc
2. add below lines
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libqpl
Description: Intel Query Processing Library
Version: 1.3.0
Libs: -L${libdir} -lqpl -lpthread -laccel-config -ldl -lstdc++
Cflags: -I${includedir}

3. Install the header files to /usr/local/include/qpl and static library to /usr/local/lib64/libqpl.a

> >  virgl = not_found
> >
> >  have_vhost_user_gpu = have_tools and targetos == 'linux' and
> > pixman.found() @@ -2165,6 +2170,7 @@
> > config_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim)
> > config_host_data.set('CONFIG_STATX', has_statx)
> > config_host_data.set('CONFIG_STATX_MNT_ID', has_statx_mnt_id)
> > config_host_data.set('CONFIG_ZSTD', zstd.found())
> > +config_host_data.set('CONFIG_QPL', qpl.found())
> >  config_host_data.set('CONFIG_FUSE', fuse.found())
> > config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
> > config_host_data.set('CONFIG_SPICE_PROTOCOL', spice_protocol.found())
> > @@ -4325,6 +4331,7 @@ summary_info += {'snappy support':    snappy}
> >  summary_info += {'bzip2 support':     libbzip2}
> >  summary_info += {'lzfse support':     liblzfse}
> >  summary_info += {'zstd support':      zstd}
> > +summary_info += {'Query Processing Library support': qpl}
> >  summary_info += {'NUMA host support': numa}
> >  summary_info += {'capstone':          capstone}
> >  summary_info += {'libpmem support':   libpmem}
> > diff --git a/meson_options.txt b/meson_options.txt index
> > 3c7398f3c6..71cd533985 100644
> > --- a/meson_options.txt
> > +++ b/meson_options.txt
> > @@ -255,6 +255,8 @@ option('xkbcommon', type : 'feature', value :
> 'auto',
> >         description: 'xkbcommon support')  option('zstd', type :
> > 'feature', value : 'auto',
> >         description: 'zstd compression support')
> > +option('qpl', type : 'feature', value : 'auto',
> > +       description: 'Query Processing Library support')
> >  option('fuse', type: 'feature', value: 'auto',
> >         description: 'FUSE block device export')  option('fuse_lseek',
> > type : 'feature', value : 'auto', diff --git
> > a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh index
> > 7ca4b77eae..0909d1d517 100644
> > --- a/scripts/meson-buildoptions.sh
> > +++ b/scripts/meson-buildoptions.sh
> > @@ -220,6 +220,7 @@ meson_options_help() {
> >    printf "%s\n" '                  Xen PCI passthrough support'
> >    printf "%s\n" '  xkbcommon       xkbcommon support'
> >    printf "%s\n" '  zstd            zstd compression support'
> > +  printf "%s\n" '  qpl             Query Processing Library support'
> >  }
> >  _meson_option_parse() {
> >    case $1 in
> > @@ -556,6 +557,8 @@ _meson_option_parse() {
> >      --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
> >      --enable-zstd) printf "%s" -Dzstd=enabled ;;
> >      --disable-zstd) printf "%s" -Dzstd=disabled ;;
> > +    --enable-qpl) printf "%s" -Dqpl=enabled ;;
> > +    --disable-qpl) printf "%s" -Dqpl=disabled ;;
> >      *) return 1 ;;
> >    esac
> >  }
> > --
> > 2.39.3
Fabiano Rosas Dec. 4, 2023, 12:29 p.m. UTC | #3
"Liu, Yuan1" <yuan1.liu@intel.com> writes:

>> -----Original Message-----
>> From: Fabiano Rosas <farosas@suse.de>
>> Sent: Saturday, December 2, 2023 1:45 AM
>> To: Liu, Yuan1 <yuan1.liu@intel.com>; quintela@redhat.com;
>> peterx@redhat.com; leobras@redhat.com
>> Cc: qemu-devel@nongnu.org; Liu, Yuan1 <yuan1.liu@intel.com>; Zou, Nanhai
>> <nanhai.zou@intel.com>
>> Subject: Re: [PATCH v2 3/4] configure: add qpl option
>> 
>> Yuan Liu <yuan1.liu@intel.com> writes:
>> 
>> > the Query Processing Library (QPL) is an open-source library that
>> > supports data compression and decompression features.
>> >
>> > add --enable-qpl and --disable-qpl options to enable and disable the
>> > QPL compression accelerator. The QPL compression accelerator can
>> > accelerate the Zlib compression algorithm during the live migration.
>> >
>> > Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
>> > Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
>> > ---
>> >  meson.build                   | 7 +++++++
>> >  meson_options.txt             | 2 ++
>> >  scripts/meson-buildoptions.sh | 3 +++
>> >  3 files changed, 12 insertions(+)
>> >
>> > diff --git a/meson.build b/meson.build index 259dc5f308..b4ba30b4fa
>> > 100644
>> > --- a/meson.build
>> > +++ b/meson.build
>> > @@ -1032,6 +1032,11 @@ if not get_option('zstd').auto() or have_block
>> >                      required: get_option('zstd'),
>> >                      method: 'pkg-config')  endif
>> > +qpl = not_found
>> > +if not get_option('qpl').auto()
>> > +    qpl = dependency('libqpl', required: get_option('qpl'),
>> > +                     method: 'pkg-config') endif
>> 
>> Hm.. I'm not having success with pkg-config:
>> 
>> ../meson.build:1043:10: ERROR: Dependency "libqpl" not found, tried
>> pkgconfig
>> 
>> It seems it doesn't find the static library. I had to use this instead:
>> 
>> qpl = declare_dependency(dependencies: cc.find_library('qpl',
>>                          required: get_option('qpl')))
>> 
>> What am I missing here?
> Sorry about this, the QPL repo(https://github.com/intel/qpl) does not yet support libqpl pkg-config file, we are in the process of adding this functionality and we hope to resolve libqpl's dependencies through pkg-config file.
> I will explicitly address this issue and provide relevant documentation in the next version.

Ok, just remember to test with a clean setup next time.

>
> For the pkg-config test, 
> 1. create /usr/lib64/pkgconfig/libqpl.pc
> 2. add below lines
> prefix=/usr/local
> exec_prefix=${prefix}
> libdir=${exec_prefix}/lib
> includedir=${prefix}/include
>
> Name: libqpl
> Description: Intel Query Processing Library
> Version: 1.3.0
> Libs: -L${libdir} -lqpl -lpthread -laccel-config -ldl -lstdc++

We could probably do this with meson directly instead of requiring a
pkg-config preliminary setup. My meson-fu is not the best, but something
like:

  qpl = declare_dependency(dependencies: [
       cc.find_library('qpl', required: get_option('qpl')),
       cc.find_library('accel-config', required: get_option('qpl')),
       ...
       ], link_args: ['-lstdc++', ...])

> Cflags: -I${includedir}
>
> 3. Install the header files to /usr/local/include/qpl and static library to /usr/local/lib64/libqpl.a

For this part is ok to just point to the official docs.
Yuan Liu Dec. 4, 2023, 12:40 p.m. UTC | #4
> -----Original Message-----
> From: Fabiano Rosas <farosas@suse.de>
> Sent: Monday, December 4, 2023 8:30 PM
> To: Liu, Yuan1 <yuan1.liu@intel.com>; quintela@redhat.com;
> peterx@redhat.com; leobras@redhat.com
> Cc: qemu-devel@nongnu.org; Zou, Nanhai <nanhai.zou@intel.com>
> Subject: RE: [PATCH v2 3/4] configure: add qpl option
> 
> "Liu, Yuan1" <yuan1.liu@intel.com> writes:
> 
> >> -----Original Message-----
> >> From: Fabiano Rosas <farosas@suse.de>
> >> Sent: Saturday, December 2, 2023 1:45 AM
> >> To: Liu, Yuan1 <yuan1.liu@intel.com>; quintela@redhat.com;
> >> peterx@redhat.com; leobras@redhat.com
> >> Cc: qemu-devel@nongnu.org; Liu, Yuan1 <yuan1.liu@intel.com>; Zou,
> >> Nanhai <nanhai.zou@intel.com>
> >> Subject: Re: [PATCH v2 3/4] configure: add qpl option
> >>
> >> Yuan Liu <yuan1.liu@intel.com> writes:
> >>
> >> > the Query Processing Library (QPL) is an open-source library that
> >> > supports data compression and decompression features.
> >> >
> >> > add --enable-qpl and --disable-qpl options to enable and disable
> >> > the QPL compression accelerator. The QPL compression accelerator
> >> > can accelerate the Zlib compression algorithm during the live
> migration.
> >> >
> >> > Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> >> > Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> >> > ---
> >> >  meson.build                   | 7 +++++++
> >> >  meson_options.txt             | 2 ++
> >> >  scripts/meson-buildoptions.sh | 3 +++
> >> >  3 files changed, 12 insertions(+)
> >> >
> >> > diff --git a/meson.build b/meson.build index 259dc5f308..b4ba30b4fa
> >> > 100644
> >> > --- a/meson.build
> >> > +++ b/meson.build
> >> > @@ -1032,6 +1032,11 @@ if not get_option('zstd').auto() or have_block
> >> >                      required: get_option('zstd'),
> >> >                      method: 'pkg-config')  endif
> >> > +qpl = not_found
> >> > +if not get_option('qpl').auto()
> >> > +    qpl = dependency('libqpl', required: get_option('qpl'),
> >> > +                     method: 'pkg-config') endif
> >>
> >> Hm.. I'm not having success with pkg-config:
> >>
> >> ../meson.build:1043:10: ERROR: Dependency "libqpl" not found, tried
> >> pkgconfig
> >>
> >> It seems it doesn't find the static library. I had to use this instead:
> >>
> >> qpl = declare_dependency(dependencies: cc.find_library('qpl',
> >>                          required: get_option('qpl')))
> >>
> >> What am I missing here?
> > Sorry about this, the QPL repo(https://github.com/intel/qpl) does not
> yet support libqpl pkg-config file, we are in the process of adding this
> functionality and we hope to resolve libqpl's dependencies through pkg-
> config file.
> > I will explicitly address this issue and provide relevant documentation
> in the next version.
> 
> Ok, just remember to test with a clean setup next time.
Sure

> > For the pkg-config test,
> > 1. create /usr/lib64/pkgconfig/libqpl.pc 2. add below lines
> > prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib
> > includedir=${prefix}/include
> >
> > Name: libqpl
> > Description: Intel Query Processing Library
> > Version: 1.3.0
> > Libs: -L${libdir} -lqpl -lpthread -laccel-config -ldl -lstdc++
> 
> We could probably do this with meson directly instead of requiring a pkg-
> config preliminary setup. My meson-fu is not the best, but something
> like:
> 
>   qpl = declare_dependency(dependencies: [
>        cc.find_library('qpl', required: get_option('qpl')),
>        cc.find_library('accel-config', required: get_option('qpl')),
>        ...
>        ], link_args: ['-lstdc++', ...])

I will fix this, thank you for the sample code

> > Cflags: -I${includedir}
> >
> > 3. Install the header files to /usr/local/include/qpl and static
> > library to /usr/local/lib64/libqpl.a
> 
> For this part is ok to just point to the official docs.
Yes, good idea
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index 259dc5f308..b4ba30b4fa 100644
--- a/meson.build
+++ b/meson.build
@@ -1032,6 +1032,11 @@  if not get_option('zstd').auto() or have_block
                     required: get_option('zstd'),
                     method: 'pkg-config')
 endif
+qpl = not_found
+if not get_option('qpl').auto()
+    qpl = dependency('libqpl', required: get_option('qpl'),
+                     method: 'pkg-config')
+endif
 virgl = not_found

 have_vhost_user_gpu = have_tools and targetos == 'linux' and pixman.found()
@@ -2165,6 +2170,7 @@  config_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim)
 config_host_data.set('CONFIG_STATX', has_statx)
 config_host_data.set('CONFIG_STATX_MNT_ID', has_statx_mnt_id)
 config_host_data.set('CONFIG_ZSTD', zstd.found())
+config_host_data.set('CONFIG_QPL', qpl.found())
 config_host_data.set('CONFIG_FUSE', fuse.found())
 config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
 config_host_data.set('CONFIG_SPICE_PROTOCOL', spice_protocol.found())
@@ -4325,6 +4331,7 @@  summary_info += {'snappy support':    snappy}
 summary_info += {'bzip2 support':     libbzip2}
 summary_info += {'lzfse support':     liblzfse}
 summary_info += {'zstd support':      zstd}
+summary_info += {'Query Processing Library support': qpl}
 summary_info += {'NUMA host support': numa}
 summary_info += {'capstone':          capstone}
 summary_info += {'libpmem support':   libpmem}
diff --git a/meson_options.txt b/meson_options.txt
index 3c7398f3c6..71cd533985 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -255,6 +255,8 @@  option('xkbcommon', type : 'feature', value : 'auto',
        description: 'xkbcommon support')
 option('zstd', type : 'feature', value : 'auto',
        description: 'zstd compression support')
+option('qpl', type : 'feature', value : 'auto',
+       description: 'Query Processing Library support')
 option('fuse', type: 'feature', value: 'auto',
        description: 'FUSE block device export')
 option('fuse_lseek', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 7ca4b77eae..0909d1d517 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -220,6 +220,7 @@  meson_options_help() {
   printf "%s\n" '                  Xen PCI passthrough support'
   printf "%s\n" '  xkbcommon       xkbcommon support'
   printf "%s\n" '  zstd            zstd compression support'
+  printf "%s\n" '  qpl             Query Processing Library support'
 }
 _meson_option_parse() {
   case $1 in
@@ -556,6 +557,8 @@  _meson_option_parse() {
     --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
     --enable-zstd) printf "%s" -Dzstd=enabled ;;
     --disable-zstd) printf "%s" -Dzstd=disabled ;;
+    --enable-qpl) printf "%s" -Dqpl=enabled ;;
+    --disable-qpl) printf "%s" -Dqpl=disabled ;;
     *) return 1 ;;
   esac
 }