1 # Copyright (c) 2014-2016. The SimGrid Team. All rights reserved.
3 # This program is free software; you can redistribute it and/or modify it
4 # under the terms of the license (GNU LGPL) which comes with this package.
6 # CallType handler? name (resulttype,resultcast) (arg0name,arg0type,arg0cast) (arg1name,arg1type,arg1cast)
8 # CallType must be one of the three:
10 # - Func: returning a value immediately (within the same scheduling round)
11 # examples: all getters that only retrieve information with no side effect
13 # - Proc: not returning any value (but doing so immediately)
14 # examples: all setters, *_cancel
16 # - Blck: Blocking call that does not return in the same scheduling round.
17 # The answer requires some interaction with SURF, even if this can
18 # still occure at the same timestamp under some circonstances (eg
19 # if the surf_action cannot start because of resources that are down)
20 # examples: things that last some time (communicate, execute, mutex_lock)
22 # In a perfect world, these answers would also be handled by the
23 # script, but we are not there yet. Instead, the answer is manually
24 # generated in one of the SIMIX_post_*() functions, that are called
25 # when we unpack the done and failed actions returned by surf after
26 # a surf simulation round. Weird things happen if you forget to
27 # answer a given simcall in there...
29 # Handler? is either "H" if we need to generate a handler or "-" if we should go without handlers
31 # I wish we could completely remove the handlers as their only use is
32 # to adapt the interface between the exported symbol that is visible
33 # by the user applications and the internal symbol that is implemented
35 # The only remaining use of that mechanism is to add the caller
36 # identity as a parameter of internal call, but that could be
37 # automatized too (eg by having a special parameter type called "self")
39 # Please note that in addition to completing this file with your new simcall,
40 # you should complete the libsmx.c file by adding the corresponding function
41 # (aka. stub). Anyway, if you omit to do it, the invocation of ./simcalls.py will notify you ;)
42 # If you want to remove an handler, it is important to remove although
43 # the corresponding code (simcall_HANDLER_name_of_simcall(xxx) (note that comment the code
44 # is not sufficient, the python script does not check whether the code is commented or not).
45 # Last but not the least, you should declare the new simix call in
46 # ./include/simgrid/simix.h (otherwise you will get a warning at the
49 Proc H void vm_suspend (sg_host_t ind_vm);
50 Proc H void vm_resume (sg_host_t ind_vm);
51 Proc H void vm_shutdown (sg_host_t ind_vm);
52 Proc H void vm_save (sg_host_t ind_vm);
53 Proc H void vm_restore (sg_host_t ind_vm);
55 Proc H void process_kill (smx_process_t process);
56 Proc H void process_killall (int reset_pid);
57 Proc - void process_cleanup (smx_process_t process);
58 Blck H void process_suspend (smx_process_t process);
59 Proc H void process_resume (smx_process_t process);
60 Proc H void process_set_host (smx_process_t process, sg_host_t dest);
61 Func - int process_is_suspended (smx_process_t process);
62 Blck H int process_join (smx_process_t process, double timeout);
63 Blck H int process_sleep (double duration);
65 Func H smx_synchro_t execution_start (const char* name, double flops_amount, double priority, double bound, unsigned long affinity_mask);
66 Func - smx_synchro_t execution_parallel_start (const char* name, int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double amount, double rate);
67 Proc - void execution_cancel (smx_synchro_t execution);
68 Proc - void execution_set_priority (smx_synchro_t execution, double priority);
69 Proc - void execution_set_bound (smx_synchro_t execution, double bound);
70 Proc - void execution_set_affinity (smx_synchro_t execution, sg_host_t ws, unsigned long mask);
71 Blck H int execution_wait (smx_synchro_t execution);
73 Proc - void process_on_exit (smx_process_t process, int_f_pvoid_pvoid_t fun, void* data);
74 Proc - void process_auto_restart_set (smx_process_t process, int auto_restart);
75 Func H smx_process_t process_restart (smx_process_t process);
77 Func - smx_mailbox_t mbox_create (const char* name);
78 Proc - void mbox_set_receiver (smx_mailbox_t mbox, smx_process_t receiver);
80 Func H smx_synchro_t comm_iprobe (smx_mailbox_t mbox, int type, int src, int tag, simix_match_func_t match_fun, void* data);
81 Blck H void comm_send (smx_process_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout);
82 Func H smx_synchro_t comm_isend (smx_process_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_clean_func_t clean_fun, simix_copy_data_func_t copy_data_fun, void* data, int detached);
83 Blck H void comm_recv (smx_process_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate);
84 Func H smx_synchro_t comm_irecv (smx_process_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double rate);
85 Blck H int comm_waitany (xbt_dynar_t comms);
86 Blck H void comm_wait (smx_synchro_t comm, double timeout);
87 Blck H int comm_test (smx_synchro_t comm);
88 Blck H int comm_testany (xbt_dynar_t comms);
90 Func H smx_mutex_t mutex_init ();
91 Blck H void mutex_lock (smx_mutex_t mutex);
92 Func H int mutex_trylock (smx_mutex_t mutex);
93 Proc H void mutex_unlock (smx_mutex_t mutex);
95 Func - smx_cond_t cond_init ();
96 Proc - void cond_signal (smx_cond_t cond);
97 Blck H void cond_wait (smx_cond_t cond, smx_mutex_t mutex);
98 Blck H void cond_wait_timeout (smx_cond_t cond, smx_mutex_t mutex, double timeout);
99 Proc - void cond_broadcast (smx_cond_t cond);
101 Func - smx_sem_t sem_init (unsigned int capacity);
102 Proc H void sem_release (smx_sem_t sem);
103 Func H int sem_would_block (smx_sem_t sem);
104 Blck H void sem_acquire (smx_sem_t sem);
105 Blck H void sem_acquire_timeout (smx_sem_t sem, double timeout);
106 Func H int sem_get_capacity (smx_sem_t sem);
108 Blck H sg_size_t file_read (smx_file_t fd, sg_size_t size, sg_host_t host);
109 Blck H sg_size_t file_write (smx_file_t fd, sg_size_t size, sg_host_t host);
110 Blck H smx_file_t file_open (const char* fullpath, sg_host_t host);
111 Blck H int file_close (smx_file_t fd, sg_host_t host);
112 Func - int file_unlink (smx_file_t fd, sg_host_t host);
113 Func H sg_size_t file_get_size (smx_file_t fd);
114 Func H sg_size_t file_tell (smx_file_t fd);
115 Func H int file_seek (smx_file_t fd, sg_offset_t offset, int origin);
116 Func H xbt_dynar_t file_get_info (smx_file_t fd);
117 Func H int file_move (smx_file_t fd, const char* fullpath);
119 Func H sg_size_t storage_get_free_size (smx_storage_t storage);
120 Func H sg_size_t storage_get_used_size (smx_storage_t name);
121 Func - xbt_dict_t storage_get_properties (smx_storage_t storage);
122 Func - xbt_dict_t storage_get_content (smx_storage_t storage);
124 Func H xbt_dict_t asr_get_properties (const char* name);
125 Func H int mc_random (int min, int max);
126 Proc - void set_category (smx_synchro_t synchro, const char* category);
128 Proc - void run_kernel (void* code);