Действительно ли возможно вынудить определенную программу использовать виртуальную память?

Позвольте говорят, что у меня есть 1 ГБ RAM Ubuntu, я должен выполнить обоих memcached и redis на той же машине

Использование memcached довольно тяжело (например, чтение 1K в секунду), и советы менее тяжело (но все еще 10 чтений в секунду).

Поскольку моя машина приводится в действие SSD, таким образом, я думаю, позволить memcached работайте на реальной памяти и позвольте redis работайте на виртуальной памяти, действительно ли это возможно? (Так как в моем варианте использования память составляет только 1 ГБ, я хочу выделить больше memcached и меньше советам, как я думаю на приводимом в действие диске SSD, 10 чтений в секунду достаточно уже).

Какая-либо идея решить проблему?

0
задан 12 November 2014 в 20:30
1 ответ

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

Кернел Linux делает этот хороший фокус и позволяет процессам отображать столько памяти, сколько им нужно, даже больше, чем есть у системы.

Например, когда процесс запрашивает 1 гигабайт памяти, кернел говорит ok - вот ваш 1 гигабайт адресного пространства. Процесс не использует все эти 1 ГБ, а, скажем, 100 МБ, так что кернел, зная, что используется только 100 МБ, говорит: ok эти 100 МБ будут в оперативной памяти; но другие 900 я буду считать, что они могут быть использованы в будущем, и таким образом это позволяет другим процессам запрашивать больше памяти, независимо от того, что физически у вас только 1 ГБ.

В какой-то момент, если процессы извлекают слишком много памяти; у кернела есть эвристика для вычисления давления, если резервы памяти становятся низкими, он пытается освободить некоторые сегменты памяти. Опции вкратце сводятся к отказу от некоторых сегментов памяти, которые поддерживаются файловой системой (файлы, загруженные в память), перемещению некоторых неиспользуемых некоторое время порций памяти для 'swap' (убивает вашу дисковую IO)

В вашем примере вы можете легко получить memcache с 32 Мб ram, redis тоже с 32 Мб, следите за использованием памяти в memcache на плитах. Redis также будет доволен 32 Мб до того момента, когда он использует все 32 Мб и начинает проверять, что меньше всего использовалось в его памяти, чтобы выселить его (в зависимости от использования redis)

Memcache вещи, которые нужно помнить.

Общая память memcache разделена на X равных по размеру порций. Каждая порция называется slab и вмещает в себя пары keyy-value определенного диапазона размеров.

Некоторые slab могут быть заполнены, некоторые могут быть пустыми, в зависимости от размера значений, хранящихся в memcache. Статически определить размер плиты и диапазон значений, которые она будет держать, невозможно.

Как только данные попадут в плиту memcache, они будут выселены либо когда - срок его действия истекает - slab заполнен, и чтобы вписать новую пару значений ключей в слэб, наименее использованную нужно вытолкнуть

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

.
0
ответ дан 5 December 2019 в 13:03

Теги

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