У меня есть машина с 62 ГБ ОЗУ и транк, который составляет всего 7 ГБ, поэтому я решил создать RAM-диск и скомпилировать его. Я не эксперт по Linux. Я нашел в интернете инструкции по созданию RAM-диска:
mkfs -q /dev/ram1 8192
но я изменил 8192 на 16777216 в попытке выделить 16 ГБ оперативной памяти.
Я получил следующую ошибку:
mkfs.ext2: Filesystem larger than apparent device size.
Proceed anyway? (y,n)
В этот момент меня напугали и отпустили.
sudo dmidecode --type 17 | grep Size
шоу
8x8192MB + 2048MB = 67584 MB
но du
на /dev
дает 804K
.
Это проблема? Могу ли я преодолеть этот /dev
размер?
mount -o size=16G -t tmpfs none /mnt/tmpfs
Ответы:
Лучший способ создать RAM-диск в Linux - это tmpfs. Это файловая система, живущая в ram, поэтому нет необходимости в ext2. Вы можете создать tmpfs размером 16 Гб с помощью:
источник
tmpfs
может использовать своп, который вам, вероятно, не нужен на чистом RAM-диске.Linux очень эффективно использует оперативную память. Нет ничего удивительного в том, что вы видите небольшое ускорение
tmpfs
. Самыми большими частями для чтения в память (и, следовательно, способными замедлить процесс) являются инструменты (компилятор, ассемблер, компоновщик), и еслиmake
долго они будут загружены в память при запуске и никогда не покинут ее. Осталось только чтение в источнике (запись результатов не замедлит вас, если только не будет сильно ограничена память). Опять же, заголовочные файлы comon останутся рядом, только источник пользователя потребует чтения. И это вряд ли будет больше, чем несколько мегабайт. Создание большого RAM-диска (или даже его интенсивное использованиеtmpfs
) может очень сильно замедлить работу (из-за ограничения памяти сборки файлы на RAM-диске илиtmpfs
не могут этого сделать использоваться непосредственно оттуда).источник
tmpfs
не используются для хранения исполняемых файлов (RAM-диски являются пережитком старых добрых времен мучительно медленных дискет и т. Д.,tmpfs
Для жестких временных данных), никто не посчитал достаточно важным добавить необходимые уродливые хаки.Проблема заключается в том, что максимальный размер виртуального диска, в частности размер памяти, к которому можно получить доступ через драйвер виртуального диска, настраивается во время компиляции, может быть перезаписан во время загрузки, но остается фиксированным после загрузки ядра в память. Значение по умолчанию, вероятно, измеряется в мегабайтах. Если я правильно помню, память для RAM-диска зарезервирована прямо при загрузке драйвера, все RAM-диски имеют одинаковый размер, и по умолчанию существует около 16 RAM-дисков. Так что даже вы не хотите размер виртуального диска 16G :-)
Как указано в другом ответе, tmpfs - это то, что вы хотите использовать. Кроме того, вы не выиграете много, имея всю свою ОС в ramdisk / tmpfs. Просто скопируйте ваш builddir в tmpfs и выполните сборку. Возможно, вам придется убедиться, что все временные результаты также записаны в место, которое находится в tmpfs.
источник
blockdev --flushbufs
.Documentation/blockdev/ramdisk.txt
в исходных текстах ядра. И на мой ответ: в этом файле также говорится, что виртуальный диск увеличивается по мере использования памяти, поэтому он распределяется не все сразу.Чтобы создать большой RAM-диск после загрузки, без каких-либо проблем с параметрами ядра, это похоже на работу. Используйте tmpfs, создайте файл, смонтируйте его через цикл и смонтируйте его через файловую систему:
Вероятно, небольшая потеря производительности проходит через несколько разных слоев ... но, по крайней мере, это работает.
источник
Помимо
tmpfs
иramfs
еще один вариант является/dev/ram0
блочным устройством. В последних версиях Ubuntu это устройство не существует по умолчанию, но его можно создать с помощьюmodprobe brd
.Этот подход более предсказуем, поскольку он создает настоящую
ext4
файловую систему и никогда не превышает заданный вами предел. Но это требует больше шагов для настройки и использует ОЗУ менее эффективно.Использование модуля ядра brd (/ dev / ram0)
Чтобы создать и инициализировать 4 ГБ ОЗУ:
rd_nr
Параметр определяет , сколько дисков RAM для создания (по умолчанию он создает 16, т.е./dev/ram0
через/dev/ram15
).rd_size
Параметр размер в килобайтах .$(( ... ))
Синтаксис позволяет выполнять арифметические действия в оболочке.Чтобы освободить RAM-диск, размонтируйте его и удалите
brd
модуль ядра:Создание блочного устройства внутри
ramfs
Кроме того, вы можете создать блочное устройство внутри
ramfs
:Команда
truncate
создает пустой файл заданного размера, так что он инициализируется (то есть потребляет память) по требованию.Чтобы освободить RAM-диск, размонтируйте его и удалите образ диска:
Сравнение с
tmpfs
иramfs
Хотя
tmpfs
иramfs
более эффективны, чем использование блочных устройств, ниже приведены некоторые их недостатки.tmpfs
может поменяться на диск. Это более эффективно, но могут быть случаи, когда вам нужен чистый RAM-диск:ramfs
прост в настройке, освобождает пространство после удаления файлов и более эффективно использует оперативную память (система не буферизует файлы, потому что она знает, что они находятся в оперативной памяти). Но у него есть свои недостатки и сюрпризы:df
Утилита не сообщает использование пространства:Параметр ограничения размера отсутствует. Если вы добавите слишком много в виртуальный диск, ваша система будет зависать.
Разреженные файлы могут стать разрозненными, когда вы меньше всего этого ожидаете. Этим утром я скопировал образ виртуальной машины (
ramfs
150 ГБ, но 49 ГБ на диске) в (у меня 128 ГБ ОЗУ). Это сработало. Но когда я скопировал из пунктаramfs
назначения, моя система перестала отвечать на запросы.cp
Утилита , по- видимому заполнены отверстия на чтение , но не писать.И то,
tmpfs
и другоеramfs
может вести себя иначе, чем настоящаяext4
файловая система. Создание блочного устройства в ОЗУ и его инициализацияext4
позволяют избежать этого.Для более глубокого сравнения: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
источник
ОП объем оперативной памяти выражается в МБ. Так что все, что вам нужно для этого - это 16384. И тогда, вуаля, вы будете в бизнесе.
источник
mkfs.ext2
Вы можете смонтировать
ramfs
файловую систему, скопировать в нее свой проект и работать оттуда. Это гарантирует, что ваши входные файлы загружены в ОЗУ, и они не будут перечитываться с гораздо более медленного диска. Однако, как вы обнаружили, это, как правило, не полезная стратегия. Вы уже получаете точно такую же выгоду.- https://github.com/torvalds/linux/blob/v4.18/Documentation/filesystems/ramfs-rootfs-initramfs.txt
Вы уже можете доверять, что ваши входные файлы кэшируются в ОЗУ, при первом чтении. Ваши выходные файлы также кэшируются, так что вы не ждете, пока они будут записаны на диск.
Не существует искусственного ограничения на объем кеширования, продолжительность его кеширования и т. Д. Кэши начинают сбрасываться только после заполнения ОЗУ. Какой кеш удаляется первым, выбирают ужасно разработанные алгоритмы. Первое приближение, мы описываем это как Наименее недавно использованный. См. Какие алгоритмы замены страниц используются в ядре Linux для кеширования файлов ОС?
Обратите внимание, что ваш текстовый редактор будет явно
fsync()
сохранять файлы на диск.Если вы запускаете тесты программы, которая включает в себя
fsync()
, их запуск в файловой системеramfs
может ускорить их. Другая стратегия - попытаться отключитьfsync()
с помощьюeatmydata
/nosync.so
.Некоторые другие операционные системы могут иметь определенные ограничения, которые можно обойти с помощью виртуального диска. С одной стороны, отсутствие какого- либо кэширования файлов является причиной того, что ram-диски были популярны в DOS .
TMPFS
tmpfs
работает так же, какramfs
, за исключением того, что он может использовать пространство подкачки, если у вас есть. Т.е., если вам нужна оперативная память для чего-то другого, алгоритмы наименьшего числа недавно использовавшихся ресурсов могут выбирать блоки данных из tmpfs и выгружать их на диск.Большинство людей придерживаются
tmpfs
, потому что это также позволяет вам ограничить общий размер, и показывает пространство, используемое правильно, например, вdf
команде. Я не уверен, почему эта разница существует. Ограничение размераtmpfs
защищает вас от случайного заполнения всей оперативной памяти и, в основном, от гибели вашей системы. По умолчанию используется половина вашей оперативной памяти.Другие причины, почему записи могут замедляться
Выше приведено упрощение с учетом вашего случая. Записи в файлы в вашем случае не должны ждать диска. Однако есть несколько случаев, когда это делается. См. Отличный пост в блоге. Почему буферизованные записи иногда замирают . Самым удивительным случаем является недавнее изменение Linux под названием «стабильная запись страницы».
источник