- (unsigned long)(size >> 20));
-
- /* Create bogus file if not done already */
- if (smpi_shared_malloc_bogusfile == -1) {
- /* Create a fd to a new file on disk, make it smpi_shared_malloc_blocksize big, and unlink it.
- * It still exists in memory but not in the file system (thus it cannot be leaked). */
- smpi_shared_malloc_blocksize = static_cast<unsigned long>(xbt_cfg_get_double("smpi/shared-malloc-blocksize"));
- XBT_DEBUG("global shared allocation. Blocksize %lu", smpi_shared_malloc_blocksize);
- char* name = xbt_strdup("/tmp/simgrid-shmalloc-XXXXXX");
+ size >> 20);
+ if(use_huge_page)
+ mem = (void*)ALIGN_UP((uint64_t)allocated_ptr, HUGE_PAGE_SIZE);
+ else
+ mem = allocated_ptr;
+
+ XBT_DEBUG("global shared allocation. Blocksize %lu", smpi_shared_malloc_blocksize);
+ /* Create a fd to a new file on disk, make it smpi_shared_malloc_blocksize big, and unlink it.
+ * It still exists in memory but not in the file system (thus it cannot be leaked). */
+ /* Create bogus file if not done already
+ * We need two different bogusfiles:
+ * smpi_shared_malloc_bogusfile_huge_page is used for calls to mmap *with* MAP_HUGETLB,
+ * smpi_shared_malloc_bogusfile is used for calls to mmap *without* MAP_HUGETLB.
+ * We cannot use a same file for the two type of calls, since the first one needs to be
+ * opened in a hugetlbfs mount point whereas the second needs to be a "classical" file. */
+ if(use_huge_page && smpi_shared_malloc_bogusfile_huge_page == -1) {
+ const char *const array[] = {huge_page_mount_point, "simgrid-shmalloc-XXXXXX", nullptr};
+ char *huge_page_filename = xbt_str_join_array(array, "/");
+ smpi_shared_malloc_bogusfile_huge_page = mkstemp(huge_page_filename);
+ XBT_DEBUG("bogusfile_huge_page: %s\n", huge_page_filename);
+ unlink(huge_page_filename);
+ xbt_free(huge_page_filename);
+ }
+ if(smpi_shared_malloc_bogusfile == -1) {
+ char *name = xbt_strdup("/tmp/simgrid-shmalloc-XXXXXX");