]> rtime.felk.cvut.cz Git - frescor/frsh-include.git/blob - frsh_configuration_parameters.h
tabs
[frescor/frsh-include.git] / frsh_configuration_parameters.h
1 // -----------------------------------------------------------------------
2 //  Copyright (C) 2006 - 2007 FRESCOR consortium partners:
3 //
4 //    Universidad de Cantabria,              SPAIN
5 //    University of York,                    UK
6 //    Scuola Superiore Sant'Anna,            ITALY
7 //    Kaiserslautern University,             GERMANY
8 //    Univ. Politécnica  Valencia,           SPAIN
9 //    Czech Technical University in Prague,  CZECH REPUBLIC
10 //    ENEA                                   SWEDEN
11 //    Thales Communication S.A.              FRANCE
12 //    Visual Tools S.A.                      SPAIN
13 //    Rapita Systems Ltd                     UK
14 //    Evidence                               ITALY
15 //
16 //    See http://www.frescor.org for a link to partners' websites
17 //
18 //           FRESCOR project (FP6/2005/IST/5-034026) is funded
19 //        in part by the European Union Sixth Framework Programme
20 //        The European Union is not liable of any use that may be
21 //        made of this code.
22 //
23 //
24 //  based on previous work (FSF) done in the FIRST project
25 //
26 //   Copyright (C) 2005  Mälardalen University, SWEDEN
27 //                       Scuola Superiore S.Anna, ITALY
28 //                       Universidad de Cantabria, SPAIN
29 //                       University of York, UK
30 //
31 //   FSF API web pages: http://marte.unican.es/fsf/docs
32 //                      http://shark.sssup.it/contrib/first/docs/
33 //
34 //  This file is part of FRSH API
35 //
36 //  FRSH API is free software; you can  redistribute it and/or  modify
37 //  it under the terms of  the GNU General Public License as published by
38 //  the Free Software Foundation;  either  version 2, or (at  your option)
39 //  any later version.
40 //
41 //  FRSH API  is distributed  in  the hope  that  it  will  be useful,  but
42 //  WITHOUT  ANY  WARRANTY;     without  even the   implied   warranty  of
43 //  MERCHANTABILITY  or  FITNESS FOR  A  PARTICULAR PURPOSE. See  the  GNU
44 //  General Public License for more details.
45 //
46 //  You should have  received a  copy of  the  GNU  General Public License
47 //  distributed  with  FRSH API;  see file COPYING.   If not,  write to the
48 //  Free Software  Foundation,  59 Temple Place  -  Suite 330,  Boston, MA
49 //  02111-1307, USA.
50 //
51 //  As a special exception, if you include this header file into source
52 //  files to be compiled, this header file does not by itself cause
53 //  the resulting executable to be covered by the GNU General Public
54 //  License.  This exception does not however invalidate any other
55 //  reasons why the executable file might be covered by the GNU General
56 //  Public License.
57 // -----------------------------------------------------------------------
58 //frsh_configuration_parameters.h
59 //==============================================
60 //  ******** *******    ********  **      **
61 //  **///// /**////**  **//////  /**     /**
62 //  **      /**   /** /**        /**     /**
63 //  ******* /*******  /********* /**********
64 //  **////  /**///**  ////////** /**//////**
65 //  **      /**  //**        /** /**     /**
66 //  **      /**   //** ********  /**     /**
67 //  //       //     // ////////   //      //
68 //
69 // FRSH(FRescor ScHeduler), pronounced "fresh"
70 //==============================================
71 #ifndef _FRSH_CONFIGURATION_PARAMETERS_H_
72 #define _FRSH_CONFIGURATION_PARAMETERS_H_
73
74 #include <unistd.h>
75
76 FRSH_CPP_BEGIN_DECLS
77
78 /**
79  * @file frsh_configuration_parameters.h
80  *
81  * This file contains parameters that govern the capabilities of the
82  * FRescor ScHeduler.  They must be in concordance with the respective
83  * OS configuration.
84  **/
85
86
87 /**
88  * @defgroup config Configuration Parameters
89  *
90  * Here we define global parameters that will have an important
91  * influence on FRSH behaviour.  They must also be coherent with the
92  * respective values in the underlaying OS.
93  *
94  * @{
95  **/
96
97
98 /**
99  * This symbol specifies whether the scheduler will make a
100  * schedulability test of the requested contract or not
101  **/
102 #define FRSH_ADMISSION_TEST_IS_ENABLED        true
103
104 /**
105  * This symbol specifies whether the service thread will try to
106  * assign automatically the priorities of each vres
107  **/
108 #define FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE true
109
110 #define FRSH_DISTRIBUTED_MODULE_SUPPORTED false
111
112
113 /** This defines 1 resource_id value for systems that have only one
114     resource of a kind. **/
115 #define FRSH_RESOURCE_ID_DEFAULT 0
116 #define FRSH_CPU_ID_DEFAULT 0
117 #define FRSH_NETWORK_ID_DEFAULT 0
118
119 /**
120  * @defgroup internal Array size for memory optimization
121  * @ingroup config
122  *
123  * Tune these values for optimizing the amount of memory used by the
124  * implementation
125  *
126  * @{
127  **/
128
129 /** Maximum number of accepted contracts (vres) **/
130 #define FRSH_MAX_N_VRES                    125
131
132
133 /** Maximum number of threads that may be scheduled by the framework **/
134 #define FRSH_MAX_N_THREADS                    25
135
136
137 /**
138  * Maximum number of critical sections that can be stored in a
139  * contract parameters object
140  **/
141 #define FRSH_MAX_N_CRITICAL_SECTIONS          25
142
143 /**
144  * Maximum number of memory areas that can be specified for a
145  * wite operation in a critical section
146  **/
147 #define FRSH_MAX_N_MEMORY_AREAS               4
148
149 /**
150  * Maximum number of utilization values (pairs of budget and period)
151  * that can be stored in a contract parameters object
152  **/
153 #define FRSH_MAX_N_UTILIZATION_VALUES         5
154
155 /** Number of importance levels for spare capacity allocation **/
156 #define FRSH_N_IMPORTANCE_LEVELS     5
157
158 /**
159  * Maximum number of synchronization objects
160  **/
161 #define FRSH_MAX_N_SYNCH_OBJECTS              5
162
163
164 /** Maximum number of shared objects **/
165 #define FRSH_MAX_N_SHARED_OBJECTS             100
166
167 /** Maximum number of send and receive endpoints in a single node **/
168 #define FRSH_MAX_N_ENDPOINTS 10
169
170 /** Maximum number of chars for a contract label **/
171 #define FRSH_CONTRACT_LABEL_MAXLENGTH 15
172
173 /*@}*/
174
175 /**
176  * @defgroup schedandservice Scheduler and Service thread parameters
177  * @ingroup config
178  *
179  * The current implementation in MaRTE OS uses the Application-Defined
180  * Scheduling Interface (proposed to the POSIX standardization
181  * committee), to create a fixed-priority-based scheduler that
182  * operates under the rules of the FIRST scheduling framework.
183  *
184  * In this implementation there are two special threads:
185  *   - The application scheduler thread, that
186  *     implements the scheduler
187  *
188  *   - The service thread, that is in charge of
189  *     negotiating and renegotiating contracts
190  *     concurrently with the application
191  *
192  * The following symbols are necessary to adapt the application to the
193  * underlying fixed priority scheduler
194  *
195  * @{
196  **/
197
198 /**
199  * Priority assigned to the application scheduler; it should be above
200  * the priorities of the application threads and of the service
201  * thread, and it should be at least 1 level below the maximum of the
202  *  system
203  **/
204 #define FRSH_SCHEDULER_PRIORITY       (fosa_get_priority_max() -  FOSA_ADS_SCHEDULER_PRIO_DIFF)
205
206 /**
207  * Real-time signal number reserved for the application scheduler to
208  * manage its timers.
209  **/
210 #define FRSH_SCHEDULER_SIGNAL                 FRSH_SIGNAL_MIN
211
212
213
214 /**
215  * The highest priority that can be assigned to an application thread,
216  * it should be defined as one level less than the
217  * FRSH_SCHEDULER_PRIORITY
218  **/
219 #define FRSH_HIGHEST_THREAD_PRIORITY  (FRSH_SCHEDULER_PRIORITY-1)
220
221
222 /**
223  * The lowest priority that can be assigned to an application thread,
224  * it should be at least 1 level above the minimum of the system
225  **/
226 #define FRSH_LOWEST_THREAD_PRIORITY    ( fosa_get_priority_min() + 4)
227
228 /**
229  * Each call to the functions that negotiate or renegotiate a contract
230  * or that change the quality and importance generates a request for
231  * the service thread that we call a service job.  This job will be
232  * pending in a queue until executed by the service thread.  The
233  * following symbol represents the maximum number of requests that can
234  * be simultaneously queued.
235  **/
236 #define FRSH_MAX_N_SERVICE_JOBS  (FRSH_MAX_N_VRES * 2)
237
238
239 /**
240  * In order to bound the background activity of the scheduler (i.e.,
241  * the admission tests necessary for the negotiation and
242  * re-negotiation of contracts), a service thread has been defined. It
243  * runs at a given priority level and has a budget and period
244  * assigned.
245  *
246  **/
247
248 /** Initial period of the service thread (timespec) **/
249 #define FRSH_SERVICE_THREAD_PERIOD_USECS 5000000 /* 5 secs */
250
251 /** Initial budget of the service thread (timespec) **/
252 #define FRSH_SERVICE_THREAD_BUDGET_USECS 1000 /* 1 msec */
253
254 /**
255  * Initial priority of the service thread, it has to be lower than the
256  * FRSH_SCHEDULER_PRIORITY, and is set according to its period and the
257  * expected response times for reconfiguration or tunning of the
258  * system.
259  **/
260 #define FRSH_SERVICE_THREAD_PRIORITY          (FRSH_LOWEST_THREAD_PRIORITY+1) //3 3    //3 1
261
262
263 /*@}*/
264
265
266 /**
267  * @defgroup miscconfig Miscellaneous Config parameters
268  * @ingroup config
269  *
270  * @{
271  **/
272
273 /**
274  * Maximum number of vres that can be simultaneusly waiting for
275  * being signaled in a synchronization object
276  **/
277 #define FRSH_MAX_N_VRES_IN_SYNCH_OBJECT    4
278
279
280 /**
281  * Maximum number of events that can be pending to be signaled in a
282  * synchronization object
283  **/
284 #define FRSH_MAX_N_EVENTS_IN_SYNCH_OBJECT    100
285
286 /**
287  * Maximum number of pending replenishments in each sporadic server
288  **/
289 #define FRSH_MAX_N_PENDING_REPLENISHMENTS     25   //250
290
291
292 /**
293  * Maximum number of target windows in a table driven schedule
294  **/
295 #define FRSH_MAX_N_TARGET_WINDOWS             100
296
297 /**
298  * The cpu time given by the round robin scheduler
299  * to the threads in the background (timespec)
300  **/
301 #define FRSH_RR_SLICE_CPU_TIME_USECS 100000 // 0.1 sec
302
303 /**
304  * This function must be supplied by the user to map the preemption
305  * level values given in the contracts for the vres, to priority
306  * values in the range that is allowed by the present implementation
307  * for application threads. The value returned by the function must
308  * fit in the interval defined by the constants:
309  * [FRSH_LOWEST_THREAD_PRIORITY, FRSH_HIGHEST_THREAD_PRIORITY]
310  **/
311 int frsh_priority_map (unsigned long plevel);
312
313 /**
314  * This symbol specifies the maximum number of chars that are stored
315  * of a given shared_object_id, so this is the maximum length used
316  * in comparisons
317  **/
318 #define FRSH_MAX_SIZE_SHARED_OBJ_LABEL           15
319
320
321 /** Maximum number of networks accesible from a node **/
322 #define FRSH_MAX_N_NETWORK_IDS                1
323
324 /**
325  * Maximum number of vres that can be given in a vres list
326  * to the group negotiation/cancellation primitive
327  **/
328 #define FRSH_MAX_N_VRES_VALUES              10
329
330 /**
331  * Maximum number of contracts that can be given in a contracts list
332  * to the group negotiation/cancellation primitive
333  **/
334 #define FRSH_MAX_N_CONTRACT_VALUES              10
335
336 /**
337  * Default overheads of shared object protection mechanisms
338  * These values should be calibrated on each specific execution platform
339  */
340
341 // fixed overhead for saving the environment and subsequently
342 // aborting a critical section; units in nanoseconds
343
344 #define FRSH_SO_FIXED_ABORT_OVHD        0
345
346
347 // fixed overhead for copying a memory area, in nanoseconds
348
349 #define FRSH_SO_FIXED_AREA_OVHD         0
350
351
352 // variable overhead for copying a memory area; units in nanoseconds per kbyte
353
354 #define FRSH_SO_NANOS_PER_KB            0
355
356
357 /*@}*/
358
359 /*@}*/
360
361 FRSH_CPP_END_DECLS
362
363 #endif /* _FRSH_CONFIGURATION_PARAMETERS_H_ */
364