Messages in this thread | | | Date | Thu, 8 Sep 2022 14:49:09 +0800 | Subject | Re: [PATCH V2 0/5] Introduce erofs shared domain | From | Jia Zhu <> |
| |
[E2E Container Demo for Quick Test] =================================== [Issue] https://github.com/containerd/nydus-snapshotter/issues/161
[Pull Request] https://github.com/containerd/nydus-snapshotter/pull/162
在 2022/9/2 18:53, Jia Zhu 写道: > Changes since V1: > 0. Only initialize one pseudo fs to manage anonymous inodes(cookies). > 1. Remove ctx's 'ref' field and replace it with inode's i_count. > 2. Add lock in erofs_fscache_unregister_cookie() to avoid race condition > between cookie's get/put/search. > 3. Remove useless blank lines. > > [Kernel Patchset] > =============== > Git tree: > https://github.com/userzj/linux.git zhujia/shared-domain-v2 > Git web: > https://github.com/userzj/linux/tree/zhujia/shared-domain-v2 > > [Background] > ============ > In ondemand read mode, we use individual volume to present an erofs > mountpoint, cookies to present bootstrap and data blobs. > > In which case, since cookies can't be shared between fscache volumes, > even if the data blobs between different mountpoints are exactly same, > they can't be shared. > > [Introduction] > ============== > Here we introduce erofs shared domain to resolve above mentioned case. > Several erofs filesystems can belong to one domain, and data blobs can > be shared among these erofs filesystems of same domain. > > [Usage] > Users could specify 'domain_id' mount option to create or join into a > domain which reuses the same cookies(blobs). > > [Design] > ======== > 1. Use pseudo mnt to manage domain's lifecycle. > 2. Use a linked list to maintain & traverse domains. > 3. Use pseudo sb to create anonymous inode for recording cookie's info > and manage cookies lifecycle. > > [Flow Path] > =========== > 1. User specify a new 'domain_id' in mount option. > 1.1 Traverse domain list, compare domain_id with existing domain.[Miss] > 1.2 Create a new domain(volume), add it to domain list. > 1.3 Traverse pseudo sb's inode list, compare cookie name with > existing cookies.[Miss] > 1.4 Alloc new anonymous inodes and cookies. > > 2. User specify an existing 'domain_id' in mount option and the data > blob is existed in domain. > 2.1 Traverse domain list, compare domain_id with existing domain.[Hit] > 2.2 Reuse the domain and increase its refcnt. > 2.3 Traverse pseudo sb's inode list, compare cookie name with > existing cookies.[Hit] > 2.4 Reuse the cookie and increase its refcnt. > [Test] > ====== > Git web: > https://github.com/userzj/demand-read-cachefilesd/tree/shared-domain > More test cases will be added to: > https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/log/?h=experimental-tests-fscache > > RFC: https://lore.kernel.org/all/YxAlO%2FDHDrIAafR2@B-P7TQMD6M-0146.local/ > V1: https://lore.kernel.org/all/20220902034748.60868-1-zhujia.zj@bytedance.com/ > > > Jia Zhu (5): > erofs: add 'domain_id' mount option for on-demand read sementics > erofs: introduce fscache-based domain > erofs: add 'domain_id' prefix when register sysfs > erofs: remove duplicated unregister_cookie > erofs: support fscache based shared domain > > fs/erofs/fscache.c | 168 +++++++++++++++++++++++++++++++++++++++++++- > fs/erofs/internal.h | 31 +++++++- > fs/erofs/super.c | 94 +++++++++++++++++++------ > fs/erofs/sysfs.c | 11 ++- > 4 files changed, 278 insertions(+), 26 deletions(-) >
| |