Доступ к вводу-выводу с отображением памяти выполняется медленно

Если Вы будете волноваться о циклах записи, то Вы не доберетесь нигде.

У Вас будут данные по Вашему SSD, который часто изменяется; Ваш дом, Ваши конфигурации, Ваши кэши браузера, возможно, даже базы данных (если Вы используете кого-либо). Они все должны быть на SSD: почему еще Вы имели бы один, если не получить скорость для вещей, Вы часто делаете?

Количество записей может быть ограничено, но современный SSD очень хорош в выравнивании износа, таким образом, Вы не должны волноваться об этом слишком много. Диск там, чтобы быть записанным в; если Вы не используете его, для которого, Вы могли бы точно также использовать его в качестве пресс-папье и даже не поместить его в Ваш компьютер.

Нет никакого устройства хранения, которому удовлетворяют для области подкачки. Подкачка является медленной, даже на SSD. Если необходимо подкачать все время, Вы - более обеспеченное получение большего количества RAM так или иначе.

Это может отличаться для области подкачки, это не используется для свопинга, но для приостанавливают к диску сценарии. Естественно, чем быстрее носители, используемые для этого, тем быстрее это приостановит и проснется снова.

Лично, я поместил все на SSD кроме больших, статических данных. Фильм, например, не должен тратить впустую дорогое пространство на SSD, поскольку жесткий диск является больше, чем достаточно быстро для проигрывания его. Это не будет играть более быстрого использования устройство хранения данных SSD для него.

Как все носители, SSD перестанет работать в какой-то момент, используете ли Вы его или нет. Необходимо полагать, что они так же надежны как жесткие диски, который не надежен вообще, таким образом, необходимо сделать резервные копии.

6
27.10.2015, 01:41
1 ответ

Хорошо, похоже, что предметом этого вопроса является фёрфи ... ввод-вывод с отображением памяти (выполненный правильно) будет настолько быстрым, насколько это может сделать процессор для оборудования, к которому осуществляется доступ, и не будет никаких накладных расходов на выполнение этого из пользовательского режима в отличие от режима ядра (т.е. нет «записи из пользовательского пространства в ядро»).

Тем не менее, вы все равно должны подумать о том, что происходит, когда вы выполняете чтение или запись по адресу (это то, к чему перешел вопрос). В большинстве архитектур существует два сопоставления - виртуальное с физическим и физическое с устройством. Первый настраивается в аппаратном обеспечении виртуальной памяти, а второй - в контроллере памяти.

В дополнение к сопоставлениям, все обращения обычно проходят через аппаратное обеспечение cache , поэтому вы должны решить, хотите ли вы кэшировать доступ или нет. Если к базовому устройству, к которому осуществляется доступ, относится какая-то оперативная память, то обычно вы хотите, чтобы доступы кэшировались. Для других типов устройств, как правило, нет.

Может быть много других вещей, о которых нужно подумать (например, резидентно ли отображение виртуальной машины в оборудовании виртуальной машины, ширина и время доступа, приоритет, разрешения и т. Д.), Но кеш - это первое.

В случае @ Karthik, поскольку он не отключил кеш в своем отображении, в зависимости от типа кеша, либо вся строка кэша была записана, когда он писал в адрес (сквозная запись) или запись была отложена (обратная запись) (если вы хотите немного подробнее рассказать о кеше, попробуйте this ).

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

... и лучший способ отладки этого материала - иметь анализатор что-то вроде подключенного к вашему устройству или шине, или, если это слишком сложно / дорого, может быть некоторая поддержка отладки в контроллере памяти.

Еще один незначительный, но важный момент ... обратите внимание на объявление blink_mem в приведенном выше коде - квалификатор типа volatile очень важен. Он говорит компилятору не портить доступ к адресу. В дополнение к этому, вы должны знать о любых специальных инструкциях конвейера, связанных с доступом к памяти (посмотрите инструкцию eieio в powerpc - у кого-то есть чувство юмора: -)

Наконец, просто для того, чтобы повторите то, что было сказано в комментариях, которые оказались реальным ответом на вопрос, при вызове remap_pfn_range () вы выключаете кеш , изменяя защиту страницы, указанную в последний аргумент ( prot ) с использованием макроса pgprot_noncached () .Также прочтите this и this и особенно this . Ваше здоровье!

3
27.01.2020, 20:29

Теги

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