Linux, fseek
Код в студию. Телепатов нема.
int *a;
char **x;
...
for (int i = 0; i < n; i++)
{
if (!fseek(file, a[i], SEEK_SET)
{
// нет места
} else write(...);
}
беда в том, что действительно больше ничего нет.
linux-vger.kernel.org
Не забудь написать чтобы они делали тебе CC.
Не забудь написать чтобы они делали тебе CC.
спасибо за дельный совет.
Есть еще опции:
- Терпеть.
- Продолжать пользоваться костылём.
Очень интересно. Если чего ответят -- держи в курсе дела.
Неужели ты не подписан?
Написал тестовую прогу, отлично работает без тормозов, пока я вот набираю это сообщение.
Процессор один, файловая система - reiserfs, файл размером 500M, смещения случайные, размер буфера при каждой записи - пробовал 4000 и 100000 байт.
Я так понял что у него жОское SMP
На 2xXeon(HT) с 2G памяти файл в 1000M отлично помещается в кеш, прога работает без всяких тормозов.
Не понятно вот что: если кэш забит, как ведет себя fseek? И как ведет себя write?
Архитектура? Сколько памяти? Какая файловая система?
Оставить комментарий
Werdna
Ситуация следующая. Есть некоторая программа, делающая много fseek на достаточно большие расстояния, файл примерно пол гига. Все работает под Линуксом, пробовалось с разными ядрами, как 2.4, так и 2.6.Проблема: машина впадает в ступор. Все 8 процессоров свободны, работает чуть-чуть init, чуть-чуть top. Отходит, и опять в ступор.
Думал, что проблема в свопе или в памяти. Убрал своп -- то же самое.
Костыль, который помог: после каждого fseek (их порядка 200 тысяч) пишу в лог: так и так, сделал фсик. В итоге тормоза убрались.
Может, кто рюзнет, в чем маза? Советы серии "Линукс сосет, поставь фрю" не катят.