2 * Copyright 2013 Paweł Dziepak, pdziepak@quarnos.org.
3 * Distributed under the terms of the MIT License.
5 #ifndef _KERNEL_LOAD_TRACKING_H
6 #define _KERNEL_LOAD_TRACKING_H
12 const int32 kMaxLoad
= 1000;
13 const bigtime_t kLoadMeasureInterval
= 1000;
14 const bigtime_t kIntervalInaccuracy
= kLoadMeasureInterval
/ 4;
18 compute_load(bigtime_t
& measureTime
, bigtime_t
& measureActiveTime
, int32
& load
,
21 if (measureTime
== 0) {
26 bigtime_t deltaTime
= now
- measureTime
;
28 if (deltaTime
< kLoadMeasureInterval
)
32 ASSERT(oldLoad
>= 0 && oldLoad
<= kMaxLoad
);
34 int32 newLoad
= measureActiveTime
* kMaxLoad
;
35 newLoad
/= max_c(deltaTime
, 1);
36 newLoad
= max_c(min_c(newLoad
, kMaxLoad
), 0);
38 measureActiveTime
= 0;
41 deltaTime
+= kIntervalInaccuracy
;
42 int n
= deltaTime
/ kLoadMeasureInterval
;
48 newLoad
*= (1 << n
) - 1;
49 load
= (load
+ newLoad
) / (1 << n
);
50 ASSERT(load
>= 0 && load
<= kMaxLoad
);
57 #endif // _KERNEL_LOAD_TRACKING_H