Userspace support for LO_FLAGS_NO_DEALLOC (Re: [PATCH V2 0/1] loop: introduce LO_FLAGS_NO_DEALLOC)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/8/6 23:30, Zhang Boyang wrote:
I will also submit patches to util-linux to provide userspace support if
this patch is merged.

For anyone who want to test the LO_FLAGS_NO_DEALLOC feature, the userspace support patch for util-linux is done at https://github.com/zhangboyang/util-linux/tree/losetup-nodealloc-202207

Below is an example typescript. In the example, a 10G test file is created and used as backing file of /dev/loop0. Then the mkfs.ext4 will discard most blocks in /dev/loop0. As you can see in the output of `du' and `filefrag', the extents is not freed nor changed location, thus file fragmentation is avoided. (The filesystem of backing file is ext4. Things are different in XFS or Btrfs, they tend to allocate new extents elsewhere when doing FALLOC_FL_ZERO_RANGE.)

Best Regards,
Zhang Boyang


root@debian:~# fallocate -l 10G /data/test
root@debian:~# du -sh /data/test
11G	/data/test
root@debian:~# filefrag -v /data/test
Filesystem type is: ef53
File size of /data/test is 10737418240 (2621440 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 32767: 37715968.. 37748735: 32768: unwritten 1: 32768.. 524287: 37781504.. 38273023: 491520: 37748736: unwritten 2: 524288.. 1015807: 38305792.. 38797311: 491520: 38273024: unwritten 3: 1015808.. 1507327: 38830080.. 39321599: 491520: 38797312: unwritten 4: 1507328.. 1998847: 39354368.. 39845887: 491520: 39321600: unwritten 5: 1998848.. 2490367: 39878656.. 40370175: 491520: 39845888: unwritten 6: 2490368.. 2621439: 40402944.. 40534015: 131072: 40370176: last,unwritten,eof
/data/test: 7 extents found
root@debian:~# ./losetup -f --no-dealloc /data/test
root@debian:~# ./losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE  DIO NO-DEALLOC LOG-SEC
/dev/loop0         0      0         0  0 /data/test   0          1     512
root@debian:~# mkfs.ext4 /dev/loop0
mke2fs 1.46.2 (28-Feb-2021)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 4abd9157-6e40-4842-bb33-e6807fc5c231
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

root@debian:~# ./losetup -d /dev/loop0
root@debian:~# du -sh /data/test
11G	/data/test
root@debian:~# filefrag -v /data/test
Filesystem type is: ef53
File size of /data/test is 10737418240 (2621440 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
   0:        0..    1027:   37715968..  37716995:   1028:
1: 1028.. 1042: 37716996.. 37717010: 15: unwritten
   2:     1043..    1043:   37717011..  37717011:      1:
3: 1044.. 1058: 37717012.. 37717026: 15: unwritten
   4:     1059..    1059:   37717027..  37717027:      1:
5: 1060.. 9250: 37717028.. 37725218: 8191: unwritten
   6:     9251..    9256:   37725219..  37725224:      6:
7: 9257.. 32767: 37725225.. 37748735: 23511: unwritten
   8:    32768..   32770:   37781504..  37781506:      3:   37748736:
9: 32771.. 98303: 37781507.. 37847039: 65533: unwritten
  10:    98304..   98306:   37847040..  37847042:      3:
11: 98307.. 163839: 37847043.. 37912575: 65533: unwritten
  12:   163840..  163842:   37912576..  37912578:      3:
13: 163843.. 229375: 37912579.. 37978111: 65533: unwritten
  14:   229376..  229378:   37978112..  37978114:      3:
15: 229379.. 294911: 37978115.. 38043647: 65533: unwritten
  16:   294912..  294914:   38043648..  38043650:      3:
17: 294915.. 524287: 38043651.. 38273023: 229373: unwritten
  18:   524288..  524288:   38305792..  38305792:      1:   38273024:
19: 524289.. 819199: 38305793.. 38600703: 294911: unwritten
  20:   819200..  819202:   38600704..  38600706:      3:
21: 819203.. 884735: 38600707.. 38666239: 65533: unwritten
  22:   884736..  884738:   38666240..  38666242:      3:
23: 884739.. 1015807: 38666243.. 38797311: 131069: unwritten 24: 1015808.. 1048575: 38830080.. 38862847: 32768: 38797312: unwritten
  25:  1048576.. 1048577:   38862848..  38862849:      2:
26: 1048578.. 1081343: 38862850.. 38895615: 32766: unwritten
  27:  1081344.. 1081344:   38895616..  38895616:      1:
28: 1081345.. 1507327: 38895617.. 39321599: 425983: unwritten 29: 1507328.. 1572863: 39354368.. 39419903: 65536: 39321600: unwritten
  30:  1572864.. 1572864:   39419904..  39419904:      1:
31: 1572865.. 1605631: 39419905.. 39452671: 32767: unwritten
  32:  1605632.. 1605634:   39452672..  39452674:      3:
33: 1605635.. 1998847: 39452675.. 39845887: 393213: unwritten 34: 1998848.. 2097151: 39878656.. 39976959: 98304: 39845888: unwritten
  35:  2097152.. 2097152:   39976960..  39976960:      1:
36: 2097153.. 2097166: 39976961.. 39976974: 14: unwritten
  37:  2097167.. 2097167:   39976975..  39976975:      1:
38: 2097168.. 2490367: 39976976.. 40370175: 393200: unwritten 39: 2490368.. 2621439: 40402944.. 40534015: 131072: 40370176: last,unwritten,eof
/data/test: 7 extents found



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux