LINUX.ORG.RU

12309


0

1

Добрый день.

Скажите, только меня угнетает 12309 в любой теме, в которой упоминаются тормоза и фризы? Может начнем резать тех, кто не пытаясь разобраться с проблемой постит только «12309»?

★★★☆

Последнее исправление: vostrik (всего исправлений: 1)
Ответ на: комментарий от iZEN

не въехал - как mc скопировал 4 гига на fat, видимо размер у него беззнаковым хранится, второй раз на 2.5 гигах cp ругнулась, видимо часть ещё в буфере была, ну да ладно...
такой тест

#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>

#define	TIME_CYCLE_SEC	50

typedef unsigned long long ull;

static ull max_wait_time = 0;

void termination_handler (int signum) {
	if(signum == SIGINT) {
		printf("----------------------------\n");
		printf ("\b\bМаксимальная задержка за всё время = %llu микросекунд\n", max_wait_time);
		exit(0);
	}
}

int max_wait_test() {

	signal(SIGINT, termination_handler);

	struct timezone tz;
	tz.tz_minuteswest = 0;
	tz.tz_dsttime = 0;

	struct timeval tv;

	gettimeofday(&tv, &tz);
	ull last_time = ((ull)tv.tv_sec) * 1000000 + (ull)tv.tv_usec;
	ull start_tv_sec = (ull)tv.tv_sec;
	ull last_tv_sec = start_tv_sec;
	ull average_wait_time = 0;

	while( 1 == 1 ) {

		gettimeofday(&tv, &tz);

		ull mcs = ((ull)tv.tv_sec) * 1000000 + (ull)tv.tv_usec;

		ull delta_time = mcs - last_time;

		if(delta_time > max_wait_time)
			max_wait_time = delta_time;

		if(delta_time > average_wait_time)
			average_wait_time = delta_time;


		// noop на несколько наносекунд
        struct timespec wait_ts;
		wait_ts.tv_sec = 0;
		wait_ts.tv_nsec = 10;
		nanosleep(&wait_ts,NULL);

		// Выводим каждые TIME_CYCLE_SEC секунд среднюю задержку за эти TIME_CYCLE_SEC секунд
		if(last_tv_sec + TIME_CYCLE_SEC <= tv.tv_sec) {
			printf("----------------------------\n");
			printf("Время выполнения = %llu секунд\n", last_tv_sec - start_tv_sec);
			printf("Максимальная задержка за %d секунд = %llu микросекунд\n", TIME_CYCLE_SEC, average_wait_time);
			last_tv_sec = tv.tv_sec;
			mcs = ((ull)tv.tv_sec) * 1000000 + (ull)tv.tv_usec;
		}

		// сохраняем последнюю отметку времени
		last_time = mcs;
	}

	return EXIT_SUCCESS;
}

int main(int argc, char * argv[]) {

	max_wait_test();

	return EXIT_SUCCESS;
}
и результат
----------------------------
Время выполнения = 0 секунд
Максимальная задержка за 50 секунд = 5068 микросекунд
----------------------------
Время выполнения = 50 секунд
Максимальная задержка за 50 секунд = 8292 микросекунд
----------------------------
Время выполнения = 100 секунд
Максимальная задержка за 50 секунд = 10281 микросекунд
----------------------------
Время выполнения = 150 секунд
Максимальная задержка за 50 секунд = 10281 микросекунд
----------------------------
Время выполнения = 200 секунд
Максимальная задержка за 50 секунд = 11898 микросекунд
----------------------------
Время выполнения = 250 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 300 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 350 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 400 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 450 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 500 секунд
Максимальная задержка за 50 секунд = 12966 микросекунд
----------------------------
Время выполнения = 550 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 600 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 650 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 700 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 750 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 800 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 850 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 900 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 950 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1000 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1050 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1100 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1150 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1200 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1250 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1300 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1350 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1400 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1450 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1500 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1550 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1600 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1650 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1700 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1750 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1800 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1850 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1900 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 1950 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 2000 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Время выполнения = 2050 секунд
Максимальная задержка за 50 секунд = 13088 микросекунд
----------------------------
Максимальная задержка за всё время = 13088 микросекунд
Видно, что менее, чем за 10 минут процессорное время, выделяемое процессу стабилизировалось, что говорит о корректной работе CFS. теперь надо подумать (может кто подскажет) - как возле nanosleep вставить генератор случайных прерываний, чтобы можно было потестить CFQ/BFQ... первым вариантом может быть сброс данных на ту же самую флешку... но хотелось бы генерить X-овые сообщения, чтобы можно было наконец детерминировать этот 12309, если таковой вообще существует .)

p.s. с Вас, iZEN, тест на FreeBSD =)

backbone ★★★★★
()
Ответ на: комментарий от iZEN

ну скомпилить приведённый пример, запустить
потом, выполнить
truncate VeryBigFile --size 4G & (cp VeryBigFile /path/to/destination)& watch ls -l /path/to/destination
о результатах отписаться =)

backbone ★★★★★
()
Ответ на: комментарий от iZEN

тогда я ставлю FreeBSD !!! =) благо, тут компик притащили на починку, можно, не отвлекаясь от дел)))

backbone ★★★★★
()
Ответ на: комментарий от backbone

ошибка закралась в код, отсюда и накапливалась задержка...

62a63
> 			gettimeofday(&tv, &tz);
на zen-sources(без rt-патчей) задержки ~ в 10 раз ниже, ~500мкс.

backbone ★★★★★
()
Ответ на: комментарий от backbone

и

66d65
< 			average_wait_time = 0;
сопсно, терь отловить 12309 проще, в демон это завернуть и вывод в к-н файл.log...

backbone ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.