Категорії
Solaris

Shared Memory

Разделяемую память (англ. Shared memory) применяют для того, чтобы увеличить скорость прохождения данных между процессами. В обычной ситуации обмен информацией между процессами проходит через ядро. Техника разделяемой памяти позволяет осуществить обмен информацией не через ядро, а используя некоторую часть виртуального адресного пространства, куда помещаются и откуда считываются данные.
После создания разделяемого сегмента памяти любой из пользовательских процессов может подсоединить его к своему собственному виртуальному пространству и работать с ним, как с обычным сегментом памяти. Недостатком такого обмена информацией является отсутствие каких бы то ни было средств синхронизации, однако для преодоления этого недостатка можно использовать технику семафоров.

Хочу напомнить, что физическая память состоит из kernel memory (память ядра), shared memory и свободной памяти. Если же происходит нехватка памяти, начинается процесс свопинга. Вот простой пример для вычисления каждого компонента (позаимствован с сайте unixpin.com)

Физическая память:
$kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /physmem/ { print "Physical memory = " $2 * pgsize/1073741824 "Gb"}'

Память ядра:
$kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /pp_kernel/ { print "Kernel memory = " $2 * pgsize/1073741824 "Gb"}'

Разделяемая (shared) память:
$ipcs -mb | awk '/^m/ {sm=sm+$7}END{ print "Shared memory " sm/1073741824 "Gb"}'

Свободная память:
$kstat -n system_pages | nawk 'BEGIN{ "/usr/bin/pagesize" | getline pgsize ; } /freemem/ { print "Free memory = " $2 * pgsize/1073741824 "Gb"}'

Тестовый стенд: Solaris 11

Что бы посмотреть полностью статистику делаем так:

# ipcs -A
IPC status from <running system> as of Mon Apr 16 09:49:40 EDT 2012
T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP CBYTES  QNUM QBYTES LSPID LRPID   STIME    RTIME    CTIME          PROJECT
Message Queues:
T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME  ISMATTCH         PROJECT
Shared Memory:
m   16777241   0x172b2    --rw-r--r--    user5    other    user5    other      0 4999610368 27961  4452 16:35:00 16:35:01 20:41:13        0         user.user5
m   16777240   0x172b3    --rw-r--r--    user5    other    user5    other      0 4999610368  3341 27947 20:40:52 20:40:52 20:10:02        0         user.user5
m   16777228   0x1729e    --rw-r--r--    user5    other    user5    other      0 4999610368 12578  2829 17:04:51 17:04:54 16:25:00        0         user.user5
T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP NSEMS   OTIME    CTIME          PROJECT
Semaphores:

Но часто достаточно посмотреть только об активных сегментах shared memory:

# ipcs -m
IPC status from <running system> as of Mon Apr 16 09:52:16 EDT 2012
T         ID      KEY        MODE        OWNER    GROUP
Shared Memory:
m   16777241   0x172b2    --rw-r--r--    user5    other
m   16777240   0x172b3    --rw-r--r--    user5    other
m   16777228   0x1729e    --rw-r--r--    user5    other

Для удаления объекта из shared memory применяется команда ipcrm, которая в качестве параметра принимает ID SHM-объекта.

По умолчанию процесс может использовать под shared memory всю доступную память, без ограничений. Посмотрим, сколько доступно shared memory для обычного пользователя без ограничений:

#  prctl -n project.max-shm-memory $$
process: 14290: /usr/bin/bash
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
        privileged       382MB      -   deny                                 -
        system          16.0EB    max   deny                                 -

А вот пример ограниченний для зоны (зоне выделено 16Гб)

# prctl -n project.max-shm-memory $$
process: 12547: -bash
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
        privileged      15.6GB      -   deny                                 -
        system          16.0EB    max   deny

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff