diff mbox series

[v5,3/7] configure: add --enable-qpl build option

Message ID 20240319164527.1873891-4-yuan1.liu@intel.com
State New
Headers show
Series Live Migration With IAA | expand

Commit Message

Yuan Liu March 19, 2024, 4:45 p.m. UTC
add --enable-qpl and --disable-qpl options to enable and disable
the QPL compression method for multifd migration.

the Query Processing Library (QPL) is an open-source library
that supports data compression and decompression features.

The QPL compression is based on the deflate compression algorithm
and use Intel In-Memory Analytics Accelerator(IAA) hardware for
compression and decompression acceleration.

Please refer to the following for more information about QPL
https://intel.github.io/qpl/documentation/introduction_docs/introduction.html

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

Comments

Thomas Huth March 20, 2024, 8:55 a.m. UTC | #1
On 19/03/2024 17.45, Yuan Liu wrote:
> add --enable-qpl and --disable-qpl options to enable and disable
> the QPL compression method for multifd migration.
> 
> the Query Processing Library (QPL) is an open-source library
> that supports data compression and decompression features.
> 
> The QPL compression is based on the deflate compression algorithm
> and use Intel In-Memory Analytics Accelerator(IAA) hardware for
> compression and decompression acceleration.
> 
> Please refer to the following for more information about QPL
> https://intel.github.io/qpl/documentation/introduction_docs/introduction.html
> 
> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> ---
>   meson.build                   | 16 ++++++++++++++++
>   meson_options.txt             |  2 ++
>   scripts/meson-buildoptions.sh |  3 +++
>   3 files changed, 21 insertions(+)
> 
> diff --git a/meson.build b/meson.build
> index b375248a76..bee7dcd53b 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1200,6 +1200,20 @@ 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()

Do you really only want to enable this if the user explicitly specified 
"--enable-qpl" ? Otherwise, I think this should be:

  if not get_option('qpl').auto() or have_system

?

  Thomas




> +  libqpl = cc.find_library('qpl', required: false)
> +  if not libqpl.found()
> +    error('libqpl not found, please install it from ' +
> +    'https://intel.github.io/qpl/documentation/get_started_docs/installation.html')
> +  endif
> +  libaccel = dependency('libaccel-config', version: '>=4.0.0',
> +                        required: true,
> +                        method: 'pkg-config')
> +  qpl = declare_dependency(dependencies: [libqpl, libaccel,
> +        cc.find_library('dl', required: get_option('qpl'))],
> +        link_args: ['-lstdc++'])
> +endif
>   virgl = not_found
Thomas Huth March 20, 2024, 8:56 a.m. UTC | #2
On 20/03/2024 09.55, Thomas Huth wrote:
> On 19/03/2024 17.45, Yuan Liu wrote:
>> add --enable-qpl and --disable-qpl options to enable and disable
>> the QPL compression method for multifd migration.
>>
>> the Query Processing Library (QPL) is an open-source library
>> that supports data compression and decompression features.
>>
>> The QPL compression is based on the deflate compression algorithm
>> and use Intel In-Memory Analytics Accelerator(IAA) hardware for
>> compression and decompression acceleration.
>>
>> Please refer to the following for more information about QPL
>> https://intel.github.io/qpl/documentation/introduction_docs/introduction.html
>>
>> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
>> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
>> ---
>>   meson.build                   | 16 ++++++++++++++++
>>   meson_options.txt             |  2 ++
>>   scripts/meson-buildoptions.sh |  3 +++
>>   3 files changed, 21 insertions(+)
>>
>> diff --git a/meson.build b/meson.build
>> index b375248a76..bee7dcd53b 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -1200,6 +1200,20 @@ 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()
> 
> Do you really only want to enable this if the user explicitly specified 
> "--enable-qpl" ? Otherwise, I think this should be:
> 
>   if not get_option('qpl').auto() or have_system
> 
> ?
> 
>   Thomas
> 
> 
> 
> 
>> +  libqpl = cc.find_library('qpl', required: false)

... and it should use "required: get_option('qpl')" in that case.

  Thomas


>> +  if not libqpl.found()
>> +    error('libqpl not found, please install it from ' +
>> +    
>> 'https://intel.github.io/qpl/documentation/get_started_docs/installation.html')
>> +  endif
>> +  libaccel = dependency('libaccel-config', version: '>=4.0.0',
>> +                        required: true,
>> +                        method: 'pkg-config')
>> +  qpl = declare_dependency(dependencies: [libqpl, libaccel,
>> +        cc.find_library('dl', required: get_option('qpl'))],
>> +        link_args: ['-lstdc++'])
>> +endif
>>   virgl = not_found
>
Daniel P. Berrangé March 20, 2024, 10:31 a.m. UTC | #3
On Wed, Mar 20, 2024 at 12:45:23AM +0800, Yuan Liu wrote:
> add --enable-qpl and --disable-qpl options to enable and disable
> the QPL compression method for multifd migration.
> 
> the Query Processing Library (QPL) is an open-source library
> that supports data compression and decompression features.
> 
> The QPL compression is based on the deflate compression algorithm
> and use Intel In-Memory Analytics Accelerator(IAA) hardware for
> compression and decompression acceleration.
> 
> Please refer to the following for more information about QPL
> https://intel.github.io/qpl/documentation/introduction_docs/introduction.html
> 
> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> ---
>  meson.build                   | 16 ++++++++++++++++
>  meson_options.txt             |  2 ++
>  scripts/meson-buildoptions.sh |  3 +++
>  3 files changed, 21 insertions(+)
> 
> diff --git a/meson.build b/meson.build
> index b375248a76..bee7dcd53b 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1200,6 +1200,20 @@ 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()
> +  libqpl = cc.find_library('qpl', required: false)
> +  if not libqpl.found()
> +    error('libqpl not found, please install it from ' +
> +    'https://intel.github.io/qpl/documentation/get_started_docs/installation.html')
> +  endif
> +  libaccel = dependency('libaccel-config', version: '>=4.0.0',
> +                        required: true,
> +                        method: 'pkg-config')
> +  qpl = declare_dependency(dependencies: [libqpl, libaccel,
> +        cc.find_library('dl', required: get_option('qpl'))],
> +        link_args: ['-lstdc++'])
> +endif

Are either of these libraries present in any mainstream Linux
distro ? If not, then this feature will not get any CI build
coverage from QEMU.

Needing to manually add '-lstdc++' & '-ldl' is presumably a
requirement from 'qpl'. As a future enhancement it would be
much better if 'qpl' provided a pkg-config file, so this
list of dependencies didn't have to be hardcoded by apps
using qpl


With regards,
Daniel
Yuan Liu March 20, 2024, 2:34 p.m. UTC | #4
> -----Original Message-----
> From: Thomas Huth <thuth@redhat.com>
> Sent: Wednesday, March 20, 2024 4:57 PM
> To: Liu, Yuan1 <yuan1.liu@intel.com>; peterx@redhat.com; farosas@suse.de
> Cc: qemu-devel@nongnu.org; hao.xiang@bytedance.com;
> bryan.zhang@bytedance.com; Zou, Nanhai <nanhai.zou@intel.com>
> Subject: Re: [PATCH v5 3/7] configure: add --enable-qpl build option
> 
> On 20/03/2024 09.55, Thomas Huth wrote:
> > On 19/03/2024 17.45, Yuan Liu wrote:
> >> add --enable-qpl and --disable-qpl options to enable and disable
> >> the QPL compression method for multifd migration.
> >>
> >> the Query Processing Library (QPL) is an open-source library
> >> that supports data compression and decompression features.
> >>
> >> The QPL compression is based on the deflate compression algorithm
> >> and use Intel In-Memory Analytics Accelerator(IAA) hardware for
> >> compression and decompression acceleration.
> >>
> >> Please refer to the following for more information about QPL
> >>
> https://intel.github.io/qpl/documentation/introduction_docs/introduction.h
> tml
> >>
> >> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> >> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> >> ---
> >>   meson.build                   | 16 ++++++++++++++++
> >>   meson_options.txt             |  2 ++
> >>   scripts/meson-buildoptions.sh |  3 +++
> >>   3 files changed, 21 insertions(+)
> >>
> >> diff --git a/meson.build b/meson.build
> >> index b375248a76..bee7dcd53b 100644
> >> --- a/meson.build
> >> +++ b/meson.build
> >> @@ -1200,6 +1200,20 @@ 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()
> >
> > Do you really only want to enable this if the user explicitly specified
> > "--enable-qpl" ? Otherwise, I think this should be:
> >
> >   if not get_option('qpl').auto() or have_system
> >
> > ?
> >
> >   Thomas
> >
> >
> >
> >
> >> +  libqpl = cc.find_library('qpl', required: false)
> 
> ... and it should use "required: get_option('qpl')" in that case.
> 
>   Thomas

Hi Thomas

Thanks for your comments, you are right, I need to add have_system
and check get_option('qpl') here, I will fix this next version.

> >> +  if not libqpl.found()
> >> +    error('libqpl not found, please install it from ' +
> >> +
> >>
> 'https://intel.github.io/qpl/documentation/get_started_docs/installation.h
> tml')
> >> +  endif
> >> +  libaccel = dependency('libaccel-config', version: '>=4.0.0',
> >> +                        required: true,
> >> +                        method: 'pkg-config')
> >> +  qpl = declare_dependency(dependencies: [libqpl, libaccel,
> >> +        cc.find_library('dl', required: get_option('qpl'))],
> >> +        link_args: ['-lstdc++'])
> >> +endif
> >>   virgl = not_found
> >
Yuan Liu March 20, 2024, 2:42 p.m. UTC | #5
> -----Original Message-----
> From: Daniel P. Berrangé <berrange@redhat.com>
> Sent: Wednesday, March 20, 2024 6:31 PM
> To: Liu, Yuan1 <yuan1.liu@intel.com>
> Cc: peterx@redhat.com; farosas@suse.de; qemu-devel@nongnu.org;
> hao.xiang@bytedance.com; bryan.zhang@bytedance.com; Zou, Nanhai
> <nanhai.zou@intel.com>
> Subject: Re: [PATCH v5 3/7] configure: add --enable-qpl build option
> 
> On Wed, Mar 20, 2024 at 12:45:23AM +0800, Yuan Liu wrote:
> > add --enable-qpl and --disable-qpl options to enable and disable
> > the QPL compression method for multifd migration.
> >
> > the Query Processing Library (QPL) is an open-source library
> > that supports data compression and decompression features.
> >
> > The QPL compression is based on the deflate compression algorithm
> > and use Intel In-Memory Analytics Accelerator(IAA) hardware for
> > compression and decompression acceleration.
> >
> > Please refer to the following for more information about QPL
> >
> https://intel.github.io/qpl/documentation/introduction_docs/introduction.h
> tml
> >
> > Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> > Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> > ---
> >  meson.build                   | 16 ++++++++++++++++
> >  meson_options.txt             |  2 ++
> >  scripts/meson-buildoptions.sh |  3 +++
> >  3 files changed, 21 insertions(+)
> >
> > diff --git a/meson.build b/meson.build
> > index b375248a76..bee7dcd53b 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -1200,6 +1200,20 @@ 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()
> > +  libqpl = cc.find_library('qpl', required: false)
> > +  if not libqpl.found()
> > +    error('libqpl not found, please install it from ' +
> > +
> 'https://intel.github.io/qpl/documentation/get_started_docs/installation.h
> tml')
> > +  endif
> > +  libaccel = dependency('libaccel-config', version: '>=4.0.0',
> > +                        required: true,
> > +                        method: 'pkg-config')
> > +  qpl = declare_dependency(dependencies: [libqpl, libaccel,
> > +        cc.find_library('dl', required: get_option('qpl'))],
> > +        link_args: ['-lstdc++'])
> > +endif
> 
> Are either of these libraries present in any mainstream Linux
> distro ? If not, then this feature will not get any CI build
> coverage from QEMU.
> 
> Needing to manually add '-lstdc++' & '-ldl' is presumably a
> requirement from 'qpl'. As a future enhancement it would be
> much better if 'qpl' provided a pkg-config file, so this
> list of dependencies didn't have to be hardcoded by apps
> using qpl
> 
> 
> With regards,
> Daniel

Hi Daniel

Thanks for your comments, the QPL has not been integrated into 
mainstream Linux distro yet, I am actively promoting QPL to 
support pkg-config file and integrate it into the distributions.

The QPL will support these soon, I will use pkg-config in the next 
version to solve the QPL build dependency issue.
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index b375248a76..bee7dcd53b 100644
--- a/meson.build
+++ b/meson.build
@@ -1200,6 +1200,20 @@  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()
+  libqpl = cc.find_library('qpl', required: false)
+  if not libqpl.found()
+    error('libqpl not found, please install it from ' +
+    'https://intel.github.io/qpl/documentation/get_started_docs/installation.html')
+  endif
+  libaccel = dependency('libaccel-config', version: '>=4.0.0',
+                        required: true,
+                        method: 'pkg-config')
+  qpl = declare_dependency(dependencies: [libqpl, libaccel,
+        cc.find_library('dl', required: get_option('qpl'))],
+        link_args: ['-lstdc++'])
+endif
 virgl = not_found
 
 have_vhost_user_gpu = have_tools and host_os == 'linux' and pixman.found()
@@ -2305,6 +2319,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())
@@ -4462,6 +4477,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 0a99a059ec..06cd675572 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -259,6 +259,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 680fa3f581..784f74fde9 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -222,6 +222,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
@@ -562,6 +563,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
 }