On Thu, Jul 23, 2020 at 5:17 PM Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> wrote: It has been half a year, and no activity on this patch. Can it be applied? Thanks, Pasha > > Changelog > v2: Addressed Tyler Hicks comments > - added mutex_destroy() > - comment in lo_open() > - added lock around lo_disk in > > > === > > In our environment we are using systemd portable containers in > squashfs formats, convert them into loop device, and mount. > > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > loop5 7:5 0 76.4M 0 loop > `-BaseImageM1908 252:3 0 76.4M 1 crypt /BaseImageM1908 > loop6 7:6 0 20K 0 loop > `-test_launchperf20 252:17 0 1.3M 1 crypt /app/test_launchperf20 > loop7 7:7 0 20K 0 loop > `-test_launchperf18 252:4 0 1.5M 1 crypt /app/test_launchperf18 > loop8 7:8 0 8K 0 loop > `-test_launchperf8 252:25 0 28K 1 crypt app/test_launchperf8 > loop9 7:9 0 376K 0 loop > `-test_launchperf14 252:29 0 45.7M 1 crypt /app/test_launchperf14 > loop10 7:10 0 16K 0 loop > `-test_launchperf4 252:11 0 968K 1 crypt app/test_launchperf4 > loop11 7:11 0 1.2M 0 loop > `-test_launchperf17 252:26 0 150.4M 1 crypt /app/test_launchperf17 > loop12 7:12 0 36K 0 loop > `-test_launchperf19 252:13 0 3.3M 1 crypt /app/test_launchperf19 > loop13 7:13 0 8K 0 loop > ... > > We have over 50 loop devices which are mounted during boot. > > We observed contentions around loop_ctl_mutex. > > The sample contentions stacks: > > Contention 1: > __blkdev_get() > bdev->bd_disk->fops->open() > lo_open() > mutex_lock_killable(&loop_ctl_mutex); <- contention > > Contention 2: > __blkdev_put() > disk->fops->release() > lo_release() > mutex_lock(&loop_ctl_mutex); <- contention > > With total time waiting for loop_ctl_mutex ~18.8s during boot (across 8 > CPUs) on our machine (69 loop devices): 2.35s per CPU. > > Scaling this lock eliminates this contention entirely, and improves the boot > performance by 2s on our machine. > > Pavel Tatashin (1): > loop: scale loop device by introducing per device lock > > drivers/block/loop.c | 99 ++++++++++++++++++++++++++------------------ > drivers/block/loop.h | 1 + > 2 files changed, 59 insertions(+), 41 deletions(-) > > -- > 2.25.1 >