Почему моя SD-карта работает медленно?

Моя SD-карта, кажется, работает медленно. У меня есть карта ADATA 16 ГБ SDHC Class 10. Я проверил список совместимости , в котором представлена ​​карта с аналогичными характеристиками, и в ней указано, что она «работает». Даже простые задачи, такие как получение списка каталогов в небольшом каталоге, могут занять несколько секунд при первом запросе. Есть ли какие-либо инструменты, которые я могу использовать для проверки того, какую производительность я получаю на своей SD-карте? Кроме того, есть ли какие-либо изменения конфигурации, которые я могу сделать, чтобы заставить SD-карту быстрее реагировать?

Я использую Raspberry Pi в качестве безголового BitTorrent seedbox, так что все, что я делаю «m» работает только в командной строке. Я использую разделение 240/16, чтобы обеспечить максимальный объем доступной памяти.

Обновление

После запуска некоторых тестов, как @Krzysztof Adamski, рекомендованных с помощью «dd», я получил хорошие результаты, получая скорость чтения 20 МБ /с и скорость записи около 10 МБ /с. Тем не менее, по-прежнему, похоже, возникают проблемы с производительностью ввода-вывода. При тестировании я запускал команды «dd» в фоновом режиме и бегал сверху, чтобы посмотреть, что происходит. Я заметил, что процесс «mmcqd» занимал довольно много процессорного времени, от 5% до 10%. Я огляделся по Интернету и обнаружил множество случаев, когда люди сообщали, что «mmcqd» использует совсем немного процессора. Затем я выполнил следующую команду для одновременного тестирования чтения и записи.

sudo dd if=/dev/mmcblk0 of=test.dat bs=1M count=1024

При выполнении этой команды я получил пропускную способность всего 977 кБ /с, а «mmcqd» сообщал о потреблении процессора от 10% до 25% каждые 5-10 секунд, после чего он возвращался в нуль. Итак, я сделал еще несколько тестов. Я запустил следующие две команды в фоновом режиме, а затем посмотрел, что происходит в верхней части.

sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 &
sudo dd if=/dev/zero of=test.dat bs=1M count=1024 &

В этом случае «mmcqd» достигнет пикового значения около 35% использования процессора, но пропускная способность была намного лучше при скорости около 7.5 МБ /с для чтения и около 5,3 МБ /с для записи.

Кажется, что здесь происходит какая-то проблема, когда тяжелые записи заставляют «mmcqd» блокировать систему. Это приводит к тому, что демона передачи замедляется почти до нуля, как только скорость становится слишком высокой, так как она ждет SD-карты. При запуске передачи-демона я также вижу, что использование «mmcqd» становится довольно высоким.

23 голоса | спросил Kibbee 23 AM00000040000003931 2012, 04:29:39

4 ответа


21

Скорость чтения тестовой карты:

Существует два простых способа проверки скорости чтения (каталог для записей - это только операция чтения):

  • с помощью команды dd:

    sudo dd if=/dev/mmcblk0 of=/dev/null bs=8M count=100

    Это будет читать 800 МБ данных с вашей SD-карты и отменить это для /dev /null. Если это займет много времени, вы можете изменить count = 100 на count = 10, чтобы читать только 80MB. По завершении команды он должен распечатать сообщение со скоростью чтения. Вы должны получить хотя бы пару МБ /с.

  • с помощью команды hdparm:

    sudo hdparm -t /dev/mmcblk0

    Это должно дать вам аналогичный результат скорости, как и первая команда, а также должна быть не менее двух МБ /с.

Скорость записи тестовой карты:

Нет простого способа тестирования скорости записи, чтобы сделать это, вам придется фактически записать некоторые данные на карту. Если вы хотите сделать это на низком уровне (omiting filesystem), вам придется переопределить некоторые данные на карте, и вы, вероятно, не хотите этого делать. Это можно сделать, если у вас есть раздел подкачки, поскольку он может быть легко деактивирован (с помощью swapoff -a), проверен с помощью dd (с помощью dd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25), а затем воссоздан (с помощью mkswap /dev/{yourswappartitionnanehare}).

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

dd if = /dev /zero of = /home /pi /testfile bs = 8M count = 25

Это создаст 200 МБ-файл в /home/pi/testfile. Вы можете использовать любое другое имя файла, которое вы хотите.

Примечания:

  • При тестировании скорости убедитесь, что в вашей системе нет других программ (например, торрент-приложение и т. д.).
  • После тестирования вы можете проверить вывод команды dmesg, чтобы узнать, есть ли какие-либо сообщения о подсистеме mmc.
  • Убедитесь, что у вас установлена ​​самая современная прошивка. Время от времени есть патчи независимо от скорости SD-карты.
  • Вы также можете проверить некоторые старые прошивки, так как могут быть некоторые регрессии. Самый простой способ сделать это (но не самый лучший) - это протестировать различные системные образы, которые построены на разных датах. Труднее всего использовать github и проверить исторические версии файлов прошивки.
ответил Krzysztof Adamski 23 AM000000100000001431 2012, 10:19:14
12

Для производительности SD-карты очень важно, является ли доступ последовательным (как с dd) или произвольным доступом в небольших блоках. Карты SD, особенно высококлассные, как представляется, оптимизированы для последовательного доступа, что хорошо для хранения фотографий или видео. Тем не менее, для работы ОС SD-карты более важен случайный доступ, так как много маленьких файлов читаются и записываются. Я бы предположил, что bittorrent генерирует несколько случайных доступов.

Эти две темы обсуждения содержат много тестов и обсуждений SD-карты. В общем, случайная скорость записи была признана решающей для оперативности работы ОС карты. Эта скорость часто намного ниже скорости последовательной записи, что является скоростью, которую производители хотели бы сообщить. Класс SD-карты основан на последовательных скоростях, а более низкие классы (4 или 6) на самом деле могут быть более подходящими для использования малины.

Инструмент iozone измеряет скорость множества различных шаблонов доступа. Я опубликовал краткие инструкции по сборке iozone на малине здесь ,

ответил Frepa 24 +04002012-10-24T00:28:36+04:00312012bEurope/MoscowWed, 24 Oct 2012 00:28:36 +0400 2012, 00:28:36
0

Для встроенного слота RasPI существует огромная дискуссия на сайте RasPI: http://www.raspberrypi.org/phpBB3 /viewtopic.php?f=63&t=5057&sid=ee346e3e7cea48d2858a143bcf086362

У вас не было времени прочитать все 12 страниц обсуждения, но это, похоже, проблема с сигналом CLK.

ответил Mose 25 +04002012-10-25T10:10:00+04:00312012bEurope/MoscowThu, 25 Oct 2012 10:10:00 +0400 2012, 10:10:00
-1

Вы пишете «bittorrent», и это вызывает мои предположения /ответ.

Протокол torrent принимает пакеты в случайном порядке от случайных сеялок.

Как только вы начнете использовать торрент в любой файловой системе, он становится довольно фрагментированным. Это повредит производительности в будущем.

Из того, что я знаю о SDCARD, его запуске FAT /FAT32 и тем хуже для обработки фрагментации.

Итак, найдите способ дефрагментации SDCARD или скопируйте все файлы, а затем переустановите ОС.

Наконец, запись LOT (как движок bittorrent) приведет к разрыву SDCARD быстрее, чем обычно. Я не скажу, что это неправильно, чтобы сделать это, и я понял, что схожусь с подобным. Но - это может быть причиной вашей проблемы.

Я хочу, чтобы был торрент-клиент, который автоматически передавал /перемещал загруженные файлы в другое место после завершения загрузки + «зарезервированного времени загрузки».

Тогда дефрагментация будет намного быстрее.

ответил BerggreenDK 27 FebruaryEurope/MoscowbWed, 27 Feb 2013 13:00:58 +0400000000pmWed, 27 Feb 2013 13:00:58 +040013 2013, 13:00:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132