Проблемы с запуском приложений при копировании большого файла
Проблема в следующем:
Дисковые кеши зажирают память полностью, это бы и ничего, ибо она какбы освобождается при необходимости сразу. Но создаётся два неприятных эффекта:
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. В нём уже, во время копирования проверять на отклик приложения (если есть желание проверить, пройдись по кейсу что я описал вначале, запусти оперу, когда уже будет скопировано данных больше чем у тебя размер оперативки). Наиболее тормозит запуск новых, работать с уже запущенными можно в принципе нормально, хотя иногда и они подвисают (видимо когда к диску обращаются).
В консоли же, тормоза не сильно заметны, ибо приложения лёгкие совсем.
Ты же, просто собрал статистику по факту, что вот - оно копируется и как память расходуется. Но вопрос ведь не в этом. Как она расходуется я и сам вижу и более того, могу пояснить :)
По поводу полученных результатов:
"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:
То, что "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, не считаем :-)
Это смущает больше всего.
Какой хард
Какой хард (поподробнее этот момент)?
Показаниям 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
.
У меня действительно хард больше 8 Мб/с на одном разделе не выжимает.
Это видно и под Линь и под Вынь :-)
Не думаю, чтобы скорость ограничивалась чем-то искуственно
Мой config:
потому что 250 - is a good compromise :-)
IMHO, для
IMHO, для медленных хардов (а 5400 это медленно), нужен anticipatory, который для USB выставляется автоматом, а для системного его нужно задавать при сборке ядра или через параметры загрузчика.
Да, и мы ничего не знаем о файловой системе... Скорость нужно мерить через cp и dd, hdparm - это больше попугаи.
Quote: Да, и мы
отвечаю цитатой одного из своих предыдущих сообщений:
Читайте пж-та внимательнее.
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