Инструмент для принуждения ФАЙЛА использования вместо RAM

aptitude имеет свою собственную базу данных состояний пакета /var/lib/aptitude/pkgstates, который, к сожалению, кажется, довольно не документирован. Это хранит блок как это для каждого пакета:

Package: bash
Architecture: amd64
Unseen: no
State: 1
Dselect-State: 1
Remove-Reason: 0

Я верю состоянию 1 средство installed, белое состояние 3 средства not installed. У меня также есть несколько пакетов с состоянием 4 в моей системе, но я не могу выяснить то, что это означает.

Я полагаю, что Вашей проблемой является результат на несоответствии между dpkg база данных /var/lib/dpkg/status и aptitude база данных /var/lib/aptitude/pkgstates. Согласно этому сообщению pkgstates как предполагается, отражает "'намеченное' состояние пользователя для пакета [s]", таким образом, способность, вероятно, полагает, что пользователь хочет, чтобы эти пакеты были установлены даже при том, что склонный - добираются, только что удалил их.

Кажется, что лучшее решение для Вашей проблемы состоит в том, чтобы сделать то, что предлагает tripleee: использовать aptitude если это установлено, и в противном случае отступите к apt-get.

3
15.04.2014, 16:47
2 ответа
[117685]Есть нечто вроде того, что вы описываете: есть возможность ограничить объем используемой процессором оперативной памяти (оперативной памяти, в отличие от виртуальной). Ограничение [118146]RLIMIT_RSS[118147] устанавливает верхний предел размера резидентного множества программы, т.е. той части памяти процесса, которая является резидентной в памяти (в отличие от swapped out). Однако на Linux это не реализовано.[12126]RLIMIT_RSS[118149] существовало в некоторых старых Unix-системах (только BSD?), но было выведено из употребления во многих современных системах. На [118150]Linux[118151] он существовал только на серии 2.4 (и даже не работал полностью). На Solaris она была [118152] сброшена [118153] в какой-то момент в далеком прошлом (когда [118154] Solaris[118155] SunOS перешла с BSD на System V, может быть?). [118156] Кажется, во FreeBSD[118157] всё ещё есть. [12127] Я не знаю, почему [118158] RLIMIT_RSS[118159] был удалён. [118160]Алан Кокс [118161] сказал это в 2006 году:[12128]Оригинальный мм для Linux не применял его, так как он не есть какой-нибудь способ отследить RSS, который не был дорогостоящим с точки зрения вычислений. ток мм, вероятно, способен реализовать ограничения RSS, хотя вопросы о том, какой эффект это даст, если пользователь установит параметр низкий лимит RSS, а затем вызывает большое количество swap-мотаний. [12129]Если вы видите способ эффективной реализации, то вперед.[12130]С тех пор эта тема поднималась несколько раз, но насколько я знаю, никаких патчей к ядру Linux принято не было.[12131]Одна из причин, по которой введение ограничения на использование физической памяти для процесса, заключается в том, что трудно определить, какой объем физической памяти использует процесс. Хорошо, посчитайте его стек и кучу (часть, которая не подменяется). А как насчет файлов, отображенных в памяти? Чтобы измерить использование физической памяти процессом, нужно посчитать кэш, используемый файлами, которые он отображает. А как насчет разделяемых библиотек и других разделяемых отображений? Если они используются одним процессом, то очевидно, что они должны быть подсчитаны - но когда они используются несколькими процессами, трудно узнать, какой процесс использует какую часть.[12132]Не имеет смысла ограничивать использование физической памяти одним процессом. Учитывая, что ограничения по ресурсам наследуются, каждому дочернему процессу будет позволено использовать столько же физической памяти. Немного больше смысла в том, чтобы разрешить ограничение на физическую память для набора процессов. В Linux эта возможность встроена в [118166]cgroups [118167], частичную систему виртуализации, где процесс и его потомки запускаются в контейнере, который может иметь собственный корень файловой системы, собственные сетевые контроллеры, собственные ограничения на ресурсы и т.д. Использование памяти группы [118168]cgroup[118169] может быть ограничено параметром [118170]memory.limit_in_bytes[118171] ([118172]memory.memsw.limit_in_bytes[118173] контролирует использование оперативной памяти плюс своп). В документации предупреждается, что общие страницы между группами присваиваются несколько произвольно ("Общие страницы учитываются на основе подхода первого касания. cgroup, которая первым прикоснется к странице, учитывается для страницы."). Там [118174] могут быть другие способы [118175], в которых ограничение не строго соблюдается. [12133] Другая часть того, что вы просите, это иметь специальный файл подкачки для процесса. Это потребует значительного усложнения ядра. Помните, что страницы могут быть общими; какой файл подкачки вы используете, если двум процессам выделено разное пространство подкачки? С другой стороны, эта возможность может быть реализована довольно легко со стороны процесса: отобразить файл в память. Для совместно используемых страниц остается один файл. В качестве побочного преимущества, различные области процесса могут использовать разное "пространство подкачки".[117700].
2
27.01.2020, 21:14
[117595] Такого инструмента нет, потому что он не имеет смысла с точки зрения одной программы.

В качестве ресурсов можно рассматривать CPU/HDD/RAM/swap. Эти ресурсы могут совместно использоваться операционной системой различными способами между процессами, пользователями, контекстами и т.д.

В некоторых специфических ситуациях имеет смысл сказать операционной системе, чтобы она ввела жесткие ограничения:

Не позволяйте этой программе использовать более 60% памяти.

Не позволяйте этому пользователю использовать более 20% процессорного времени, если это нужно другому пользователю. Иначе позвольте ему использовать 100% процессора.

Не позволяйте пользователям из этой группы использовать более 2 ядер.

...

Это обеспечивает реальную [118043]гибкость[118044]: ресурсы делятся между пользователями в соответствии с желаниями администратора и операционной системы.

net use S: \\SHIRE\Baggins <password> /USER:<domain>\<user> /SAVECRED /PERSISTENT:YES

Почему ручное размещение программы для подкачки не является хорошей идеей?

Вы в основном предполагаете, что вы лучше эвристики в ядре. Ядро уже само обрабатывает пространство подкачки. Если демон не был активирован долгое время и в операционной системе не хватает оперативной памяти, то в конце концов он будет помещен в swap.

AFAIK, swap не является исполняемым: перед исполнением содержимое swap должно быть извлечено в оперативную память. Так что если вы думаете о программах первого класса, выполняющихся из оперативной памяти, и программ второго класса, выполняющихся из swap: остановитесь сейчас, это не сработает.

"Да, но этот конкретный демон вызывается дважды в месяц. Мне он не нужен в оперативной памяти". Если это правда, то кернел вставит swap, если не хватает оперативной памяти.

"Зачем ждать, когда не хватает оперативной памяти?". Вкладывать и выкладывать своп очень дорого, особенно на обычном старом жестком диске. Если ваша система может хранить всё в оперативной памяти, лучше пусть так и будет. Если вы заставите что-то вставить в своп, на данный момент ваша система будет менее отзывчивой. Так как другие демоны "1-го класса", скорее всего, тоже должны выполнить некоторые операции ввода-вывода на HDD, они также будут замедлены. То же самое происходит, когда демон "2-го класса" просыпается и его нужно поместить в оперативную память.

Теперь, почему пользователь не может использовать волшебную командную строку, чтобы поместить программу в своп?

Непонятно, что нужно поместить в своп с точки зрения пользовательского пространства (неядерного). Ваша программа компонована с [118452]libmylib.so[118453], должна ли она также поместить это в обмен? А как насчет [118454]libc.so[118455]?

Каково на самом деле предполагаемое поведение? Ты хочешь, чтобы демон был помещен непосредственно в обмен? Но он должен будет выполнить некоторую работу по инициализации, не так ли? Тогда он вернётся в оперативную память, как только вы его загрузите.

Как вы узнаете, что демон больше не используется и может быть снова безопасно помещен в обмен?

Его нужно отправить обратно в обмен напрямую или немного подождать? В противном случае во время каждого сна ваш демон будет помещаться в обмен, а при каждом пробуждении он будет снова помещаться в оперативную память. Если ваш демон обновляет, например, часы вашего компьютера, будьте готовы к многочасовым заменам.

...

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

compiz-manager

Теперь, если вы действительно хотите.

(источник: [118457] freakoutnation.com[118458])[118067] , ядро предлагает эту "гибкость", используя [118068]cgroups[118069]. Вы можете получить то, что считаете нужным, установив max mem и max mem+swap для вашего демона в [118070]cgroups[118071]. Вы можете получить более резонансный результат, установив подкачки для каждой программы. Но в любом случае, это плохая идея и я не буду идти дальше [118072]this[118073] в качестве объяснения.[117616].

4
27.01.2020, 21:14

Теги

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