Skip to content
Snippets Groups Projects
Select Git revision
  • 66fcb392f79084c45902829e686f9341fd8c59be
  • master default protected
  • tf2
  • tf2_pytorch
  • issue_3
  • issue_2
  • 2019a
  • juwels_2019a
  • jureca_2019_a
9 results

NOTICE

Blame
  • psmpi-5.5.0-1_ime.patch 8.94 KiB
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.c psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.c
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.c	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.c	2021-11-09 14:53:59.545886977 +0100
    @@ -10,8 +10,8 @@
     
     struct ADIOI_Fns_struct ADIO_IME_operations = {
         ADIOI_IME_Open,     /* Open */
    -    ADIOI_SCALEABLE_OpenColl, /* OpenColl */ /*XXX*/
    -        ADIOI_IME_ReadContig,   /* ReadContig */
    +    ADIOI_GEN_OpenColl, /* OpenColl */
    +    ADIOI_IME_ReadContig,   /* ReadContig */
         ADIOI_IME_WriteContig,      /* WriteContig */
         ADIOI_GEN_ReadStridedColl,  /* ReadStridedColl */
         ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.c psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.c
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.c	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.c	2021-11-09 14:53:59.545886977 +0100
    @@ -58,24 +58,38 @@
         MPI_Attr_put(MPI_COMM_SELF, ADIOI_IME_Initialized, (void *) 0);
     }
     
    -/* Return an IME-compatible filename (add 'ime:' prefix).
    - * New filename must be free'd by the user */
    -char *ADIOI_IME_Add_prefix(const char *filename)
    +/**
    + * Return an IME-compatible filename
    + * An absolute BFS path will get added the 'ime:' prefix.
    + * A path on ime-fuse will be converted to a relative ime path,
    + * with the ime:/ prefix
    + * The returned filename must be free'd by the user
    + */
    +char *ADIOI_IME_Convert_filename(const char *filename)
     {
    -    static char myname[] = "ADIOI_IME_ADD_PREFIX";
    -    size_t f_len = strlen(filename) + 1;
    -    char *ime_filename = ADIOI_Malloc(f_len + ADIOI_IME_PREFIX_LEN);
    +    static char myname[] = "ADIOI_IME_CONVERT_FILENAME";
     
    -    if (!ime_filename) {
    +#if (IME_NATIVE_API_VERSION >= 131)
    +    bool is_fuse = ime_native_is_fuse_path_and_convert(filename, NULL);
    +    if (is_fuse) {
    +        return ADIOI_Strdup(filename);
    +    }
    +#endif
     
    +    size_t f_len = strlen(filename) + 1;
    +    char *ime_filename = ADIOI_Malloc(f_len + IME_FILE_PREFIX_LEN_NO_FWD_SLASH);
    +    if (!ime_filename) {
             MPIO_Err_create_code(MPI_SUCCESS,
                                  MPIR_ERR_FATAL,
    -                             myname, __LINE__, MPI_ERR_UNKNOWN, "Error allocating memory", 0);
    +                             myname, __LINE__, MPI_ERR_UNKNOWN,
    +                             "Error allocating memory", 0);
     
             return NULL;
         }
     
    -    ADIOI_Strncpy(ime_filename, ADIOI_IME_PREFIX, ADIOI_IME_PREFIX_LEN);
    -    ADIOI_Strncpy((ime_filename + ADIOI_IME_PREFIX_LEN), filename, f_len);
    +    ADIOI_Strncpy(ime_filename, DEFAULT_IME_PREFIX_NO_FWD_SLASH,
    +                  IME_FILE_PREFIX_LEN_NO_FWD_SLASH);
    +    ADIOI_Strncpy((ime_filename + IME_FILE_PREFIX_LEN_NO_FWD_SLASH),
    +                  filename, f_len);
         return ime_filename;
     }
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.h psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.h
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.h	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_common.h	2021-11-09 14:53:59.545886977 +0100
    @@ -17,5 +17,5 @@
     void ADIOI_IME_End(int *error_code);
     int ADIOI_IME_End_call(MPI_Comm comm, int keyval, void *attribute_val, void *extra_state);
     
    -char *ADIOI_IME_Add_prefix(const char *filename);
    +char *ADIOI_IME_Convert_filename(const char *filename);
     #endif /* AD_IME_COMMON_H_INCLUDED */
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_delete.c psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_delete.c
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_delete.c	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_delete.c	2021-11-09 14:53:59.545886977 +0100
    @@ -13,7 +13,7 @@
         int ret;
         static char myname[] = "ADIOI_IME_DELETE";
     
    -    char *ime_filename = ADIOI_IME_Add_prefix(filename);
    +    char *ime_filename = ADIOI_IME_Convert_filename(filename);
         ret = ime_native_unlink(ime_filename);
         ADIOI_Free(ime_filename);
         if (ret)
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.h psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.h
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.h	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime.h	2021-11-09 14:53:59.545886977 +0100
    @@ -7,9 +7,7 @@
     #define AD_IME_H_INCLUDED
     
     #include "adio.h"
    -#ifdef HAVE_IME_NATIVE_H
     #include "ime_native.h"
    -#endif
     
     #define ADIOI_IME_PREFIX        "ime:"
     #define ADIOI_IME_PREFIX_LEN    (sizeof(ADIOI_IME_PREFIX) - 1)
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_open.c psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_open.c
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_open.c	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/ad_ime/ad_ime_open.c	2021-11-09 14:53:59.545886977 +0100
    @@ -68,7 +68,7 @@
             return;
         }
     
    -    ime_fs->ime_filename = ADIOI_IME_Add_prefix(fd->filename);
    +    ime_fs->ime_filename = ADIOI_IME_Convert_filename(fd->filename);
     
         /* all processes open the file */
         ret = ime_native_open(ime_fs->ime_filename, amode, perm);
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/common/ad_fstype.c psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/common/ad_fstype.c
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/adio/common/ad_fstype.c	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/adio/common/ad_fstype.c	2021-11-09 14:53:59.545886977 +0100
    @@ -97,6 +97,20 @@
     #define DAOS_SUPER_MAGIC (0xDA05AD10)
     #endif
     
    +# if defined(ROMIO_IME)
    +/* fuse super magic is somehow missing in system includes */
    +# if !defined(FUSE_SUPER_MAGIC)
    +# define FUSE_SUPER_MAGIC 0x65735546
    +# endif
    +# include "ime_native.h"
    +# if (IME_NATIVE_API_VERSION) >= 131
    +# include "ime_ioctl.h"
    +
    +/* Disable auto-switching from posix to IME */
    +#define IME_NO_AUTO_NATIVE "IME_NO_AUTO_NATIVE"
    +# endif
    +# endif /* ROMIO_IME */
    +
     #ifdef ROMIO_HAVE_STRUCT_STATVFS_WITH_F_BASETYPE
     #ifdef HAVE_SYS_STATVFS_H
     #include <sys/statvfs.h>
    @@ -486,6 +500,39 @@
         }
     #endif
     
    +#ifdef FUSE_SUPER_MAGIC
    +    if (fsbuf.f_type == FUSE_SUPER_MAGIC) {
    +        /* fuse does not allow to override FUSE_SUPER_MAGIC
    +         * Any file system that is fused based needs to hook in
    +         * here and use its own ioctl.
    +         */
    +        #if defined ROMIO_IME && defined IM_FIOC_GET_F_TYPE
    +        char *dir;
    +        ADIO_FileSysType_parentdir(filename, &dir);
    +        int fd = open(dir, O_RDONLY);
    +        if (fd == -1)
    +        {
    +            /* dir should typically work, but try to fail back to
    +             * filename if it somehow failed
    +             */
    +            fd = open(filename, O_RDONLY);
    +        }
    +
    +        if (fd >= 0) {
    +            uint32_t f_type;
    +            int rc = ioctl(fd, IM_FIOC_GET_F_TYPE, &f_type);
    +            close(fd);
    +            if (rc == 0 && f_type == IME_SUPER_MAGIC &&
    +                getenv(IME_NO_AUTO_NATIVE) == NULL) {
    +                *fstype = ADIO_IME;
    +                return;
    +            }
    +        }
    +        #endif /* ROMIO_IME */
    +    }
    +#endif /* FUSE_SUPER_MAGIC */
    +
    +
     #endif /*ROMIO_HAVE_STRUCT_STATFS_WITH_F_TYPE */
     
     #ifdef ROMIO_UFS
    diff -ruN psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/configure.ac psmpi-5.5.0-1/mpich2/src/mpi/romio/configure.ac
    --- psmpi-5.5.0-1.orig/mpich2/src/mpi/romio/configure.ac	2021-10-21 20:06:57.000000000 +0200
    +++ psmpi-5.5.0-1/mpich2/src/mpi/romio/configure.ac	2021-11-09 14:54:27.824926093 +0100
    @@ -231,6 +231,8 @@
     --with-pvfs2=path - Path to installation of PVFS (version 2)],,)
     AC_ARG_WITH(mpi-impl,[
     --with-mpi-impl=name - Specify MPI implementation to build ROMIO for],,)
    +AC_ARG_WITH(ime,[
    +--with-ime=PATH - Path to installation of IME],,)
     dnl
     AC_ARG_WITH(mpi, [
     --with-mpi=path   - Path to instalation of MPI (headers, libs, etc)],,)
    @@ -806,6 +808,30 @@
         fi
     fi
     
    +#
    +# IME specific build path.
    +# Automatically adds IME to the file systems if not present
    +#
    +if test -n "${with_ime}" ; then
    +   AC_SUBST(IME_INSTALL_PATH, ["${with_ime}"])
    +fi
    +
    +ime_default_path="/opt/ddn/ime"
    +if test -n "${with_ime}" -o -e "${ime_default_path}/include/ime_native.h"; then
    +   # Use IME and the default path, if not specified or overriden
    +   with_ime="${ime_default_path}"
    +   file_system_ime=1
    +fi
    +
    +if test -n "${file_system_ime}" ; then
    +    CFLAGS="$CFLAGS -I${with_ime}/include"
    +    CPPFLAGS="$CPPFLAGS -I${with_ime}/include"
    +    LDFLAGS="$LDFLAGS -L${with_ime}/lib"
    +    LIBS="-lim_client -lim_common"
    +    export LD_LIBRARY_PATH="${with_ime}/lib:$LD_LIBRARY_PATH"
    +fi
    +
    +
     #############################################
     # This PVFS2 logic is special because it's hard to get it right if it comes
     # before the known_filesystems check loop above.  So we handle it down here,