コード例 #1
0
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;
}
コード例 #3
0
ファイル: shim_signal.c プロジェクト: ash9211/graphene
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);
}
コード例 #4
0
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;
}