linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phillip Lougher <phillip@squashfs.org.uk>
To: Xiaoming Ni <nixiaoming@huawei.com>, linux-kernel@vger.kernel.org
Cc: wangle6@huawei.com, yi.zhang@huawei.com, wangbing6@huawei.com,
	zhongjubin@huawei.com, chenjianguo3@huawei.com
Subject: Re: ping //Re: [PATCH v2 0/2] squashfs: Add the mount parameter "threads="
Date: Mon, 29 Aug 2022 00:18:01 +0100	[thread overview]
Message-ID: <60b24133-234f-858b-8e71-e183fe72d2bb@squashfs.org.uk> (raw)
In-Reply-To: <8d139f03-7845-9c96-fffc-74fdf8b5d78d@huawei.com>

On 26/08/2022 07:19, Xiaoming Ni wrote:
> ping
> 
> 
> On 2022/8/16 9:00, Xiaoming Ni wrote:
>> Currently, Squashfs supports multiple decompressor parallel modes. 
>> However, this
>> mode can be configured only during kernel building and does not 
>> support flexible
>> selection during runtime.
>>
>> In the current patch set, the mount parameter "threads=" is added to 
>> allow users
>> to select the parallel decompressor mode and configure the number of 
>> decompressors
>> when mounting a file system.
>>
>> v2: fix warning: sparse: incorrect type in initializer (different 
>> address spaces)
>>    Reported-by: kernel test robot <lkp@intel.com>

I have made an initial review of the patches, and I have the following
comments.

Good things about the patch-series.

1. In principle I have no objections to making this configurable at
    mount time.  But, a use-case for why this has become necessary
    would help in the evaluation.

2. In general the code changes are good.  They are predominantly
    exposing the existing different decompressor functionality into
    structures which can be selected at mount time.  They do not
    change existing functionality, and so there are no issues
    about unexpected regressions.

Things which I don't like about the patch-series.

1. There is no default kernel configuration option to keep the existing
    behaviour, that is build time selectable only.  There may be many
    companies/people where for "security" reasons the ability to
    switch to a more CPU/memory intensive decompressor or more threads
    is a risk.

    Yes, I know the new kernel configuration options allow only the
    selected default decompressor mode to be built.  In theory that
    will restrict the available decompressors to the single decompressor
    selected at build time.  So not much different to the current
    position?  But, if the CONFIG_SQUASHFS_DECOMP_MULTI decompressor
    is selected, that will now allow more threads to be used than is
    current, where it is currently restricted to num_online_cpus() * 2.

2. You have decided to allow the mutiple decompressor implementations
    to be selected at mount time - but you have also allowed only one
    decompressor to be built at kernel build time.  This means you
    end up in the fairly silly situation of having a mount time
    option which allows the user to select between one decompressor.
    There doesn't seem much point in having an option which allows
    nothing to be changed.

3. Using thread=<number>, where thread=1 you use SQUASHFS_DECOMP_SINGLE
    if it has been built, otherwise you fall back to
    SQUASHFS_DECOMP_MULTI.  This meants the effect of thread=1 is
    indeterminate and depends on the build options.  I would suggest
    thread=1 should always mean use SQUASHFS_DECOMP_SINGLE.

4. If SQUASHFS_DECOMP_MULTI is selected, there isn't a limit on the
    maximum amount of threads allowed, and there is no ability to
    set the maximum number of threads allowed at kernel build time
    either.

All of the above seems to be a bit of a mess.

As regards points 1 - 3, personally I would add a default kernel
configuration option that keeps the existing behaviour, build time
selectable only, no additional mount time options.  Then a
kernel configuration option that allows the different decompressors
to be selected at mount time, but which always builds all the
decompressors.  This will avoid the silliness of point 2, and
the indeterminate behaviour of point 3.

As regards point 4, I think you should require the maximum number
of threads allowable to be determined at build time, this is
good for security and avoids attempts to use too much CPU
and memory.  The default at kernel build time should be minimal,
to avoid cases where an unchanged value can cause a potential
security hazard on a low end system.  In otherwords it is
up to the user at build time to set the value to an appropriate
value for their system.

Phillip

---
Phillip Lougher, Squashfs author and maintainer.

>>
>> v1: 
>> https://lore.kernel.org/lkml/20220815031100.75243-1-nixiaoming@huawei.com/ 
>>
>> ----
>>
>> Xiaoming Ni (2):
>>    squashfs: add the mount parameter theads=<single|multi|percpu>
>>    squashfs: Allows users to configure the number of decompression
>>      threads.
>>
>>   fs/squashfs/Kconfig                     | 24 ++++++++--
>>   fs/squashfs/decompressor_multi.c        | 32 ++++++++------
>>   fs/squashfs/decompressor_multi_percpu.c | 39 ++++++++++-------
>>   fs/squashfs/decompressor_single.c       | 23 ++++++----
>>   fs/squashfs/squashfs.h                  | 39 ++++++++++++++---
>>   fs/squashfs/squashfs_fs_sb.h            |  4 +-
>>   fs/squashfs/super.c                     | 77 
>> ++++++++++++++++++++++++++++++++-
>>   7 files changed, 192 insertions(+), 46 deletions(-)
>>
> 


  reply	other threads:[~2022-08-28 23:18 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-15  3:10 [PATCH 0/2] squashfs: Add the mount parameter "threads=" Xiaoming Ni
2022-08-15  3:10 ` [PATCH 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-08-15 11:19   ` kernel test robot
2022-08-15  3:11 ` [PATCH 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-08-16  1:00 ` [PATCH v2 0/2] squashfs: Add the mount parameter "threads=" Xiaoming Ni
2022-08-16  1:00   ` [PATCH v2 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-08-16  1:00   ` [PATCH v2 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-08-26  6:19   ` ping //Re: [PATCH v2 0/2] squashfs: Add the mount parameter "threads=" Xiaoming Ni
2022-08-28 23:18     ` Phillip Lougher [this message]
2022-08-30 13:38       ` Xiaoming Ni
2022-08-30 18:08         ` Phillip Lougher
2022-08-30 18:34           ` Phillip Lougher
2022-08-31  1:09             ` Xiaoming Ni
2022-09-02  9:48   ` [PATCH v3 " Xiaoming Ni
2022-09-02  9:48     ` [PATCH v3 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-09-09 15:44       ` Phillip Lougher
2022-09-13  2:46         ` Xiaoming Ni
2022-09-09 15:50       ` Phillip Lougher
2022-09-13  2:47         ` Xiaoming Ni
2022-09-02  9:48     ` [PATCH v3 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-09-09 15:26     ` [PATCH v3 0/2] squashfs: Add the mount parameter "threads=" Phillip Lougher
2022-09-16  8:36     ` [PATCH v4 " Xiaoming Ni
2022-09-16  8:36       ` [PATCH v4 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-09-28  2:20         ` Phillip Lougher
2022-09-28  3:06           ` Xiaoming Ni
2022-09-16  8:36       ` [PATCH v4 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-09-27  1:05       ` ping //Re: [PATCH v4 0/2] squashfs: Add the mount parameter "threads=" Xiaoming Ni
2022-09-30  9:14       ` [PATCH v5 " Xiaoming Ni
2022-09-30  9:14         ` [PATCH v5 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-10-17 21:58           ` Re " Phillip Lougher
2022-09-30  9:14         ` [PATCH v5 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-10-17  0:57         ` ping// Re: [PATCH v5 0/2] squashfs: Add the mount parameter "threads=" Xiaoming Ni
2022-10-17 22:59           ` Phillip Lougher
2022-10-18  6:24             ` Xiaoming Ni
2022-10-19  3:09         ` [PATCH v6 " Xiaoming Ni
2022-10-19  3:09           ` [PATCH v6 1/2] squashfs: add the mount parameter theads=<single|multi|percpu> Xiaoming Ni
2022-10-19  3:09           ` [PATCH v6 2/2] squashfs: Allows users to configure the number of decompression threads Xiaoming Ni
2022-10-27 22:44           ` [PATCH v6 0/2] squashfs: Add the mount parameter "threads=" Phillip Lougher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=60b24133-234f-858b-8e71-e183fe72d2bb@squashfs.org.uk \
    --to=phillip@squashfs.org.uk \
    --cc=chenjianguo3@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nixiaoming@huawei.com \
    --cc=wangbing6@huawei.com \
    --cc=wangle6@huawei.com \
    --cc=yi.zhang@huawei.com \
    --cc=zhongjubin@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).