Ejemplo n.º 1
0
static int host(int argc, char *argv[])
{
  char name[2048];
  int id = MSG_process_self_PID();
  snprintf(name,2048,"%s%i", FILENAME1, id);
  msg_file_t file = MSG_file_open(name, NULL);
  XBT_INFO("process %d is writing!", id);
  MSG_file_write(file, 3000000);
  XBT_INFO("process %d goes to sleep for %d seconds", id, id);
  MSG_process_sleep(id);
  XBT_INFO("process %d is writing again!", id);
  MSG_file_write(file, 3000000);
  XBT_INFO("process %d goes to sleep for %d seconds", id, 6 - id);
  MSG_process_sleep(6-id);
  XBT_INFO("process %d is reading!", id);
  MSG_file_seek(file, 0, SEEK_SET);
  MSG_file_read(file, 3000000);
  XBT_INFO("process %d goes to sleep for %d seconds", id, id);
  MSG_process_sleep(id);
  XBT_INFO("process %d is reading again!", id);
  MSG_file_seek(file, 0, SEEK_SET);
  MSG_file_read(file, 3000000);

  XBT_INFO("process %d => Size of %s: %llu", id, MSG_file_get_name(file), MSG_file_get_size(file));
  MSG_file_close(file);

  return 0;
}
Ejemplo n.º 2
0
/**
 * \ingroup msg_file_management
 * \brief Copy a file to another location on a remote host.
 * \param file : the file to move
 * \param host : the remote host where the file has to be copied
 * \param fullpath : the complete path destination on the remote host
 * \return If successful, the function returns MSG_OK. Otherwise, it returns
 * MSG_TASK_CANCELED.
 */
msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpath)
{
  msg_file_priv_t file_priv = MSG_file_priv(file);
  sg_size_t read_size;

  /* Find the host where the file is physically located and read it */
  msg_storage_t storage_src =(msg_storage_t) xbt_lib_get_elm_or_null(storage_lib, file_priv->storageId);
  msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
  msg_host_t attached_host = MSG_get_host_by_name(storage_priv_src->hostname);
  MSG_file_seek(file, 0, SEEK_SET);
  read_size = simcall_file_read(file_priv->simdata->smx_file, file_priv->size, attached_host);

  /* Find the real host destination where the file will be physically stored */
  xbt_dict_cursor_t cursor = NULL;
  char *mount_name, *storage_name, *file_mount_name, *host_name_dest;
  msg_storage_t storage_dest = NULL;
  msg_host_t host_dest;
  size_t longest_prefix_length = 0;

  xbt_dict_t storage_list = simcall_host_get_mounted_storage_list(host);
  xbt_dict_foreach(storage_list,cursor,mount_name,storage_name){
    file_mount_name = (char *) xbt_malloc ((strlen(mount_name)+1));
    strncpy(file_mount_name,fullpath,strlen(mount_name)+1);
    file_mount_name[strlen(mount_name)] = '\0';

    if(!strcmp(file_mount_name,mount_name) && strlen(mount_name)>longest_prefix_length){
      /* The current mount name is found in the full path and is bigger than the previous*/
      longest_prefix_length = strlen(mount_name);
      storage_dest = (msg_storage_t) xbt_lib_get_elm_or_null(storage_lib, storage_name);
    }
    free(file_mount_name);
  }
Ejemplo n.º 3
0
static void simread(const char *const *action) {
  const char *processid = action[0];
  const char *file_name = action[2];
  const char *index = action[4];
  const char *position_str =action[5];
  const char *size_str = action[6];
  msg_file_t file = NULL;
  sg_size_t size = parse_size(size_str);
  sg_offset_t position= parse_offset(position_str);
  double clock = MSG_get_clock();       /* this "call" is free thanks to inlining */
  
  if(position<2880 && (position+size)<2880)
  {
  file = get_file_descriptor("fast",file_name,index);
  ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
  MSG_file_seek(file,position,SEEK_SET);
  MSG_file_read(file, size);
  }
  else if(position<2880 && (position+size)>2880)
  {
  //read the Head part
  file = get_file_descriptor("fast",file_name,index);
  ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
  MSG_file_seek(file,position,SEEK_SET);
  MSG_file_read(file, (2880-position));
  //read the data part
  file = get_file_descriptor("slow",file_name,index);
  ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
  MSG_file_seek(file,2880,SEEK_SET);
  MSG_file_read(file, size-(2880-position));
  }
  else
  {
  XBT_INFO("3 position is  %llu ,size is %llu",position,size);
  file = get_file_descriptor("slow",file_name,index);
  ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
  MSG_file_seek(file,position,SEEK_SET);
  MSG_file_read(file, size);
  }
  
  log_action(action, MSG_get_clock() - clock);
  XBT_INFO("read  worker %s%s is done",processid,index);
}
Ejemplo n.º 4
0
int host(int argc, char *argv[]){
  msg_file_t file = NULL;
  const char* filename;
  sg_size_t read, write;

  file = MSG_file_open(argv[1], NULL);
  filename = MSG_file_get_name(file);
  XBT_INFO("Opened file '%s'",filename);
  MSG_file_dump(file);

  XBT_INFO("Try to read %llu from '%s'",MSG_file_get_size(file),filename);
  read = MSG_file_read(file, MSG_file_get_size(file));
  XBT_INFO("Have read %llu from '%s'. Offset is now at: %llu",read,filename,
      MSG_file_tell(file));
  XBT_INFO("Seek back to the begining of the stream...");
  MSG_file_seek(file, 0, SEEK_SET);
  XBT_INFO("Offset is now at: %llu", MSG_file_tell(file));

  MSG_file_close(file);

  if (argc > 5){
    file = MSG_file_open(argv[2], NULL);
    filename = MSG_file_get_name(file);
    XBT_INFO("Opened file '%s'",filename);
    XBT_INFO("Try to write %llu MiB to '%s'",
        MSG_file_get_size(file)/1024,
        filename);
    write = MSG_file_write(file, MSG_file_get_size(file)*1024);
    XBT_INFO("Have written %llu bytes to '%s'.",write,filename);

    msg_host_t src, dest;
    src= MSG_host_self();
    dest = MSG_get_host_by_name(argv[3]);
    if (atoi(argv[5])){
      XBT_INFO("Move '%s' (of size %llu) from '%s' to '%s'", filename,
           MSG_file_get_size(file), MSG_host_get_name(src),
           argv[3]);
      MSG_file_rmove(file, dest, argv[4]);
    } else {
      XBT_INFO("Copy '%s' (of size %llu) from '%s' to '%s'", filename,
           MSG_file_get_size(file), MSG_host_get_name(src),
           argv[3]);
      MSG_file_rcopy(file, dest, argv[4]);
      MSG_file_close(file);
    }
  }

  return 0;
}
Ejemplo n.º 5
0
static void simread(const char *const *action) {
  const char *processid = action[0];
  const char *file_name = action[2];
  const char *index = action[4];
  const char *position_str =action[5];
  const char *size_str = action[6];
  msg_file_t file = NULL;
  sg_size_t size = parse_size(size_str);
  sg_offset_t position= parse_offset(position_str);
  double clock = MSG_get_clock();       /* this "call" is free thanks to inlining */
  file = get_file_descriptor(file_name,index);
  ACT_DEBUG("Entering Read: %s (size: %llu)", NAME, size);
  MSG_file_seek(file,position,SEEK_SET);
  MSG_file_read(file, size);
  log_action(action, MSG_get_clock() - clock);
  XBT_INFO("read  worker %s%s is done",processid,index);
}
Ejemplo n.º 6
0
int host(int argc, char *argv[])
{
  msg_file_t file = NULL;
  sg_size_t read,write;
  msg_storage_t st;
  const char* st_name;

  if(!strcmp(MSG_process_get_name(MSG_process_self()),"0")){
    file = MSG_file_open(FILENAME1, NULL);
    MSG_file_dump(file);
    st_name = "Disk4";
  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"1")) {
    file = MSG_file_open(FILENAME2, NULL);
    st_name = "Disk2";
  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"2")){
    file = MSG_file_open(FILENAME3, NULL);
    st_name = "Disk3";
  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"3")){
    file = MSG_file_open(FILENAME4, NULL);
    st_name = "Disk1";
  }
  else xbt_die("FILENAME NOT DEFINED %s",MSG_process_get_name(MSG_process_self()));

  const char* filename = MSG_file_get_name(file);
  XBT_INFO("\tOpen file '%s'",filename);
  st = MSG_storage_get_by_name(st_name);

  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));

  /* Try to read for 10MB */
  read = MSG_file_read(file, 10000000);
  XBT_INFO("\tHave read %llu from '%s'",read,filename);

  /* Write 100KB in file from the current position, i.e, end of file or 10MB */
  write = MSG_file_write(file, 100000);
  XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu",write,filename,
           MSG_file_get_size(file));


  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));

  /* rewind to the beginning of the file */
  XBT_INFO("\tComing back to the beginning of the stream for file '%s'",
           filename);
  MSG_file_seek(file, 0, SEEK_SET);

  /* Try to read 110KB */
  read = MSG_file_read(file, 110000);
  XBT_INFO("\tHave read %llu from '%s' (of size %llu)",read,filename,
      MSG_file_get_size(file));

  /* rewind once again to the beginning of the file */
  XBT_INFO("\tComing back to the beginning of the stream for file '%s'",
           filename);
  MSG_file_seek(file, 0, SEEK_SET);

  /* Write 110KB in file from the current position, i.e, end of file or 10MB */
  write = MSG_file_write(file, 110000);
  XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu", write,filename,
      MSG_file_get_size(file));

  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));

  XBT_INFO("\tClose file '%s'",filename);
  MSG_file_close(file);


  return 0;
}
Ejemplo n.º 7
0
JNIEXPORT void JNICALL Java_org_simgrid_msg_File_seek(JNIEnv *env, jobject jfile, jlong offset, jlong origin) {
  msg_file_t file = jfile_get_native(env, jfile);
  MSG_file_seek(file, static_cast<sg_offset_t>(offset), static_cast<int>(origin));
}