Linux, fseek

Werdna

Ситуация следующая. Есть некоторая программа, делающая много fseek на достаточно большие расстояния, файл примерно пол гига. Все работает под Линуксом, пробовалось с разными ядрами, как 2.4, так и 2.6.
Проблема: машина впадает в ступор. Все 8 процессоров свободны, работает чуть-чуть init, чуть-чуть top. Отходит, и опять в ступор.
Думал, что проблема в свопе или в памяти. Убрал своп -- то же самое.
Костыль, который помог: после каждого fseek (их порядка 200 тысяч) пишу в лог: так и так, сделал фсик. В итоге тормоза убрались.
Может, кто рюзнет, в чем маза? Советы серии "Линукс сосет, поставь фрю" не катят.

Julie16

Код в студию. Телепатов нема.

Werdna

код примерно следующий:
  int *a;
char **x;

...

for (int i = 0; i < n; i++)
{
if (!fseek(file, a[i], SEEK_SET)
{
// нет места
} else write(...);
}

беда в том, что действительно больше ничего нет.

Julie16

linux-vger.kernel.org
Не забудь написать чтобы они делали тебе CC.

Werdna

спасибо за дельный совет.

sergey_m

> Советы серии "Линукс сосет, поставь фрю" не катят.
Есть еще опции:
- Терпеть.
- Продолжать пользоваться костылём.

Landstreicher

Очень интересно. Если чего ответят -- держи в курсе дела.

sergey_m

> Очень интересно. Если чего ответят -- держи в курсе дела.
Неужели ты не подписан?

Marinavo_0507

Не получается воспроизвести проблему.
Написал тестовую прогу, отлично работает без тормозов, пока я вот набираю это сообщение.
Процессор один, файловая система - reiserfs, файл размером 500M, смещения случайные, размер буфера при каждой записи - пробовал 4000 и 100000 байт.

Julie16

Я так понял что у него жОское SMP

Marinavo_0507

На 2xXeon(HT) с 2G памяти файл в 1000M отлично помещается в кеш, прога работает без всяких тормозов.

Werdna

Да, вот че еще: файловый кэш забит, память забита. Но выгружаться -- ничего не выгружается, машина просто ложится, даже консоль подвисает.
Не понятно вот что: если кэш забит, как ведет себя fseek? И как ведет себя write?

Marinavo_0507

Архитектура? Сколько памяти? Какая файловая система?
Оставить комментарий
Имя или ник:
Комментарий: