[lustre-discuss] Hole Identification in file

lokesh jaliminche lokesh.jaliminche at gmail.com
Fri Mar 9 05:01:36 PST 2018


Ahh got it!!
Meanwhile, I found one implicit method to find holes on the file i.e. using
fiemap ioctl.
I have tested it and works fine

Logs :
=====
dd if=/dev/urandom  of=sparse_file seek=10 bs=1M  count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0969376 s, 10.8 MB/s
[lokesh]# dd if=/dev/urandom  of=sparse_file seek=20 bs=1M  count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.087068 s, 12.0 MB/s
[lokesh]# dd if=/dev/urandom  of=sparse_file seek=30 bs=1M  count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0918352 s, 11.4 MB/s
[lokesh]# dd if=/dev/urandom  of=sparse_file seek=40 bs=1M  count=10
^[[A^[[D10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.946796 s, 11.1 MB/s
[lokesh]# dd if=/dev/urandom  of=sparse_file seek=50 bs=1M  count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.978465 s, 10.7 MB/s
[lokesh]# ./a.out sparse_file
Extents in file "sparse_file":    4
Extents returned: 4
Logical: ###[10485760]    Ext length: ###[1048576]    Physical:
###[104666759168]    flags: 2147483648
Logical: ###[20971520]    Ext length: ###[1048576]    Physical:
###[104677244928]    flags: 2147483648
Logical: ###[31457280]    Ext length: ###[1048576]    Physical:
###[104687730688]    flags: 2147483648
Logical: ###[41943040]    Ext length: ###[20971520]    Physical:
###[104689827840]    flags: 2147483649

On Fri, Mar 9, 2018 at 2:12 PM, Dilger, Andreas <andreas.dilger at intel.com>
wrote:

> On Mar 6, 2018, at 00:12, lokesh jaliminche <lokesh.jaliminche at gmail.com>
> wrote:
> >
> > Hi,
> >
> > Does lustre support SEEK_HOLE/SEEK_DATA flag for lseek?
> >
> > I did some experiment with the below program to find out if lustre
> supports SEEK_HOLE and SEEK_DATA flag. I found that lustre always returns
> the end of the file for SEEK_HOLE and 0 for SEEK_DATA and as per the man
> page this is the simplest implementation that file system can have(If they
> dont want to support these flags). So just wanted to confirm.
>
> Lustre does not directly support the SEEK_HOLE/SEEK_DATA interface
> currently.
> What you are seeing is the default/minimum implementation provided by the
> lseek interface.
>
> Implementing these seek options might be quite complex for a Lustre file
> because of multiple stripes in the layout.  You would need to locate holes
> in the stripes, and then map the hole offset on the object to the file
> offset.
>
> If this is something you are interested to implement I would be happy to
> discuss it with you further.  Probably the best place to start is to file
> an LU ticket with details, and then interested parties can discuss the
> implementation there.
>
> Cheers, Andreas
>
> > Program :
> > ========
> > #include <unistd.h>
> > #include <sys/types.h>
> > #include <stdio.h>
> > #include <fcntl.h>
> > #include <stdlib.h>
> > #define SEEK_OFF 10485760
> > int main()
> > {
> >     int fd;
> >     char buffer[80];
> >     int i = 0;
> >     static char message[]="Hello world";
> >     fd=open("myfile", O_RDWR);
> >     if (fd != -1)
> >         return 1;
> >     printf("creating hole by writing at each of %d strides\n", SEEK_OFF);
> >     for (i = 1; i < 10; i++)
> >     {
> >         int seek_off = i * SEEK_OFF;
> >         int sz;
> >         printf("seek_off %ld\n", lseek(fd, seek_off, SEEK_SET));
> >         sz = write(fd,message,sizeof(message));
> >         printf("write size = %d\n", sz);
> >         printf("String : %s\n", message);
> >     }
> >     printf("Demonstrating SEEK_HOLE and SEEK_DATA %d \n", SEEK_OFF);
> >     int start_off = 0;
> >     lseek(fd, 0, SEEK_SET);
> >     printf("after SEEK_HOLE start_off %ld\n", lseek(fd, 0, SEEK_HOLE));
> >     printf("after SEEK_DATA start_off %ld\n", lseek(fd, start_off,
> SEEK_DATA));
> >     printf("after SEEK_HOLE start_off %ld\n", lseek(fd, 10485760,
> SEEK_HOLE));
> >     printf("after SEEK_DATA start_off %ld\n", lseek(fd, (10485760 *2 ),
> SEEK_DATA));
> >     close(fd);
> > }
> >
> > output:
> > =====
> > after SEEK_HOLE start_off 94372142
> > after SEEK_DATA start_off 0
> > after SEEK_HOLE start_off 94372142
> > after SEEK_DATA start_off 0
> >
> > Regards,
> > Lokesh
> > _______________________________________________
> > lustre-discuss mailing list
> > lustre-discuss at lists.lustre.org
> > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org
>
> Cheers, Andreas
> --
> Andreas Dilger
> Lustre Principal Architect
> Intel Corporation
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lustre.org/pipermail/lustre-discuss-lustre.org/attachments/20180309/3b546df4/attachment-0001.html>


More information about the lustre-discuss mailing list