Как я превышаю скорости USB 2.0 на порте USB 2.0?

331
Yann

Я записываю файлы на диск USB 2.0 с RAM-диска, на котором есть случайно заполненный файл размером 256 МБ (созданный из / dev / urandom для предотвращения слишком сильного сжатия файла). Когда я смотрю на скорость записи в файл, с которого производится вывод dd, они в среднем составляют около 75 МБ / с. Это особенно интересно, поскольку теоретическая максимальная скорость USB 2.0 составляет 60 МБ / с.

Команда, которую я запускаю:

dd if=/var/mnt/temp_data/urandom of=/mnt/usb/$FILE_NAME bs=10M count=1 

Обратите внимание, что я запускаю это несколько раз и заполняю диск до 95%. Причина, по которой файлы размером 10 МБ, заключается в том, чтобы убедиться, что накопитель заполнен почти на 95%, и я не получу такого заполнения большими файлами, так как не знаю, какой размер карты памяти будет подключен, и наличие нескольких файлов является частью теста.

Если мотивы влияют на скорость записи, я проверяю скорость записи USB-портов в системе, чтобы определить, соответствуют ли они стандартам USB. Следовательно, это относительно печально, и заполнение из / dev / urandom (косвенно).

Так почему же это происходит и как мне это исправить? Я предполагаю, что измерения, которые ddвыводятся, неточны, иначе я начну продавать пишущие драйверы USB мои секреты.

(Извиняюсь, если это должно быть на unix.se, я не был уверен)

3
Прежде всего, bs = 10M count = 1 не даст вам хорошего приближения скорости записи, потому что вы пишете только 10Mb. Данные могут быть где-то кэшированы. Я бы порекомендовал записать как минимум 1 Гб данных. Попробуйте bs = 1M count = 1000, и посмотрите, если результат отличается Art Gertner 9 лет назад 0
@smc Я не просто запускаю этот раз, я заполняю диск файлами 10 МБ, а ~ 75 МБ усредняется по полному тесту Yann 9 лет назад 0
предоставленная вами команда не заполняет диск 10 МБ файлами, она только записывает один. На производительность, о которой сообщает dd во время выполнения этой команды, может повлиять кэширование записи. Попробуйте параметры команды, которые я предложил выше, или измените их так, чтобы dd заполнил весь диск Art Gertner 9 лет назад 0
@smc Это происходит, когда вы запускаете его много раз. Это в цикле. Yann 9 лет назад 0
ты игнорируешь то, что я только что сказал? Вы не можете полагаться на скорость, указанную в этой команде, когда вы запускаете ее несколько раз. Это то, что 'count = x' для Art Gertner 9 лет назад 0
@smc Я запускаю `sync` после каждого` dd`, если это устранит то, что вы заставляете меня проверять. (Я делаю это сейчас в любом случае, это займет немного времени) Yann 9 лет назад 0
Давайте [продолжим обсуждение в чате] (http://chat.stackexchange.com/rooms/19353/discussion-between-smc-and-yann). Art Gertner 9 лет назад 0

1 ответ на вопрос

2
Art Gertner

Итак, после всех комментариев и нашей длительной дискуссии в чате, вот ответ на вопрос:

При тестировании скорости записи в системе, будь то запись на USB или жесткий диск, запись в FilesSystem или напрямую на диск в режиме RAW, всегда проверяйте, достаточно ли данных для заполнения кэша . Если записано недостаточно данных, вы измеряете скорость записи в кеш (который находится в оперативной памяти)

OP попытался записать файлы размером 10 МБ в цикле, выполняя syncкоманду между сеансами записи.

Фактически произошло то, что ddкоманда, которая выполняла запись, очень быстро записывала данные в кэш. Заявленная скорость была около 75 МБ / с. После выполнения этой syncкоманды потребуется несколько секунд, но OP не принял это во внимание.

После изменения теста на запись файлов большего размера выяснилось, что фактическая скорость записи составляет около 2,2 МБ / с, что соответствует стандартам USB 2.0.