LINUX.ORG.RU

Монтирование флешки - скорость и sync


0

0

Есть флешка, Kingston 2Гб взятая на поиграццо (на недельку - чисто инфу перегнать :-). В соседнем виндовом компе выдала следущие показатели: чтение ~9 мб/сек, запись ~3мб/с. Отформатирована в Фат16 размер блока 32кб, менять файловую систему возможности нет - читать флеш надо под масдаем, а фат32 еще тормознее чем 16-й.

Суть проблеммы - при монтировании флешки инфа читается с нее с тойже скоростью, что и в винде (~9-10 мб/сек). Косяк при записи - без опции sync - линух закидывает данные в кеш, а потом медленно и неспеша записывает это все на флешку, что не есть гут (привычка выдергивать не размонтируя, особенно когда спешишь). Руками делать unmount, и ждать пока он сбросит кеш - нехочется. Хочется чтоб писал сразу. С опцией sync - выдает скорость порядка 10-30 кб/с.

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

Начитал в нете (http://gentoo.ru/node/4961): В ядре 2.6.19 появился для фат32 новый ключик -flush который говорит мол скидывать кеш как можно быстрее без задержек.

Но делу это не помогло - первые 99% записи пролетают быстро, а потом система долго висит на последнем проценте, ожидая пока даннве из кеша реально запишутся на флеху. Неаккуратненько както.

Вопрос знатокам: как получить запись на флешку без кеширования, но с приемлемой скоростью?

anonymous

Дистр - гента, ядро 2.6.19-gentoo-r5, USB 2.0

anonymous
()

Таак, все чудесатее и чудесатее.. Забил на монтирование и кеши, начал тупо писать на флешку через dd:

Hellstad ~ # time dd if=/sdb of=/dev/sdb bs=1024 count=100000
100000+0 записей считано
100000+0 записей написано
102400000 bytes (102 MB) copied, 62,2843 s, 1,6 MB/s

real    1m2.288s
user    0m0.020s
sys     0m0.410s
Hellstad ~ # time dd if=/sdb of=/dev/sdb bs=64 count=1600000
1600000+0 записей считано
1600000+0 записей написано
102400000 bytes (102 MB) copied, 66,3953 s, 1,5 MB/s

real    1m6.400s
user    0m0.380s
sys     0m4.800s
Hellstad ~ # time dd if=/sdb of=/dev/sdb bs=16 count=6400000
6400000+0 записей считано
6400000+0 записей написано
102400000 bytes (102 MB) copied, 81,8549 s, 1,3 MB/s

real    1m21.860s
user    0m1.120s
sys     0m15.840s
Hellstad ~ # time dd if=/sdb of=/dev/sdb bs=2048 count=50000
50000+0 записей считано
50000+0 записей написано
102400000 bytes (102 MB) copied, 66,0429 s, 1,6 MB/s

real    1m6.047s
user    0m0.000s
sys     0m0.320s
Hellstad ~ # time dd if=/sdb of=/dev/sdb bs=512 count=200000
200000+0 записей считано
200000+0 записей написано
102400000 bytes (102 MB) copied, 61,7226 s, 1,7 MB/s

real    1m1.727s
user    0m0.000s
sys     0m0.490s
Hellstad ~ #  

anonymous
()

Проблемы ДНК и кривых рук к линуксу не относятся.

Gharik
()
Ответ на: комментарий от anonymous

Перегрузился в винду на этом же компе - списал 400+ метровый файл, скорость 2700-2800 кб/сек. Кещирование выключено, флешка отмонтировалась мгновенно.

Перекомпилил ядро, выключил все дрова кроме 2.0 - флешка видится, скорость не поднимается выше 1,7 метра в секунду (данные получены). Такое ощущение что линух както ограничивает протокол передачи до usb 1.1.

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

Полазил еще по инету, покомпилил ядро и т.д. Проблемма _почти_ решена.

time (dd if=/sdb2 of=/dev/sdb bs=512 && sync) 200000+0 записей считано 200000+0 записей написано 102400000 bytes (102 MB) copied, 1,02784 s, 99,6 MB/s

real 0m34.451s user 0m0.040s sys 0m1.020s

102/34=~3 мб/с. Приемлимая скорость достигнута.

На просторах инета (ru.gentoo-wiki.com) найден текст следущего содержания:

Предупреждение: Опция sync в параметрах mount является необходимой, т.к. форсирует мгновенную запись на устройство. Если ее не будет, то когда вы удалите устройство из системы, данные не будут записаны на него. Поэтому, чтобы избежать проблем такого рода, дождитесь пока индикатор на носителе перестанет мигать и после этого извлеките устройство. НО для файловой системы fat c версии ядра linux 2.6.13 sync ставить нельзя т.к. функционирование данной опции сильно изменилось и максимальная скорость записи на usb2.0 это 200 клибойт в секунду а для usb1.0 это где то 10 - 20 килобайт в секунду. Кроме того, опция sync в параметрах mount убьет Вашу флешку с гарантией за 6 месяцев использования. См. http://bugs.debian.org/309625

Как вариант решения проблеммы вижу запихивание в свежее ядро дров на fat от =< 2.6.12.

2 Gharik: На тему ошибок в ДНК и прочего - предлагаю дуэль, на любом удобном для тебя оружии (холодное, огнестрел и т.д.). Ессно в реалке. Транспортные расходы беру на себя. Когда тебе удобно? Могу приехать в Москву в течении 3-4 дней.

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

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

Предлагаю дуэль до 99 раунда в Scorched Earth или его полный аналог с полностью рандомайзнутой погодой и без использования ядерного оружия ;) Тока эта... ещё шестерых найди, а то скучно будет :)

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

"Вопрос знатокам: как получить запись на флешку без кеширования, но с приемлемой скоростью?"

"Как вариант решения проблеммы вижу запихивание в свежее ядро дров на fat от =< 2.6.12."

"для решения проблемы нужно просто подождать, а не рвать флешку из гнезда, аки в сраку раненая рысь".

Знаешь, чемто напоминает "Потому что гладиолус!"

anonymous
()

Пиши как пишется, а потом делай sync. Я лично у себя разницы по скорости не заметил.

P.S. А что такая карточка тормознутая?

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

Запись 3 метра в сек - вполне нормальная, для 2Гб флешки, которую ты взял на недельку поиграццо. И довольно неплохая, если учесть что покупала ее женнщина, довольно отдаленно понимающая что флешки бывают разные.

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