int main(int argc, char *argv[]) { int thread_support; char root_path[MPI_PMEM_MAX_ROOT_PATH]; off_t file_size; MPI_Win_pmem_version *versions; MPI_Win_pmem win; void *win_data; int result = 0; MPI_Init_thread_pmem(&argc, &argv, MPI_THREAD_MULTIPLE, &thread_support); sprintf(root_path, "%s/0", argv[1]); MPI_Win_pmem_set_root_path(root_path); // Create window and 3 checkpoints. allocate_window(&win, &win_data, "test_window", 1024); create_checkpoint(win, false); create_checkpoint(win, false); create_checkpoint(win, false); MPI_Win_free_pmem(&win); open_versions_metadata_file(MPI_COMM_WORLD, "test_window", &versions, &file_size); // Create window object and set checkpoint versions. set_default_window_metadata(&win, MPI_COMM_WORLD); win.mode = MPI_PMEM_MODE_CHECKPOINT; win.modifiable_values->last_checkpoint_version = 1; set_checkpoint_versions(&win, versions); unmap_pmem_file(MPI_COMM_WORLD, versions, file_size); result = check_checkpoint_versions(win, 2, 1, 2); free(win.modifiable_values); MPI_Finalize_pmem(); return result; }
int main(int argc, char *argv[]) { int thread_support; char root_path[MPI_PMEM_MAX_ROOT_PATH]; char *window_name = "test_window"; void *win_data; MPI_Aint win_size = 1024; MPI_Win_pmem win; int error_code; int result = 0; MPI_Init_thread_pmem(&argc, &argv, MPI_THREAD_MULTIPLE, &thread_support); sprintf(root_path, "%s/0", argv[1]); MPI_Win_pmem_set_root_path(root_path); // Create window and 3 checkpoints. allocate_window(&win, &win_data, window_name, win_size); create_checkpoint(win, false); create_checkpoint(win, false); create_checkpoint(win, false); MPI_Win_free_pmem(&win); // Try to delete window version. MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN); error_code = MPI_Win_pmem_delete_version(window_name, 3); MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL); if (error_code != MPI_ERR_PMEM_CKPT_VER) { mpi_log_error("Error code is %d, expected %d.", error_code, MPI_ERR_PMEM_CKPT_VER); result = 1; } MPI_Finalize_pmem(); return result; }
static void suspend_upcall (PAL_PTR event, PAL_NUM arg, PAL_CONTEXT * context) { if (IS_INTERNAL_TID(get_cur_tid())) goto ret_exception; if (ask_for_checkpoint) { int ans = message_confirm("checkpoint execution " "(\'k\' to kill the process)", "yk"); if (ans == 'K' || ans == 'k') goto kill; if (ans != 'Y' && ans != 'y') goto ret_exception; shim_tcb_t * tcb = SHIM_GET_TLS(); assert(tcb && tcb->tp); struct shim_signal signal; __store_context(tcb, context, &signal); IDTYPE session = 0; char cpdir[20]; if (create_dir("checkpoint-", cpdir, 20, NULL) < 0) goto ret_exception; sys_printf("creating checkpoint \"%s\"...\n", cpdir); if (create_checkpoint(cpdir, &session) < 0) goto ret_exception; ipc_checkpoint_send(cpdir, session); kill_all_threads(tcb->tp, CHECKPOINT_REQUESTED, SIGINT); join_checkpoint(tcb->tp, &signal.context); goto ret_exception; } kill: deliver_signal(ALLOC_SIGINFO(SIGINT, si_pid, 0), NULL); ret_exception: DkExceptionReturn(event); }
int main(int argc, char *argv[]) { int thread_support; char root_path[MPI_PMEM_MAX_ROOT_PATH]; void *win_data; MPI_Win_pmem win; MPI_Win_pmem_windows windows; MPI_Win_pmem_versions versions; int result = 0; MPI_Init_thread_pmem(&argc, &argv, MPI_THREAD_MULTIPLE, &thread_support); sprintf(root_path, "%s/0", argv[1]); MPI_Win_pmem_set_root_path(root_path); // Create 3 windows, delete the middle one, create 3 checkpoints in remaining windows and delete one checkpoint version in each. allocate_window(&win, &win_data, "1", 512); create_checkpoint(win, false); create_checkpoint(win, false); create_checkpoint(win, false); MPI_Win_free_pmem(&win); allocate_window(&win, &win_data, "2", 1024); MPI_Win_free_pmem(&win); allocate_window(&win, &win_data, "3", 2048); create_checkpoint(win, false); create_checkpoint(win, false); create_checkpoint(win, false); MPI_Win_free_pmem(&win); MPI_Win_pmem_delete_version("1", 0); MPI_Win_pmem_delete("2"); MPI_Win_pmem_delete_version("3", 1); // Retrieve and check metadata. MPI_Win_pmem_list(&windows); MPI_Win_pmem_get_versions(windows, 0, &versions); if (versions.size != 2) { mpi_log_error("Number of returned versions for window '1' is %d, expected 2.", versions.size); MPI_Finalize_pmem(); return 1; } if (versions.versions[0].version != 1) { mpi_log_error("Version at index 0 of window '1' is %d, expected 1.", versions.versions[0].version); result = 1; } if (versions.versions[1].version != 2) { mpi_log_error("Version at index 1 of window '1' is %d, expected 2.", versions.versions[1].version); result = 1; } MPI_Win_pmem_get_versions(windows, 1, &versions); if (versions.size != 2) { mpi_log_error("Number of returned versions for window '3' is %d, expected 2.", versions.size); MPI_Finalize_pmem(); return 1; } if (versions.versions[0].version != 0) { mpi_log_error("Version at index 0 of window '3' is %d, expected 0.", versions.versions[0].version); result = 1; } if (versions.versions[1].version != 2) { mpi_log_error("Version at index 1 of window '3' is %d, expected 2.", versions.versions[1].version); result = 1; } MPI_Finalize_pmem(); return result; }