управление использованием памяти tmpfs

4867
gcb

Любой способ ограничить объем оперативной памяти, используемой tmpfs без ограничения объема подкачки?

В большинстве документов говорится, что sizeопция tmpfs ограничит общий размер раздела tmpfs, а позже будет сказано, что это пространство используется как RAM, так и SWAP. А затем говорит, что по умолчанию половина вашего оперативной памяти, потому что, если он использует всю оперативную память, вы получаете фатальные ошибки OOM. Это сбивает с толку.

Я бы хотел, чтобы он использовал 1/4 моего барана, но до 3/4 свопа, например.

5

1 ответ на вопрос

6
grifferz

Насколько я знаю, вы не можете контролировать, какие части системы виртуальной памяти (например, RAM или swap) используются для tmpfs.

Однако неверно, что создание больших tmpfs приведет к фатальным ошибкам OOM. Вы можете создать tmpfs больше, чем ваш общий объем RAM + SWAP, потому что ничего из этого не используется, пока вы не поместите файлы в tmpfs.

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

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

Так что на самом деле безопасно указывать большие tmpfs /tmpдо тех пор, пока у вас также есть приличный объем подкачки. Вы говорите, что с вами все будет в порядке, если использовать 25% оперативной памяти и 75% объема подкачки. В этом случае, скажем, у вас обычно есть 1 ГБ ОЗУ и 2 ГБ подкачки. Я бы установил tmpfs на 1G и немного подкачал, скажем, к 3G.

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

он говорит «по умолчанию 1/2 вашей памяти», а здесь это означает, что память означает физическую RAM. но он также может распространяться на использование SWAP. я хотел бы иметь не более 400 МБ для `/ tmp`, но некоторые странные приложения, такие как UNetBootin, настаивают на загрузке ISO-образов в / tmp ... я не возражаю против того, чтобы эти файлы загружались для замены в редких случаях. используйте это ... но я бы не отказался от того, чтобы мои tmpfs могли постоянно есть весь мой баран. и вот что бы `size = 4g` gcb 11 лет назад 0
Извините, я неправильно понял ваш вопрос. Я строго отредактирую свой ответ, поскольку в настоящее время он в основном хуже, чем бесполезен. К сожалению, в настоящее время я не знаю, как сделать это полезным. grifferz 11 лет назад 0
Благодарю. Сейчас я делаю эксперименты (в основном проверяю изложенные вами предположения), буду ссылаться на ветку форума Debian, когда у меня будет что-то убедительное. gcb 11 лет назад 0
так как же получились тесты (gcb?) ck_ 11 лет назад 0
@ck_ Я заставил его работать так, как я хотел (я мог загрузить ISO, используя liveUSB, а затем расширить iso на другом блочном устройстве, не теряя при этом весь оперативной памяти). Моя память работает не очень хорошо, но я помню, я нашел другие флаги кроме `size` в новых ядрах. Также я не могу найти ветку на форумах Debian ... может быть, она была удалена (это началось с того, что какой-то сумасшедший чувак пожаловался на то, что я тоже «пересылаю», отправив здесь тот же вопрос. Возможно, некоторые администраторы этого не заметили) после идиотского спора была полезная дискуссия). вернет систему, которую я использовал в тот раз, на следующей неделе :) gcb 10 лет назад 0