LINUX.ORG.RU

Падение производительности при использовании FUSE-драйвера ntfs


0

1

Дано:

Раздел ntfs, смонтированный через fuse:

$ ps ax | grep [n]tfs
 1170 ?        SNs   22:14 /sbin/mount.ntfs /dev/sdd5 /media/e_data -o rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,dmask=0077,fmask=0177

и любая программа, которая пишет на него данные. Например mc, eiskaltdc, cp, dd и т.п.

Результат: общее падение производительности системы из-за того, что большая часть CPU тратится на /sbin/mount.ntfs, а остальные задачи сидят голодные. Переключение вкладок в терминале тормозит, страница в браузере прокручивается рывками и т.п.

Пробуем численно измерить это падение производительности. Берём какую-нибудь чисто-CPU задачу и запускаем в ненагруженной системе:

$ time yes | head -n 50000000 | wc -l
50000000

real	0m3.785s
user	0m2.890s
sys	0m0.540s

Запускаем dd if=/dev/zero of=/media/work/test bs=16K (/media/work/ — это ext3) и повторяем тест:

$ time yes | head -n 50000000 | wc -l
50000000

real	0m5.934s
user	0m2.890s
sys	0m0.857s

Запускаем аналогичный dd, но уже для файла на ntfs разделе, повторяем тест:

$ time yes | head -n 50000000 | wc -l
50000000

real	0m11.274s
user	0m3.163s
sys	0m1.280s

Итого, при интенсивной записи на ext3, производительность работающей паралельно тестовой задачи падает в 1.5 раза, а при записи на NTFS — аж в 3 раза.

Выставление renice 20 для mount.ntfs или для dd не приводит к изменению результата.

Как это лечить? Как снизить влияние mount.ntfs на производительность остальных процессов? Нагуглить ничего полезного не смог. Что это — проблема планировщика? Кривость подсистемы fuse?

Что-то мне казалось, что это - вполне нормальное поведение fuse. По крайней мере, ни разу не сталкивался с нетормозящим ntfs-3g.

Eddy_Em ☆☆☆☆☆
()

Не использовать NTFS? Зачем вообще копировать туда большие объёмы файлов из линукса?

Axon ★★★★★
()
Ответ на: комментарий от Axon

> Не использовать NTFS? Зачем вообще копировать туда большие объёмы файлов из линукса?

Внешний винт же.

geekless ★★
() автор топика

попробуй экспериментальный ядреный ntfs

devl547 ★★★★★
()
Ответ на: комментарий от Axon

> Если свой - то зачем там NTFS?

Внешний винт на то и внешний, что подключать его приходится куда попало. Где попало обычно стоит винда.

то зачем туда лить большие объёмы файлов?

Фильмы же. У девушки дома интернета нет, скачиваю их у себя.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Внешний винт на то и внешний, что подключать его приходится куда попало. Где попало обычно стоит винда.

FAT32/ExFAT/UDF/Ext3+ext2fsd на раздельчике с FAT32 - на ваш вкус.

Axon ★★★★★
()
Ответ на: комментарий от geekless

У девушки дома интернета нет

Ох, ё... Бывает. Поставьте ей в винду драйвер для ext3 и забудьте о проблемах.

Axon ★★★★★
()

Погугли по лору на тему высказываний Торвальдса о FUSE. Загрузка проца высока из-за того, что драйвер FUSE лежит в юзерспейсе, а fuse.ko - в кернелспейсе. Грубо говоря, приходится делать memcpy между кернелспейсом и юзерспейсом, из-за этого сильный оверхед.

На внешний винч всегда можно поставить UDF. Или вам в WRT-роутер его втыкать охота?

shahid ★★★★★
()
Ответ на: комментарий от shahid

> Погугли по лору на тему высказываний Торвальдса о FUSE.

Читал.

Загрузка проца высока из-за того, что драйвер FUSE лежит в юзерспейсе, а fuse.ko - в кернелспейсе.

Проблема не в загрузке проца, в том, что процесс не откликается на renice — приоритет-то у него сбавляется, но уступать процессор другим задачам охотнее он не начинает.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Попробуйте сделать команду:

cat /dev/urandrom > /dev/null

Что показывает top? Он показывает, что cat занял 100% одного ядра процессора. Хотя cat на самом деле не умеет генерировать случайные числа, судя по top он именно это и делает. К чему я это? Процесс на mount.ntfs на renice отзывается, просто на самом деле это не конкретно он грузит систему, а ядро.

shahid ★★★★★
()
Ответ на: комментарий от shahid

> cat /dev/urandrom > /dev/null

Это навело меня на мысль протестировать нагрузку, запустив несколько echo 'while true ; do : ; done' | nice -n20 sh

Уже на 6-7 таких задачах остальные процессы начинаю ощутимо лагать. При любых значениях nice. Погуглил настройки CFS, ничего заслуживающего внимания не нашел.

Собрал ядро с BFS. Эффект — просто поразительный. Потестировал разные виды нагрузок на CPU, включая и сабжевое копирование данных через fuse. Значительно улучшилась отзывчивость системы при любых нагрузках. А в тех случаях, когда и BFS не достаточно хорошо справляется с назначением динамических приоритетов, достаточно сделать renice на жручие задачи — и они действительно перестают мешать более высокоприоритетным.

Всем спасибо, проблема решена.

geekless ★★
() автор топика

Какая версия ntfs3g? у меня подозрения, что дикие тормоза добавили в последних версиях, т.к., насколько я помню, раньше ничего не тормозило при приличной скорости.

Un
()
Ответ на: комментарий от geekless

Попробую установить что-нибудь из 2010-ветки.

Un
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.