Objet : Developers list for StarPU
Archives de la liste
- From: barbier@imacs.polytechnique.fr
- To: starpu-devel@inria.fr
- Subject: [starpu-devel] Corrupted large ooc files with unistd backend
- Date: Mon, 5 Dec 2022 09:45:16 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=barbier@imacs.polytechnique.fr; spf=None smtp.mailfrom=barbier@imacs.polytechnique.fr; spf=None smtp.helo=postmaster@mx-a.polytechnique.fr
- Importance: Normal
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:RquwFaG7x5I9SIyrpLqE6MeALOsnbusQ8zAX/mhsVBpeadyAiq mV88jzGyWftN9jYgBFpTngAtjkfZqyz/5ICOUqUYtKPzOW2ldATrsC0WKK+VSJcBEWndQy6U 4PScVD4ZHLfDtHsfo=
- Ironport-phdr: A9a23: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
- Ironport-sdr: 638daf9d_aN6+JjuiPLHvn01kyNqhDwBnNPPobz6WItKSMagL8eH23RZ Gc6b6fRW63WxUZejVnEWrXb8thjDpi93UJgBOvw==
Hello,
write.2 manpage constains this note on Linux:
On Linux, write() (and similar system calls) will transfer at most
0x7ffff000 (2,147,479,552) bytes, returning the number of bytes actually
transferred. (This is true on both 32-bit and 64-bit systems.)
As a result, files contain only zeros after offset 0x7ffff000.
This is pretty easy to fix in
starpu_unistd_global_read/write with a loop, but I do not see how to deal
with asynchronous IO; I discarded AIO when size is too large in attached
patch.
Regards,
Denis BARBIER
diff --git a/src/core/disk_ops/unistd/disk_unistd_global.c b/src/core/disk_ops/unistd/disk_unistd_global.c index b43d1870ba..cd66f7dd4e 100644 --- a/src/core/disk_ops/unistd/disk_unistd_global.c +++ b/src/core/disk_ops/unistd/disk_unistd_global.c @@ -284,10 +284,20 @@ int starpu_unistd_global_read(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, voi struct starpu_unistd_global_obj *tmp = (struct starpu_unistd_global_obj *) obj; starpu_ssize_t nb; int fd = tmp->descriptor; + starpu_ssize_t bytes_to_write = size; #ifdef HAVE_PREAD if (fd >= 0) - nb = pread(fd, buf, size, offset); + { + while (bytes_to_write > 0) + { + nb = pread(fd, buf, bytes_to_write, offset); + STARPU_ASSERT_MSG(nb >= 0, "Starpu Disk unistd pread failed: size %lu got errno %d", (unsigned long) size, errno); + bytes_to_write -= nb; + buf += nb; + offset += nb; + } + } else #endif { @@ -299,7 +309,14 @@ int starpu_unistd_global_read(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, voi int res = lseek(fd, offset, SEEK_SET); STARPU_ASSERT_MSG(res >= 0, "Starpu Disk unistd lseek for read failed: offset %lu got errno %d", (unsigned long) offset, errno); - nb = read(fd, buf, size); + while (bytes_to_write > 0) + { + nb = read(fd, buf, bytes_to_write); + STARPU_ASSERT_MSG(nb >= 0, "Starpu Disk unistd read failed: offset %lu got errno %d", (unsigned long) offset, errno); + bytes_to_write -= nb; + buf += nb; + offset += nb; + } if (tmp->descriptor >= 0) STARPU_PTHREAD_MUTEX_UNLOCK(&tmp->mutex); @@ -308,9 +325,7 @@ int starpu_unistd_global_read(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, voi } - STARPU_ASSERT_MSG(nb >= 0, "Starpu Disk unistd read failed: size %lu got errno %d", (unsigned long) size, errno); - - return nb; + return 0; } #if defined(HAVE_LIBAIO_H) @@ -413,12 +428,22 @@ int starpu_unistd_global_full_read(void *base STARPU_ATTRIBUTE_UNUSED, void *obj int starpu_unistd_global_write(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, const void *buf, off_t offset, size_t size) { struct starpu_unistd_global_obj *tmp = (struct starpu_unistd_global_obj *) obj; - int res; + starpu_ssize_t res; int fd = tmp->descriptor; + starpu_ssize_t bytes_to_write = size; #ifdef HAVE_PWRITE if (fd >= 0) - res = pwrite(fd, buf, size, offset); + { + while (bytes_to_write > 0) + { + res = pwrite(fd, buf, bytes_to_write, offset); + STARPU_ASSERT_MSG(res >= 0, "Starpu Disk unistd pwrite failed: offset %lu got errno %d", (unsigned long) offset, errno); + bytes_to_write -= res; + buf += res; + offset += res; + } + } else #endif { @@ -430,7 +455,14 @@ int starpu_unistd_global_write(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, co res = lseek(fd, offset, SEEK_SET); STARPU_ASSERT_MSG(res >= 0, "Starpu Disk unistd lseek for write failed: offset %lu got errno %d", (unsigned long) offset, errno); - res = write(fd, buf, size); + while (bytes_to_write > 0) + { + res = write(fd, buf, bytes_to_write); + STARPU_ASSERT_MSG(res >= 0, "Starpu Disk unistd write failed: offset %lu got errno %d", (unsigned long) offset, errno); + bytes_to_write -= res; + buf += res; + offset += res; + } if (tmp->descriptor >= 0) STARPU_PTHREAD_MUTEX_UNLOCK(&tmp->mutex); @@ -438,7 +470,6 @@ int starpu_unistd_global_write(void *base STARPU_ATTRIBUTE_UNUSED, void *obj, co _starpu_unistd_reclose(fd); } - STARPU_ASSERT_MSG(res >= 0, "Starpu Disk unistd write failed: size %lu got errno %d", (unsigned long) size, errno); return 0; } @@ -553,6 +584,12 @@ void * starpu_unistd_global_async_full_read (void * base, void * obj, void ** pt *size = st.st_size; #endif +#ifdef STARPU_LINUX_SYS + /* on Linux, read() (and similar system calls) will transfer at most 0x7ffff000 bytes, see read(2) */ + if (*size > 0x7ffff000) + return NULL; +#endif + if (tmp->descriptor < 0) _starpu_unistd_reclose(fd); @@ -565,6 +602,12 @@ void * starpu_unistd_global_async_full_write (void * base, void * obj, void * pt { struct starpu_unistd_global_obj *tmp = (struct starpu_unistd_global_obj *) obj; +#ifdef STARPU_LINUX_SYS + /* on Linux, write() (and similar system calls) will transfer at most 0x7ffff000 bytes, see write(2) */ + if (size > 0x7ffff000) + return NULL; +#endif + /* update file size to realise the next good full_read */ if(size != tmp->size) {
- [starpu-devel] Corrupted large ooc files with unistd backend, barbier, 05/12/2022
- Re: [starpu-devel] Corrupted large ooc files with unistd backend, Samuel Thibault, 05/12/2022
Archives gérées par MHonArc 2.6.19+.