shmmax 및 shmmni 값을 계산하고 Redhat에서 처음으로 정의하는 방법입니다. 나는 그 뒤에 숨겨진 수학을 이해하고 싶습니다. 커널 매개변수에 큰 숫자가 보이는데, 이 큰 숫자는 무엇인가요? 물리적 메모리와 어떤 관련이 있습니까? 128GB RAM과 SHMMAX="123695063040"이 있습니다.
답변1
Red Hat 문서에 따르면https://access.redhat.com/solutions/1437883(액세스는 Red Hat 인증 고객으로 제한될 수 있습니다):
Red Hat Enterprise Linux 7.1에서는 kernel.shmmax 및 kernel.shmall의 기본값이 변경되었습니다.
Red Hat Enterprise Linux 7.1에서는 kernel.shmmax 및 kernel.shmall의 기본값이 업스트림 커널에 설정된 값과 일치하도록 변경되었습니다. kernel.shmmax 및 kernel.shmall의 새로운 기본값은 18446744073692774399로 설정됩니다.
커널 코드에서 다음 공식을 사용하여 새 기본값을 계산합니다.
include/uapi/linux/shm.h
[...]
#define SHMMAX (ULONG_MAX - (1L<<24)) /* max shared seg size (bytes) */
#define SHMALL (ULONG_MAX - (1L<<24)) /* max shm system wide (pages) */