Это нормально для mke2fs потреблять выше 100 МБ или оперативной памяти?

1

При запуске mke2fs -t [ext2|ext3|ext4] /dev/sda1программа потребляет более 100 МБ памяти, что может быть довольно проблематично для встроенной системы. Это нормальное поведение? Есть ли способ как-то его опустить?

Дополнительная информация:

Я использую e2fsprogs 1.41.14. Пробовал запустить его на 1.42.11 с -Dопцией, которая дала мне аналогичные результаты. Это означает, что это не проблема очистки кэша ввода-вывода.

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

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

RoughTomato
источник
Мне не кажется абсолютно возмутительным, если файловая система большая. Насколько большую файловую систему вы создаете? Как вы измеряете использование памяти? Пожалуйста, отредактируйте .
CVn
одна файловая система на диске 500 ГБ. Я боюсь нехватки памяти. Интересно, смогу ли я как-то сократить использование памяти. 150-200MiB - это много, если система, на которой я работаю, получает только 512MiB, где ~ 100 требуется Linux, который там все работает
RoughTomato
@ MichaelKjörling Я бегу бесплатно с интервалами ~ 1 с, затем беру верхнее значение и вычитаю его из-за использования памяти ОС, которое несколько стабильно. + - 5-10MiB не имеет большого значения в этом случае.
RoughTomato
Это не ответ на ваш вопрос, но если у вас есть свободное место на диске, вы можете создать файл подкачки и использовать его временно во время операций с большим объемом памяти. Что касается утечек памяти, исключаемых освобождением памяти после завершения программы, я не уверен, что вы можете утверждать это окончательно на основе наблюдения за внешним поведением; любая память, все еще удерживаемая завершающим процессом, должна (предположительно) автоматически освобождаться ядром. Выделение памяти связано с процессами, поэтому, когда процесс заканчивается, больше не остается ничего, чтобы требовать память, следовательно, она становится доступной для других.
CVn
У меня была точно такая же идея. Хотя в этом случае я не могу использовать обмен по соображениям безопасности. Оборудование не мое, правила сделаны кем-то другим. Я довольно быстро исключил утечку памяти из-за освобождения памяти после окончания и после чтения источников. Рассчитывал на какое-то тяжелое будущее памяти, которое я могу переключить. Ничего подобного не нашел, поэтому я спросил здесь. Надеялся, что кто-то мог сделать это раньше или знает какой-нибудь способ освободить память. Тем не мение. Спасибо за вашу помощь. Я подготовлю отчет по проблеме и надеюсь, что они примут это.
RoughTomato

Ответы:

2

Я связался с автором e2fsprogs и задал этот вопрос. После консультации я обновился до последней версии (1.43) с github. В обычном режиме мало что изменилось. Использование памяти немного лучше (90 МБ вместо 100 МБ), но опция -D (используйте direct_io, опускайте буферы / кеши), делая процесс в два или три раза дольше, значительно сокращает объем памяти (~ 8-10 МБ). Стоит заметить, что я проводил аналогичный эксперимент с 1.42.x и не достиг аналогичных результатов.

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

Если кому-то нужна дополнительная информация по этой теме, я открыт для обсуждения.

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

RoughTomato
источник