/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Programmer: Raymond Lu * Wednesday, 20 September 2006 * * Purpose: The public header file for the direct driver. */ #ifndef H5FDdirect_H #define H5FDdirect_H #ifdef H5_HAVE_DIRECT #define H5FD_DIRECT (H5FDperform_init(H5FD_direct_init)) #define H5FD_DIRECT_VALUE H5_VFD_DIRECT #else #define H5FD_DIRECT (H5I_INVALID_HID) #define H5FD_DIRECT_VALUE H5_VFD_INVALID #endif /* H5_HAVE_DIRECT */ #ifdef H5_HAVE_DIRECT #ifdef __cplusplus extern "C" { #endif /* Default values for memory boundary, file block size, and maximal copy buffer size. * Application can set these values through the function H5Pset_fapl_direct. */ #define MBOUNDARY_DEF 4096 #define FBSIZE_DEF 4096 #define CBSIZE_DEF 16 * 1024 * 1024 H5_DLL hid_t H5FD_direct_init(void); /** * \ingroup FAPL * * \brief Sets up use of the direct I/O driver * * \fapl_id * \param[in] alignment Required memory alignment boundary * \param[in] block_size File system block size * \param[in] cbuf_size Copy buffer size * \returns \herr_t * * \details H5Pset_fapl_direct() sets the file access property list, \p fapl_id, * to use the direct I/O driver, #H5FD_DIRECT. With this driver, data * is written to or read from the file synchronously without being * cached by the system. * * File systems usually require the data address in memory, the file * address, and the size of the data to be aligned. The HDF5 library’s * direct I/O driver is able to handle unaligned data, though that will * consume some additional memory resources and may slow * performance. To get better performance, use the system function \p * posix_memalign to align the data buffer in memory and the HDF5 * function H5Pset_alignment() to align the data in the file. Be aware, * however, that aligned data I/O may cause the HDF5 file to be bigger * than the actual data size would otherwise require because the * alignment may leave some holes in the file. * * \p alignment specifies the required alignment boundary in memory. * * \p block_size specifies the file system block size. A value of 0 * (zero) means to use HDF5 library’s default value of 4KB. * * \p cbuf_size specifies the copy buffer size. * * \since 1.8.0 * */ H5_DLL herr_t H5Pset_fapl_direct(hid_t fapl_id, size_t alignment, size_t block_size, size_t cbuf_size); /** * \ingroup FAPL * * \brief Retrieves direct I/O driver settings * * \fapl_id * \param[out] boundary Required memory alignment boundary * \param[out] block_size File system block size * \param[out] cbuf_size Copy buffer size * \returns \herr_t * * \details H5Pget_fapl_direct() retrieves the required memory alignment (\p * alignment), file system block size (\p block_size), and copy buffer * size (\p cbuf_size) settings for the direct I/O driver, #H5FD_DIRECT, * from the file access property list \p fapl_id. * * See H5Pset_fapl_direct() for discussion of these values, * requirements, and important considerations. * * \since 1.8.0 * */ H5_DLL herr_t H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary /*out*/, size_t *block_size /*out*/, size_t *cbuf_size /*out*/); #ifdef __cplusplus } #endif #endif /* H5_HAVE_DIRECT */ #endif