Показать полную графическую версию : [решено] Медленно копируются файлы на флешку
Медленно копируются файлы на флешку (попробовал несколько разных), если копировать с флешки - скорость нормальная, если копировать на сьемный диск - скорость нормальная. От файловой системы не зависит. В чем может быть проблема?
AMDBulldozer
12-04-2013, 20:06
Опубликуйте, пожалуйста, вывод hdparm -I <имя usb-flash>
/dev/sdc:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ATA device, with non-removable media
`� �������cI�er: �{W@����{���b ��)d��T�`��
Serial Number: y��x��y\@�����:4`��
Firmware Revision: �W�@�`=`
Media Serial Num: ���� ������a���������=`�ʂ��<�ʪ���
Media Manufacturer: ؠ�������3 �ʩ`��
Transport: 0xc460; Revision: 0xf58d
Standards:
Used: unknown (minor revision code 0xf424)
Supported: 13 12 7 5
Likely used: 13
Configuration:
Logical max current
cylinders 0 46464
heads 0 62456
sectors/track 46304 13440
--
CHS current addressable sectors: 1998648398
Logical/Physical Sector size: 512 bytes
device size with M = 1024*1024: 975902 MBytes
device size with M = 1000*1000: 1023307 MBytes (1023 GB)
cache/buffer size = unknown
Nominal Media Rotation Rate: 62666
Capabilities:
IORDY(may be)(can be disabled)
Queue depth: 14
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 91 Current = ?
Recommended acoustic management value: 82, current value: 96
DMA: not supported
PIO: unknown
* reserved 69[0]
* reserved 69[2]
* reserved 69[3]
* reserved 69[7]
* DOWNLOAD MICROCODE DMA command
* WRITE BUFFER DMA command
* DEVICE CONFIGURATION SET/IDENTIFY DMA commands
* Long physical sector diagnostics
* CFast specification support
Security:
Master password revision code = 256
not supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
Integrity word not set (found 0xf4ca, expected 0xdaa5)
AMDBulldozer
12-04-2013, 21:42
zai
1. какая у Вас скорость записи? Монтируйте Ваш usb-накопитель и проверьте скорость записи, которую показывает dd: "dd if=/dev/urandom of=/mnt/usbstorage/test bs=4096 count=25600" (записать 100 МБ псевдослучайных данных в файл test в директории /mnt/usbstorage. Предполагается, что предварительно была выполнена команда монтирования вроде "mount /dev/sdb1 /mnt/usbstorage").
2. опубликуйте, пожалуйста вывод команд cat /sys/block/<имя устройства>/queue/max_hw_sectors_kb и cat /sys/block/<имя устройства>/queue/max_sectors_kb (хотя я уверен, что значения будут равны и это ничего не даст)
3. Опубликуйе, пожалуйста вывод fdisk -l /dev/sdb (в дальнейшем я для простоты буду писать /dev/sdb для обозначения Вашей usb-флешки.
какая у Вас скорость записи? »
http://s019.radikal.ru/i607/1304/c9/6e1cabaeb24f.png
Когда 1 файл, то быстро, а если 2, то очень медлено (скорость может стоять на нуле несколько минут после перекачки первого файла, зависит от обьема). Почему?
AMDBulldozer
12-04-2013, 22:10
Когда 1 файл, то быстро, а если 2, то очень медлено (скорость может стоять на нуле несколько минут после перекачки первого файла, зависит от обьема). Почему? »
К сожалению, таким способом скорость записи измерить невозможно. В Вашем случае, вместо реальной записи на flash-накопитель происходит сохранение данных, которые должны быть записаны, в дисковых буферах системы. Конечно, одновременно ведется и реальная запись на флешку. Но, поскольку скорость записи на неё гораздо меньше скорости чтения информации с жесткого диска, то реальная запись происходит еще долгое время после того как файловый менеджер отрапортует об окончании копирования. Те самые несколько минут пока скорость равна нулю, происходит сброс буферов (т.е. запись их на носитель).
Дисковый буфер - это участок оперативной памяти, выделяемый системой для временного хранения данных, которые должны быть записаны на блочное устройство, если скорость работы этого устройства недостаточна для синхронной записи.
Дисковый кэш - это участок оперативной памяти, выделяемый системой для временного хранения данных, считанных с блочного устройства для исключения повторного чтения, если процесс запросит их еще раз.
Посмотреть величину кэша и буферов можно командой "free".
AMDBulldozer, это все понятно, но в Винде нет никаких проблем (скорость почти всегда одинаковая), даже если очень много файлов.
zai, вы это сделали? Только я поправил команду, чтоб было нагляднее и не мучить флешку кучей IO вызовов
dd if=/dev/zero of=/mnt/usbstorage/test bs=2M count=500 »
AMDBulldozer
12-04-2013, 22:32
urandom предпочтительнее zero, поскольку некоторые контроллеры "оптимизируют" запись нулей. Это относится к как к контролерам, выполняющим сжатие на лету, так и к контроллерам, которые вместо записи блока нулей помечают страницу недействительной.
urandom предпочтительнее zero, поскольку некоторые контроллеры "оптимизируют" запись нулей. Это относится к как к контролерам, выполняющим сжатие на лету, так и к контроллерам, которые вместо записи блока нулей помечают страницу недействительной. »
На флешке это пофиг. И кстати, сразу после записи, ну вдруг дисковый буфер совсем свободен, time sync.
AMDBulldozer
12-04-2013, 22:47
в Винде нет никаких проблем (скорость почти всегда одинаковая), даже если очень много файлов »
Как раз настроить параметры работы алгоритма виртуальной памяти не проблема - установите значения в /proc/sys/vm на свой вкус. В частности, можете увеличить значение dirty_writeback_centisecs с 5 секунд по умолчанию до 10 минут.
Просто в этом случае при отключении электропитания Вы потеряете не только последний якобы скопированный файл, как сейчас, а все файлы, которые Вы изменяли/копировали/перемещали за последние 10 минут.
Если Вы уверены, что так будет лучше - в каталоге с исходными текстами ядра есть файл Documentation/sysctl/vm.txt с описанием всех параметров. Настройте как Вам больше нравится и Linux начнет имитировать поведение windows при записи файлов.
Только учтите, что скорость записи при этом не увеличится - она лимитирована аппаратными возможностями usb-flash накопителя.
На флешке это пофиг. »
Я имел в виду, что из-за разницы в технологии между flash-памятью и HDD, скорость записи нулей на flash-носитель может оказаться намного выше скорости записи реальной информации.
И ещё, AMDBulldozer,
vadblm@io:~$ dd if=/dev/zero of=/dev/null bs=2M count=500
500+0 records in
500+0 records out
1048576000 bytes (1.0 GB) copied, 0.0880301 s, 11.9 GB/s
vadblm@io:~$ dd if=/dev/urandom of=/dev/null bs=2M count=500
500+0 records in
500+0 records out
1048576000 bytes (1.0 GB) copied, 63.589 s, 16.5 MB/s
Генерация псевдослучайных чисел, как видите в примере, занимает заметное время и вообще уничтожает весь смысл бенчмарка.
AMDBulldozer
12-04-2013, 23:04
Генерация псевдослучайных чисел, как видите в примере, занимает заметное время и вообще уничтожает весь смысл бенчмарка. »
Вы правы. Только что делать с такими результатами?
# dd if=/dev/zero of=/mnt/tmp/test bs=2M count=50
50+0 зaпиceй cчитaнo
50+0 зaпиceй нaпиcaнo
cкoпиpoвaнo 104857600 бaйт (105 MB), 0,263841 c, 397 MB/c
(sync потом выполняется мгновенно)
Я имел в виду, что из-за разницы в технологии между flash-памятью и HDD, скорость записи нулей на flash-носитель может оказаться намного выше скорости записи реальной информации. »
В таком случае для чистого эксперимента надо много памяти и делать рамдиск, и dd'ть заранее подготовленный файл не из нулей оттуда. Хотя, помимо sandforce я не встречался с флеш накопителями, дающий какой-то выигрыш. Все USB флешки тормозные на запись, вон купил флешку USB 3.0 среднего пошиба за $20, не поленился погонять по своей методе - 20мб/сек пишет, 100мб/сек читает.
Только что делать с такими результатами? »
А что тут поделаешь. Ничего. Видишь необычно высокую скорость - ты попал в буфер, чувак. Пока придумал только увеличивать размер записываемых данных, чтобы гарантированно исчерпать буфер.
AMDBulldozer
13-04-2013, 05:36
Пока придумал только увеличивать размер записываемых данных, чтобы гарантированно исчерпать буфер. »
Проще выполнить sysctl vm.dirty_bytes=8192
Решение: elevator=as в /etc/default/grub
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.