| Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 18.03.10 14:21 |
| Всем привет! Есть функция (CopyFile, ниже описание), которая копирует файлы (1 Гб каждый, 1000 файлов) блоками по 64К. Если копировать файлы на локальные диски, то все ок. Если же файлы копируются на raid массив, то иногда возникает ситуация, когда процесс pdflush начинают отъедать 100% CPU. Код функции такой:
ОС SLES SP 2 x64. Читал, что функция write работает в асинхронном режиме, если файл не открыт с флагом O_SYNC, и просто копирует данные в ядро, которое сбрасывает эти самые данные на диск с помощью pdflush. Вобщем вопрос такой: как мне поправить данную проблему? И может ли помочь в этом открытие файла для записи с флагом O_SYNC? Кто-нибудь сталкивался с подобным? Заранее благодарен! С уважением, Евгений |
| Re: Копирование файлов и pdflush 100% CPU | |
| От: | MShura | ||
| Дата: | 18.03.10 15:19 | ||
| Оценка: | 1 (1) | ||
| P>Вобщем вопрос такой: как мне поправить данную проблему? И может ли помочь в этом открытие файла для записи с флагом O_SYNC? Лучше O_DIRECT Там правда требования к буфферу, но зато для копирования без буфферизации самое оно. |
| Re[2]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 18.03.10 16:06 |
| Здравствуйте, MShura, Вы писали: MS>Лучше O_DIRECT MS>Там правда требования к буфферу, но зато для копирования без буфферизации самое оно. Спасиб, посмотрю. Ну так, получается, это из-за асинхронной записи такое происходит или дело в чем-то другом и, если да, то в чем? С уважением, Евгений |
| Re[3]: Копирование файлов и pdflush 100% CPU | |
| От: | MShura | ||
| Дата: | 18.03.10 16:43 |
| P>Спасиб, посмотрю. Ну так, получается, это из-за асинхронной записи такое происходит или дело в чем-то другом и, если да, то в чем? Запусти параллельно копированию vmstat 1 Сделай echo 3 > /proc/sys/vm/drop_caches Увидишь, что количество буфферов (памяти отведенной под буфферизованный ввод/вывод) упало Начни копировать своей программой с исходным текстом Увидишь, что количество буфферов возрастет до некоторого предела и будет колебаться вокруг него. pdflush следит за количеством буфферов и начитает скидывать dirty страницы на диск и освобождать буффера когда такой памяти становится слишком много. Кроме того 256Кб еще кэш для файла. Если работать с O_DIRECT, то кэш для файла 0, и страницы сразу пишутся на диск. Итого для pdflush не будет работы. Недостаток — если захочешь прочитать только что записанные данные — их придется читать с диска. Без O_DIRECT чтения с диска в этом случае возможно не будет. Также c O_DIRECT твой алгоритм будет строго последователен независимо от того на одном носителе источник/цель или на разных. Если захочешь оптимизировать его для случая когда источник/цель на разных носителях, то придется его переписывать. |
| Re[4]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 18.03.10 16:52 |
| Здравствуйте, MShura, Вы писали: MS>Недостаток — если захочешь прочитать только что записанные данные — их придется читать с диска. MS>Без O_DIRECT чтения с диска в этом случае возможно не будет. Это не очень хорошо, т.к. после записи файлы могут читаться, причем через проекцию в память. А с O_SYNC как дела будут обстоять? Проверить сейчас не могу, поэтому спрашиваю. С уважением, Евгений |
| Re[5]: Копирование файлов и pdflush 100% CPU | |
| От: | MShura | ||
| Дата: | 18.03.10 17:10 | ||
| Оценка: | 2 (1) | ||
| P>Это не очень хорошо, т.к. после записи файлы могут читаться, причем через проекцию в память. P>А с O_SYNC как дела будут обстоять? Проверить сейчас не могу, поэтому спрашиваю. С O_SYNC проблемы с производительностью будут те-же что и у O_DIRECT |
| Re: Копирование файлов и pdflush 100% CPU | |
| От: | ДимДимыч | ||
| Дата: | 18.03.10 17:26 |
| Здравствуйте, -prus-, Вы писали: P>Если копировать файлы на локальные диски, то все ок. P>Если же файлы копируются на raid массив, то иногда возникает ситуация, когда процесс pdflush начинают отъедать 100% CPU. С какими опциями монитирутся файловая система на локальном диске, и с какими на raid? Может достаточно будет просто монтировать раздел с опцией sync. Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ) |
| Re[6]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 18.03.10 17:26 |
| Здравствуйте, MShura, Вы писали: MS>С O_SYNC проблемы с производительностью будут те-же что и у O_DIRECT Я понял... Попробую поэкспериментировать. Спасиб, еще раз. С уважением, Евгений |
| Re[2]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 18.03.10 17:29 |
| Здравствуйте, ДимДимыч, Вы писали: ДД>С какими опциями монитирутся файловая система на локальном диске, и с какими на raid? Может достаточно будет просто монтировать раздел с опцией sync. ммм... Сейчас точно не скажу. Завтра узнаю и отпишу. С уважением, Евгений |
| Re[2]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 19.03.10 06:35 |
| Здравствуйте, ДимДимыч, Вы писали: ДД>С какими опциями монитирутся файловая система на локальном диске, и с какими на raid? Может достаточно будет просто монтировать раздел с опцией sync. Вот у админов спросил: fstab: /dev/sdi1 /disk1 xfs defaults 1 2 mtab: /dev/sdi1 /disk1 xfs rw 0 0 Походу все по дефолту Сам массив подключен по оптике к серверу. Сейчас будем пробовать с O_SYNC. Потом посмотрим... С уважением, Евгений |
| Re[3]: Копирование файлов и pdflush 100% CPU | |
| От: | -prus- | ||
| Дата: | 19.03.10 11:04 |
| Здравствуйте, -prus-, Вы писали: P>Сейчас будем пробовать с O_SYNC. Потом посмотрим... Это крайне тормозно оказалось. 1 Гб файл копировался 18 мин. на диски 10000 rpm. Никуда не годится. Подозреваю, что с O_DIRECT такая же ситуация. Сейчас пробуем минимизировать количество вызовов write путем увеличения кусков записываемых в файл с 64К до 1Мб. Не знаю, имеет ли это смысл большой, но использовать синхронную запись не будем точно. С уважением, Евгений |