Каково максимальное значение по умолчанию для /proc/sys/kernel/shmmax

У меня есть двусмысленность относительно того, какое максимальное значение в shmmax должно быть установлено.

После просмотра статистики моей системы, она показывает следующее:

#cat /proc/sys/kernel/shmmax 
18446744073692774399

#ipcs -l

------ Messages Limits --------
max queues system wide = 3675
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

В идеале значение общей памяти не должно превышать фактический объем ОЗУ (который составляет 21474836480 байт). Тогда возможно ли это? Или это мусорная ценность.

1 ответ

Значение, которое вы показываете: 18446744073692774399

соответствует: 0xFFFFFFFFFEFFFFFF

или 1111 1111 1111 1111 1111 1111 1111 1111 63 47 1111 1110 1111 1111 1111 1111 1111 1111 31 15

так что это не совсем максимальное значение 64-разрядного целого числа без знака, но почти.

По умолчанию задано максимально возможное значение unsigned long в 64-битной системе (2^64) = 18446744073709551616 (за исключением некоторого необходимого места в памяти, которое я предполагаю).

Если максимальное значение общей ОЗУ> фактической ОЗУ, это означает, что все доступное ОЗУ может быть разделено. Вы всегда можете опустить его, но по умолчанию это (близко) ко всему.

Они сдвигают бит 1 без знака длиной на 24 (1UL << 24) = 16777216, а затем вычитают это из теоретического максимума, который дает вам значение.

18446744073709551616 - 16777217 = 18446744073692774399

Я гуглю по вашему вопросу и нашел только документацию по настройке shmmax а также shmall параметры. Лучший был в этом ответе. Так что на ваш вопрос, если ваш shmmax установите более высокое значение, чем больше у вас ОЗУ, тем больше мусора, система не позволяет использовать для совместно используемой памяти больше, чем у вас есть ОЗУ (не знаю, что такое своп).

Другие вопросы по тегам