mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 07:37:02 +02:00
REORG: sched: move the stolen CPU time detection to sched_entering_poll()
That's where that code initially was but it had been moved to activity_count_runtime() for pure reasons of dependency loops. These ones are no longer true so we can move that code back to the scheduler and keep it where the information are updated and checked.
This commit is contained in:
parent
6dfab112e1
commit
1cdb531ec8
@ -42,9 +42,6 @@ void report_stolen_time(uint64_t stolen);
|
||||
*/
|
||||
static inline void activity_count_runtime()
|
||||
{
|
||||
uint64_t new_mono_time;
|
||||
uint64_t new_cpu_time;
|
||||
int64_t stolen;
|
||||
uint32_t run_time;
|
||||
uint32_t up, down;
|
||||
|
||||
@ -54,22 +51,6 @@ static inline void activity_count_runtime()
|
||||
up = 1000;
|
||||
down = up * 99 / 100;
|
||||
|
||||
new_cpu_time = now_cpu_time();
|
||||
new_mono_time = now_mono_time();
|
||||
|
||||
if (ti->prev_cpu_time && ti->prev_mono_time) {
|
||||
new_cpu_time -= ti->prev_cpu_time;
|
||||
new_mono_time -= ti->prev_mono_time;
|
||||
stolen = new_mono_time - new_cpu_time;
|
||||
if (unlikely(stolen >= 500000)) {
|
||||
stolen /= 500000;
|
||||
/* more than half a millisecond difference might
|
||||
* indicate an undesired preemption.
|
||||
*/
|
||||
report_stolen_time(stolen);
|
||||
}
|
||||
}
|
||||
|
||||
run_time = (before_poll.tv_sec - after_poll.tv_sec) * 1000000U + (before_poll.tv_usec - after_poll.tv_usec);
|
||||
run_time = swrate_add(&activity[tid].avg_loop_us, TIME_STATS_SAMPLES, run_time);
|
||||
|
||||
|
@ -658,10 +658,33 @@ static inline void sched_leaving_poll(int timeout, int interrupted)
|
||||
|
||||
/* Collect date and time information before calling poll(). This will be used
|
||||
* to count the run time of the past loop and the sleep time of the next poll.
|
||||
* It also compares the elasped and cpu times during the activity period to
|
||||
* estimate the amount of stolen time, which is reported if higher than half
|
||||
* a millisecond.
|
||||
*/
|
||||
static inline void sched_entering_poll()
|
||||
{
|
||||
uint64_t new_mono_time;
|
||||
uint64_t new_cpu_time;
|
||||
int64_t stolen;
|
||||
|
||||
gettimeofday(&before_poll, NULL);
|
||||
|
||||
new_cpu_time = now_cpu_time();
|
||||
new_mono_time = now_mono_time();
|
||||
|
||||
if (ti->prev_cpu_time && ti->prev_mono_time) {
|
||||
new_cpu_time -= ti->prev_cpu_time;
|
||||
new_mono_time -= ti->prev_mono_time;
|
||||
stolen = new_mono_time - new_cpu_time;
|
||||
if (unlikely(stolen >= 500000)) {
|
||||
stolen /= 500000;
|
||||
/* more than half a millisecond difference might
|
||||
* indicate an undesired preemption.
|
||||
*/
|
||||
report_stolen_time(stolen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* This function register a new signal. "lua" is the current lua
|
||||
|
Loading…
Reference in New Issue
Block a user