Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
235cacd72f1a2b6ad1865c6b03bc3ad268c3fb25
[simgrid.git] / src / simix / simcalls.in
1 # Copyright (c) 2014-2016. The SimGrid Team. All rights reserved.
2
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.
5
6 # CallType handler? name (resulttype,resultcast) (arg0name,arg0type,arg0cast) (arg1name,arg1type,arg1cast)
7
8 # CallType must be one of the three:
9 #
10 #  - Func: returning a value immediately (within the same scheduling round)
11 #    examples: all getters that only retrieve information with no side effect
12 #
13 #  - Proc: not returning any value (but doing so immediately) 
14 #    examples: all setters, *_cancel 
15 #
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)
21 #
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...
28
29 # Handler? is either "H" if we need to generate a handler or "-" if we should go without handlers
30
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 
34 # by the kernel. 
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")
38
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
47 # compilation time)
48
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);
54
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);
64
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);
72
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);
76
77 Func - smx_mailbox_t mbox_create (const char* name);
78 Proc - void          mbox_set_receiver (smx_mailbox_t mbox, smx_process_t receiver);
79
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);
89
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);
94
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);
100
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);
107
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);
118
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);
123
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);
127
128 Proc - void run_kernel (void* code);