Создание диска поршня на Linux

Решение, предложенное @rahmu, просто при поиске низких положений, но что при поиске числа символов 25? Вставить 25 точек?

В таком случае следующие решения могли быть под рукой. С grep

grep '^.\{24\}a' input >output

С awk

awk -F '' '$25 == "a"' input >output
72
22.09.2018, 18:02
7 ответов

Лучшим способом создать диск поршня на Linux является tmpfs. Это - файловая система, живущая в поршне, таким образом, нет никакой потребности в ext2. Можно создать tmpfs 16 ГБ размером с:

mount -o size=16G -t tmpfs none /mnt/tmpfs
79
27.01.2020, 19:31
  • 1
    в моей системе, ни с чем вообще в/mnt, это говорит: ls: не может получить доступ к/mnt/tmpfs: Никакой такой файл или каталог не монтируется: точка монтирования/mnt/tmpfs не существует. Это - что-то для волнения о? Если я просто mkdir/mnt/tmpfs, делает то поражение цель (путем создания tmpfs на обычном диске - никакие провокационные сообщения, я - новичок здесь). –  Frank 27.02.2013, 21:23
  • 2
    Вам нужна точка монтирования (каталог) как цель, поэтому после создания этого каталога (можно использовать любой каталог, существующее содержание затенено), можно смонтировать его с командой из ответа. –  t-8ch 27.02.2013, 21:26
  • 3
    tmpfs может использовать подкачку, которую Вы, вероятно, не хотите в чистом псевдодиске. –  palswim 17.08.2017, 20:55
  • 4
    @RomanSusi tmpfs является типом файла (передал после-t). "ни один" не отступающее устройство ("диск"), который не существует для tmpfs –  t-8ch 30.04.2018, 00:24

Проблема состоит в том, что максимальный размер электронного диска, более конкретно размера памяти, к которой можно получить доступ через драйвер электронного диска, настроен во время компиляции, может быть перезаписан во время начальной загрузки, но остается фиксированным, после того как ядро загружается в память. Значение по умолчанию, вероятно, измеряется в Мегабайтах. Если я вспоминаю правильно, что память для электронного диска является сохраненным правом, когда драйвер загружается, все электронные диски являются тем же размером и существует, приблизительно 16 электронных дисков по умолчанию. Так даже Вы не хотите размера электронного диска 16G :-)

Как указано в другом ответе, tmpfs - то, что Вы хотите использовать. Далее, Вы не победите много при наличии Вашей всей ОС в ramdisk/tmpfs. Просто скопируйте свой builddir в tmpfs и сделайте Вашу компиляцию затем. Вам, вероятно, придется удостовериться, что все временные результаты записаны в местоположение, это находится в tmpfs также.

6
27.01.2020, 19:31
  • 1
    Они на самом деле не используют памяти, пока Вы не пишете вещи им. Предел времени начальной загрузки является просто пределом. Даже после заполнения того можно освободить память, создают резервную копию с blockdev --flushbufs. –  psusi 28.02.2013, 15:57
  • 2
    @psusi: можно ли дать нам больше информации об этом? Я могу только найти операторы, упомянув, что когда-то требуемый памятью электронного диска никогда не исправляется, например, в Documentation/blockdev/ramdisk.txt в источниках ядра. И на моем ответе: тот файл также говорит, что электронный диск растет, поскольку память используется так, это все не выделяется сразу. глюк –  Bananguin 01.03.2013, 16:46
  • 3
    Какая информация? Вы выполняете команду, и она освобождает поршень, предполагая, что Вам все еще не смонтировали ее во всяком случае. –  psusi 01.03.2013, 17:13
  • 4
    Как Вы знаете, что команда делает то, что Вы говорите, что она делает? Его страница справочника не подтверждает, что и документация в источнике ядра дерево, как могут понимать, противоречит Вашей информации. –  Bananguin 01.03.2013, 22:40
  • 5
    я считал исходный код и проверил его путем попытки его. –  psusi 01.03.2013, 22:50

Linux очень эффективен в использовании RAM. Существует мало удивления, что Вы видите мало если любое ускорение с tmpfs. Самые большие части для чтения в память (и таким образом способный замедлить процесс) являются инструментами (компилятор, ассемблер, компоновщик), и в длинноватом make они будут загружены в память при запуске и никогда не оставлять его. То, что оставляют, читает в источнике (запись из результатов не замедлит Вас, если сильно память не ограничила). Снова, общие заголовочные файлы останутся вокруг, только источник пользователя потребует чтения. И это вряд ли будет больше, чем несколько мегабайтов. Создание большого Электронного диска (или даже много использования tmpfs) может очень хорошо замедлить вещи (путем создания памяти сборки ограниченной, файлы на Электронном диске или на tmpfs не может использоваться непосредственно оттуда).

20
27.01.2020, 19:31
  • 1
    Что! Как они не могут использоваться непосредственно оттуда? –  Kazark 28.02.2013, 18:08
  • 2
    Они находятся в RAM, но не в формате, который непосредственно применим. –  vonbrand 28.02.2013, 18:09
  • 3
    Действительно! Как так? (Простите мое замедление.) –  Kazark 28.02.2013, 18:34
  • 4
    @Kazark, для обработки исполняемых файлов в памяти специальные структуры данных используются. Как Электронные диски и tmpfs не используются широко для хранения исполняемых файлов (Электронные диски являются остатком с добрых старых времен мучительно медленных гибких дисков и такого, tmpfs для stricty временных данных), никто не считал достаточно важным добавить необходимые ужасные взломы. –  vonbrand 28.02.2013, 18:39
  • 5
    , я попытался выполнить свой код направляющих от tmpfs (RAM) файловая система, и я не видел различия вообще. Я действительно надеялся на заметное различие, но я был разочарован тем, как потрясающий Linux. –  Khaja Minhajuddin 04.03.2013, 21:25

Для создания большого диска поршня после начальной загрузки, без бездельничания с параметрами ядра, это, кажется, работает. Используйте tmpfs, сделайте файл, смонтируйте его через цикл и смонтируйте что через файловую систему:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
mount /dev/loop0 temp2/

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

3
27.01.2020, 19:31

OP объем ОЗУ выражен в МБ. Итак, все, что вам нужно для ввода, это 16384. И тогда вуаля, вы готовы к делу.

1
27.01.2020, 19:31

Вы можете смонтировать файловую систему ramfs, скопировать в нее свой проект и работать оттуда. Это гарантирует, что ваши входные файлы будут загружены в ОЗУ, и они не будут повторно -считаны с гораздо более медленного диска. Однако, как вы обнаружили, это, как правило, бесполезная стратегия. Вы уже получаете ту же самую выгоду.

Ramfs is a very simple filesystem that exports Linux's disk caching mechanisms (the page cache and dentry cache) as a dynamically resizable RAM-based filesystem.

--https://github.com/torvalds/linux/blob/v4.18/Documentation/filesystems/ramfs-rootfs-initramfs.txt

Вы уже можете быть уверены, что ваши входные файлы кэшируются в ОЗУ при первом чтении. Ваши выходные файлы также кэшируются, так что вам не нужно ждать, пока они будут записаны на диск.

Нет искусственных ограничений на объем кэша, продолжительность его хранения и т. д. Кэши начинают удаляться только после заполнения оперативной памяти. Какой кеш сбрасывается первым, выбирается ужасающе сложными алгоритмами. В первом приближении мы описываем его как «наименее недавно использовавшийся». См. Какие алгоритмы замены страниц используются в ядре Linux для файлового кэша ОС?

Обратите внимание, что ваш текстовый редактор явно fsync()сохраняет файлы на диск.

Если вы запускаете тесты программы, включающей fsync(), запуск их в файловой системе, такой как ramfs, может ускорить их. Другая стратегия состоит в том, чтобы попытаться отключить fsync()с помощью eatmydata/ nosync.so.

Некоторые другие операционные системы могут иметь особые ограничения, которые можно обойти с помощью виртуального диска. С одной стороны, отсутствие какого-либо кэширования файлов является причиной популярности виртуальных дисков в DOS .

тмпфс

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

Большинство людей придерживаются tmpfs, потому что это также позволяет вам ограничить общий размер и показывает правильно используемое пространство, например. в команде df. Я не уверен, почему существует эта разница. Ограничение размера в tmpfsзащищает вас от случайного заполнения всей вашей оперативной памяти и, по сути, уничтожения вашей системы. По умолчанию это половина вашей оперативной памяти.

Другие причины замедления записи

Вышеупомянутое упрощение адаптировано для вашего случая. Запись в файлы в вашем случае не должна ждать диска. Однако есть некоторые случаи записи, которые делают. См. отличный пост в блоге Почему буферизованная запись иногда останавливается . Самым удивительным случаем является недавнее изменение в Linux под названием «стабильная запись страницы».

3
27.01.2020, 19:31

Помимо tmpfsи ramfs, еще одним вариантом является блочное устройство /dev/ram0. В последних версиях Ubuntu это устройство не существует по умолчанию, но его можно создать с помощью modprobe brd.

Этот подход более предсказуем, поскольку он создает реальную ext4файловую систему и никогда не превышает указанный вами предел. Но для настройки требуется больше действий, а оперативная память используется менее эффективно.

Использование модуля ядра brd (/dev/ram0)

Чтобы создать и инициализировать RAM-диск объемом 4 ГБ:

mkdir /ramdisk

modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk

Параметр rd_nrуказывает, сколько RAM-дисков создавать (по умолчанию, он создает 16, т.е. /dev/ram0-/dev/ram15). Параметр rd_sizeимеет размер в килобайтах . Синтаксис $((... ))позволяет выполнять арифметические действия в оболочке.

Чтобы освободить RAM-диск, размонтируйте его и удалите brdмодуль ядра:

umount /ramdisk
modprobe -r brd

Создание блочного устройства внутриramfs

Кроме того, вы можете создать блочное устройство внутриramfs:

mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage

truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk

Команда truncateсоздает пустой файл заданного размера таким образом, что он инициализируется (, т.е. потребляет память )по запросу -.

Чтобы освободить RAM-диск, размонтируйте его и удалите образ диска:

umount /ramdisk
rm /ramdisk-storage/ramdisk.img

Сравнение с tmpfsиramfs

Хотя tmpfsи ramfsболее эффективны, чем использование блочного устройства, ниже приведены некоторые их недостатки.

tmpfsможет переключиться на диск. Это более эффективно, но иногда вам может понадобиться чистый RAM-диск :

.
  • Файлы, с которыми вы работаете, являются конфиденциальными (, например. файлы из зашифрованного раздела ).
  • Вы проводите тестирование производительности и не хотите, чтобы дисковый ввод-вывод был фактором (Время записи SSD может сильно различаться ).
  • Вы распаковываете большой файл и не хотите изнашивать свой SSD.

ramfsлегко настроить, освобождает место после удаления файлов,и использует оперативную память более эффективно (система не буферизует файлы, поскольку знает, что они находятся в оперативной памяти ). Но у него есть свои минусы и сюрпризы:

  • Утилита dfне сообщает об использовании пространства:

    root@cello-linux:~# df -h /ramdisk
    Filesystem      Size  Used Avail Use% Mounted on
    ramfs              0     0     0    - /ramdisk
    
  • Параметр ограничения размера отсутствует. Если вы поместите слишком много на виртуальный диск, ваша система зависнет.

  • Разреженные файлы могут стать неразреженными, когда вы меньше всего этого ожидаете. Этим утром я скопировал образ ВМ (150G, но 49G используется на диске )в ramfs(. У меня 128G ОЗУ ). Это сработало. Но когда я скопировал из в ramfsв место назначения, моя система перестала отвечать. Утилита cp, по-видимому, заполнила пробелы в чтении , но не в записи.

И tmpfs, и ramfsмогут вести себя иначе, чем реальная файловая система ext4. Этого можно избежать, создав блочное устройство в ОЗУ и инициализировав его с помощью ext4.

Для более глубокого сравнения -:https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

9
27.01.2020, 19:31

Теги

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