From 4b45fa76c6065991dc9b63720c22b994e6ad7b93 Mon Sep 17 00:00:00 2001 From: amstokely Date: Fri, 12 Dec 2025 14:18:07 -0700 Subject: [PATCH 1/2] Increase default PnetCDF header size to 128 KB This reduces the likelihood of header reallocation as metadata grows. Header reallocation is extremely expensive and can significantly degrade parallel I/O performance. --- src/external/SMIOL/smiol.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/external/SMIOL/smiol.c b/src/external/SMIOL/smiol.c index 8a34ed23bb..3248e49bf9 100644 --- a/src/external/SMIOL/smiol.c +++ b/src/external/SMIOL/smiol.c @@ -336,10 +336,12 @@ int SMIOL_open_file(struct SMIOL_context *context, const char *filename, MPI_Comm_free(&io_group_comm); return SMIOL_INVALID_FORMAT; } - + MPI_Info info; + MPI_Info_create(&info); + MPI_Info_set(info, "nc_header_align_size", "131072"); ierr = ncmpi_create(io_file_comm, filename, (filecmode | NC_CLOBBER), - MPI_INFO_NULL, + info, &((*file)->ncidp)); } (*file)->state = PNETCDF_DEFINE_MODE; From c95d83a002862bb35a60f8d10da77f470a7295e4 Mon Sep 17 00:00:00 2001 From: Andy Stokely Date: Thu, 18 Dec 2025 17:04:07 -0700 Subject: [PATCH 2/2] Added call to MPI_Free_Info. --- src/external/SMIOL/smiol.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/external/SMIOL/smiol.c b/src/external/SMIOL/smiol.c index 3248e49bf9..4f5ee9d9c8 100644 --- a/src/external/SMIOL/smiol.c +++ b/src/external/SMIOL/smiol.c @@ -12,6 +12,7 @@ #define PNETCDF_DEFINE_MODE 0 #define PNETCDF_DATA_MODE 1 #define MAX_REQS 256 +#define PNETCDF_HEADER_ALIGN_SIZE_STR "131072" #endif #define START_COUNT_READ 0 @@ -243,6 +244,7 @@ int SMIOL_open_file(struct SMIOL_context *context, const char *filename, int io_group; MPI_Comm io_file_comm; MPI_Comm io_group_comm; + MPI_Info info = MPI_INFO_NULL; int ierr; @@ -336,13 +338,13 @@ int SMIOL_open_file(struct SMIOL_context *context, const char *filename, MPI_Comm_free(&io_group_comm); return SMIOL_INVALID_FORMAT; } - MPI_Info info; MPI_Info_create(&info); - MPI_Info_set(info, "nc_header_align_size", "131072"); + MPI_Info_set(info, "nc_header_align_size", PNETCDF_HEADER_ALIGN_SIZE_STR); ierr = ncmpi_create(io_file_comm, filename, (filecmode | NC_CLOBBER), info, &((*file)->ncidp)); + MPI_Info_free(&info); } (*file)->state = PNETCDF_DEFINE_MODE; #endif @@ -350,7 +352,7 @@ int SMIOL_open_file(struct SMIOL_context *context, const char *filename, #ifdef SMIOL_PNETCDF if ((*file)->io_task) { ierr = ncmpi_open(io_file_comm, filename, - NC_WRITE, MPI_INFO_NULL, + NC_WRITE, info, &((*file)->ncidp)); } (*file)->state = PNETCDF_DATA_MODE; @@ -359,7 +361,7 @@ int SMIOL_open_file(struct SMIOL_context *context, const char *filename, #ifdef SMIOL_PNETCDF if ((*file)->io_task) { ierr = ncmpi_open(io_file_comm, filename, - NC_NOWRITE, MPI_INFO_NULL, + NC_NOWRITE, info, &((*file)->ncidp)); } (*file)->state = PNETCDF_DATA_MODE;