Проблемы с запуском приложений при копировании большого файла

Проблема в следующем:

Дисковые кеши зажирают память полностью, это бы и ничего, ибо она какбы освобождается при необходимости сразу. Но создаётся два неприятных эффекта:
1) "сразу" - понятие весьма не шустрое на практике;
2) когда подключаев USB хард, копируеш на него гигов так 20 данных, то работать вообще практически не возможно, если только приложения не были заранее открыты;

Очень мешает именно 2-ой случай, поясню его.

Предварительно приведя интересующие параметры ядра:
Preemption Model (Voluntary Kernel Preemption (Desktop))
Timer frequency (1000 HZ)

Так вот, в силу того, что система собрана для десктопа, отклик есть хороший, но вот приложения начинают запускаться просто неимоверно долго. Например, во время копирования большого объёма данных на внешний носитель (равно как и с него) - нажимает на ярлычёк оперы, и ждём.. в лучшем случае через минуту (а то и через 5) мы увидем её окно (в штатном режиме не более чем через 10 сек). Пробуем запускать и маленькие приложения - xterm etc.. дожидаемся снова долго. И так вот, когда буферный кеш уже успеет захавать память и мозг, приложение уже запустить практически не реально.

Тема подобная уже обсуждалась на форуме, но там было про сервер, и не было вроде так критично. И как я помню, закончили на шутливом предложении запускать по крону сброс кешей, но это же не научный подход .. :)

Прочитав кучу статей о управлении памятью в линуксе, ничего по данному вопросу не нашёл лучше - "sync && echo 1 > /proc/sys/vm/drop_caches". Вот к примеру в этой статье - http://www.faqs.org/docs/linux_admin/buffer-cache.html , если коротко, то сказано, что всё должно быть круто и память автоматически сама освободиться, но на практике не круто. Открыть что-то новое, при паррлельном переносе больших объёмов данных (больше размера оперативки) практически не возможно.

Пробовал собирать ядро в разными комбинации Timer frequency & Preemption Model, также пробовал на разных файловых системах, но толку ни какого, суть не меняется (а при серверной Preemption Model и низком Timer frequency вообще работать практически невозможно - ещё и подвисает всё).

Ядро - 2.6.23-tuxonice-r6 (на всей ветке 2.6 были подобные проблемы).
Диск - Sata на ноуте (при копировании на/с USB хард скорость для него нормальная - 20-30 мбайт/сек).
swap раздела вообще нет (когда был полгода назад, ничего не изменялось).
ОЗУ - 2G, занята обычно на 10-30% до начала копирования.
Планировщик - CFQ;
Загрузка процессора во время ахтунга небольшая, два ядра не больше чем на 10% загружены.

Хотелось бы иметь возможность не так агрессивно использовать дисковый кеш (понимаю, что сравнение некорректное, но всё же (в плане эффекта для пользователя) - в винде, сколько бы ни копировал, всё великолепно запускалось, визуально на работу с системой почти не влияет).

Если кто боролся с этим, или в курсе вопроса - подскажите пж-та что можно сделать.

Пока поищу просветления в исходниках ядра..

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

Мой try

У меня 512 Мб ОЗУ.
Подключил USB бокс с IDE-винтом внутри.
Буду копировать 4 Gb с винта на /var (тоже IDE)
На винте - NTFS, на /var - reiserfs
три консоли:
* mc копирует файлы
* watch free смотрит за "-/+ buffers/cache"
* top смотрит за %MEM

Результат:
+ mc копирует на 15.62 Мб/с
+ free c изначального 198208 упал до 195764
+ top говорит, что mc использует %MEM 0.4

CONFIG_DEFAULT_IOSCHED="anticipatory"

Т.О. воспроизвести тормоза не удалось
(20 Гб вместо 4Гб при моём ОЗУ имхо мало изменят картину).

Хочу узнать
* как именно было видно, что в тормозах виноваты дисковые кеши.
* чем копируете файлы?

Я сразу сказал

Я сразу сказал о том, что речь идёт о десктопе. Т.о чтобы воспроизвести, то надо иметь запущенный DE. В нём уже, во время копирования проверять на отклик приложения (если есть желание проверить, пройдись по кейсу что я описал вначале, запусти оперу, когда уже будет скопировано данных больше чем у тебя размер оперативки). Наиболее тормозит запуск новых, работать с уже запущенными можно в принципе нормально, хотя иногда и они подвисают (видимо когда к диску обращаются).

В консоли же, тормоза не сильно заметны, ибо приложения лёгкие совсем.

Ты же, просто собрал статистику по факту, что вот - оно копируется и как память расходуется. Но вопрос ведь не в этом. Как она расходуется я и сам вижу и более того, могу пояснить :)

По поводу полученных результатов:

Цитата:
+ mc копирует на 15.62 Мб/с
+ free c изначального 198208 упал до 195764
+ top говорит, что mc использует %MEM 0.4

"free c изначального 198208 упал до 195764" - я сразу сказал, что память захаванная под дисковый кеш считается свободной, она освобождается по первому требованию реальных приложений. В силу сказанного - top будет говорить что "mc использует %MEM 0.4" & free сильно не измениться.

PS. Общаая загрузка памяти разным контентом (ядерным, кешем и приложениями) хорошо просматривается на kde-шном аплете - System Monitor.

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

Удалось

Удалось немного локализовать проблему.

Сегодня подключил USB хард и копировал с его одного раздела на другой, без задействия системного.
Результат - память расходовалась как обычно, т.е заполнилась кешем сразу, а вот тормозов не было.. Всё работало очень шустро.

Понятно, что когда в компе один хард, это узкое место в производительности, но планировщик ведь должен это нормальмально разруливать.. Особенно cfq, который нацелен на десктоп.

Пока, буду глубже копать его алгоритм работы...

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

Локализовать

Локализовать проблему вы смогли, а во увидеть истину нет :)

А причина либо в самом винте либо в файловой системе (скорее и в том и том).
Планировщик CFQ это еще пол дела, а другая половина - файловая система. Она тоже должна поддерживать "справедливое" распараллеливание нагрузки. Я использую XFS, в неё заранее заложена эффективная работа при больших и очень больших параллельных нагрузках (благодаря технологиям описанным здесь http://www.opennet.ru/docs/RUS/xfs_arch/ )

И еще на на ноутах винты очень слабые. Имея две системы, обычный ПК и ноут, одинаково настроенные и все разделы на xfs - на ноуте все равно при одновременное загрузке диска запуск приложений происходит медленнее чем на ПК - а скольку настройки одинаковы вывод только один: узкое место сам винт.

PS: вы зря прицепились к Disk buffer cache - он тут ни причем и чем и всегда сбрасывается при нехватки памяти - он просто не может быть причиной таких "неприятных эффектов".

Как бы оно

Как бы оно криво не звучало, но я написал именно не локализовать, а "немного локализовать проблему" :)

Вывод сделать вообще сложно, из того, что я заметил. Это было лишь первое приближение.
Увидеть же истину в этом вопросе, думаю не удасться и нам обоим, вот так вот сразу, поэтому и говорить о ней пока не стоит. Сомневаюсь, что тут обойдётся без копания в коде и составления/проведения дополнительных тестов.

В высказыванием - "а другая половина - файловая система" не могу согласиться. Это безусловно важно, но не уверен, что это половина.

Изначально, для себя, я составил следующую связку факторов влияющую на производительность IO операций:
Планировщик & FS & Дисковая подсистема & Неучтённые факторы.

И вот какова у каждого степень влияния, в случае ноутбука с одним SATA хардом, ещё надо выяснить.

По поводу файловой системы, XFS у меня и есть, но я не заостряю на этом внимание, т.к ситуация такая повторялась и на ext3 & reiser.

И про более убогогие возможности дисковой подсистемы на ноуте я в курсе..

Смотрю именно на планировщик, т.к пока считаю что:
~10-15-ть секунд на запуск приложения kps (при копировании большого файла), вместо обычных ~1-3 сек;
~25-30 на kate, вместо ~3-6 сек;
слишком большая трата за быстрое копирование файла.

По субъективным ощущениям, под копирование файла выделяется всё время на IO, и планировщик ведёт себя очень жадно, когда кто-то хочет прочитать хотя бы немного с диска (тот же ksp очень маленькая тулза, и шаренные библиотеки, которые он юзает уже закружены в память вместе с kde, с диска ему надо совсем немного прочитать для загрузки) ..

Т.о, хотелось бы как-то ограничить, допустим скорость копирования, чтобы всегда был некоторая зарезервированная полоска ( вспоминается сразу QOS & ATM :)) )

PS:

Цитата:
PS: вы зря прицепились к Disk buffer cache - он тут ни причем и чем и всегда сбрасывается при нехватки памяти - он просто не может быть причиной таких "неприятных эффектов".

То, что "Disk buffer cache" остался в стороне, стало очевидно после моего предыдущего поста.

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

А может стоит

А может стоит проверить для начала

hdparm -t /dev/TARGET

Из первого

Из первого поста, когда я писал о скорости копирования, можно было понять, что с этим нет проблем.

Среднее:
/dev/sda:
Timing buffered disk reads: 122 MB in 3.06 seconds = 39.92 MB/sec

Инфа по харду:
Hard Drive:
Capacity: 160GB
Speed: 5400rpm
Interface: Serial ATA
Impact Protection: G-Sensor™ Shock Protection - Hard Disk Drive
Protection

Проблема не на единичной машине, на 4-х ноутах одно и то же. Аналогично и на домашнем компе, когда только с системным работаеш.

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

Это SOURCE

Это SOURCE
или TARGET

Это вроде как выглядит в проблему
в СКОРОСТИ сбросе кеша
а это проблема в передаче данных
на TARGET

Прежде чем

Прежде чем задавать следующий вопрос, убедитесь, что вы в теме и прочитали всё что было написано ранее.

Проблему сузили до случая копирования в пределах одного харда. Результаты hdparm testing это харда я привёл.

Реальная скорость копирования:

20-30 мегабайт в секунду - при копировании на внешний хард,
15-20 -||- - при копировании в пределах харда.

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

вторая попытка

Цитата:
Проблему сузили до случая копирования в пределах одного харда.

Сижу под KDE, наблюдаю показания ksysguard.
Позапускал FF2, VirtualBox, оценил.
Начинаю тестировать ОДИН винт.
Timing buffered disk reads: 154 MB in 3.02 seconds = 50.94 MB/sec
Буду копировать файлы суммарно 7Гб (в соседнюю папку на том же разделе)
Жёлтый кэш сразу подскочил. Копирование идёт на уровне 8 Мб/с
Запускаю ВиртМашинку. Запустилась без тормозов (а у меня всего 512 Мб ОЗУ)
Запустил FF2 но пошёл жёсткий swapping, не считаем :-)

Цитата:
Проблема не на единичной машине, на 4-х ноутах одно и то же. Аналогично и на домашнем компе

Это смущает больше всего.

Какой хард

Какой хард (поподробнее этот момент)?

Показаниям hdparm я никогда не доверял по скорости, смотрел только порядок... но всё же, можно заметить интересную вещь..

У тебя hdparm выдал больше по скорости - 50.94 MB/sec, но "Копирование идёт на уровне 8 Мб/с", разумеется в пределах одного раздела.

У меня же скорость по hdparm - 39.92 MB/sec, а копирование в пределах раздела 15-20 Мб/с..

В связи с этим, повляется предположение:
Либо у тебя просто хард не выжимает больше 8 Мб/с, либо чем-то скорость ограничивается чем-то искуственно, для того, чтобы был запас.

Принеди пж-та ещё свои:
- IO Scheduler;
- Preemption Model;
- Timer frequency;

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

.

hda: ST3160812A, ATA DISK drive
hda: selected mode 0x45
hda: max request size: 512KiB
hda: 312581808 sectors (160041 MB) w/8192KiB Cache, CHS=19457/255/63, UDMA(100)
hda: cache flushes supported

У меня действительно хард больше 8 Мб/с на одном разделе не выжимает.
Это видно и под Линь и под Вынь :-)
Не думаю, чтобы скорость ограничивалась чем-то искуственно
Мой config:

CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250

потому что 250 - is a good compromise :-)

IMHO, для

IMHO, для медленных хардов (а 5400 это медленно), нужен anticipatory, который для USB выставляется автоматом, а для системного его нужно задавать при сборке ядра или через параметры загрузчика.

Да, и мы ничего не знаем о файловой системе... Скорость нужно мерить через cp и dd, hdparm - это больше попугаи.

Quote: Да, и мы

Цитата:
Да, и мы ничего не знаем о файловой системе...

отвечаю цитатой одного из своих предыдущих сообщений:

Цитата:
По поводу файловой системы, XFS у меня и есть, но я не заостряю на этом внимание, т.к ситуация такая повторялась и на ext3 & reiser.

Читайте пж-та внимательнее.

PS. Сейчас как раз играюсь с IO Scheduler...

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=160G, mem=2G, hybrid video: nvidia 7400 + GMA 950

>> PS. Сейчас как

>> PS. Сейчас как раз играюсь с IO Scheduler...

Ну так чем экскременты ваши закончились?

Я вот определили что на слабых винтах (какие устанавливают в буки) лучще использовать DEADLINE планировщик - отклик на запуск программ становиться заметно быстрее, особенно при запуске не больших программ.

_________________________________________________________________________
/ Enchant /
Никакую проблему нельзя решить на том же уровне, на котором она возникла...

Quote:Ну так чем

Цитата:
Ну так чем экскременты ваши закончились?

"экскременты" я выделять пока-что не начал, а вот про экспирименты могу сказать следующее -
Много я всякого делал с ядром тогда .. :) потюнил другие моменты, но именно эта проблема так и осталась. Времени было пару дней, дальше возможности смотреть уже не было.

По поводу - DEADLINE, стоял у меня когда-то давно, и точно помню что с переходом на CFQ я себя стал гораздо увереннее чувствовать. Вечерком попробую конечно, но думаю это не поможет.

PS. Взял себе 200-ти гиговый хард, на 7200 оборотов, с буффером в 16 метров. Эффект очень позитивный :) Опера раньше запускалась 6-8 секунд, сразу после переноса системы на новый хард, запустилась за 3 сек, и дальше продолжает меня этим радовать. Скорость копирования поднялась с "15-20 мбайт - при копировании в пределах харда" до 20-30.

Но, проблема со сложностями при запуске приложений во время копирования большого файла осталась, и субъективно, легче не стало..

PPS. Врагу не пожелаю менять самому хард на sony vaio..

Sony Vaio SZ460 Premium, Core2Duo 2.0, hdd=200G:7200, mem=2G, hybrid video: nvidia 7400 + GMA 950

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".