Exemplo n.º 1
0
int job(struct thread_context *ctx) {
	int ret;
	struct timespec start, end;

		litmus_lock(lock_1);
									
		clock_gettime(CLOCK_REALTIME, &start);

		
		loop_for(ctx->id, 0.001);

		if(non_preemption == 0)
			loop_for(ctx->id, 0.72);
		if(non_preemption == 1)
			loop_for(ctx->id, 0.000504);
		
		clock_gettime(CLOCK_REALTIME, &end);


		ret = litmus_unlock(lock_1);					
		if (ret != 0)
			printf("%s\n", "unlock error");

	ctx->response_time[ctx->execute_count] = (end.tv_sec * 1000000000 + end.tv_nsec) - (start.tv_sec * 1000000000 + start.tv_nsec);
	ctx->execute_count += 1;

	return 0;
}
Exemplo n.º 2
0
static void fine_tune(double interval)
{
	double start, end, delta;

	start = wctime();
	loop_for(interval);
	end = wctime();
	delta = (end - start - interval) / interval;
	if (delta != 0)
		loop_length = loop_length / (1 - delta);
}
Exemplo n.º 3
0
static void debug_delay_loop(void)
{
	double start, end, delay;
	show_loop_length();
	while (1) {
		for (delay = 0.5; delay > 0.01; delay -= 0.01) {
			start = wctime();
			loop_for(delay);
			end = wctime();
			printf("%6.4fs: looped for %10.8fs, delta=%11.8fs, error=%7.4f%%\n",
			       delay,
			       end - start,
			       end - start - delay,
			       100 * (end - start - delay) / delay);
		}
	}
}
Exemplo n.º 4
0
static int job(double exec_time)
{
	loop_for(exec_time);
	sleep_next_period();
	return 0;
}