리눅스

(9)Linux에서 유저 메모리와 커널 메모리

나뭇빛자루 2020. 9. 23. 18:38
반응형

유저 메모리

 

tmpfs 는 물리 메모리를 사용한 RAM 디스크 기능을 제공한다.

tmpfs 는 파일 시스템으로서 마운트하면 일반적인

파일 시스템과 같은 파일의 읽기 쓰기가 가능 하지만 파일은 서버의 하드에 저장됨

tmpfs에 파일을 저장하면 시스템은 파일을 우선 디스크 캐시에 저장하게된다

이것이 Shmem 이며 디스크 캐시를 의미하는 buffer+cached로 분류됨

하지만 이것에 대응하는 물리디스크의 영역은 없으므로 File-bached 메모리가 아니라

Anonymous(Active[anon] + inactive[anon]) 메모리의 LRU리스트에 등록된다.

이것이 File-backed 메모리의 합계와  buffer+cached 값의 차이가 된다.

 

tmpfs가 사용하는 메모리가 Shmem인 이유는

리눅스에서 복수의 프로세스가 같은 메모리 내용을 공유하는 공유 메모리를

사용하기 위해 tmpfs를 사용한다 

tmpfs내부에 작성한 파일을 파일 매핑 기능을 사용해 복수 프로세스의 

논리 어드레스 공간에 연결하고 있다.

 

이런 이유로 tmpfs가 사용하는 메모리를 커널 내부에서 Shmem이라 부르고

커널 소스코드에서도 tmpfs의 기능은 mm/shmem.c 라는 파일에 구현된다.

 

유저 메모리의 분류는 아래 그림과 같다.

유저 메모리 계산 방법

처음 커멘드 합산  93256kb

두번째 커멘드 합산 93212kb

근소한 차이는 있지만 비슷하게 구해 졌다.

 

첫번째 커멘드에서 AnonPages란 메모리의 각 페이지에 대해

그 페이지가 어떤 PS의 어떤 논리 어드레스에 매핑되어 있는가의

정보를 관리하는 rmap이란 구조가 있다.

 

 

 

 

==========================================================

커널 메모리

 

 

커널 메모리의 사용량은 전체 메모리 사용량에서 유저 메모리 사용량을 빼면 알 수 있다.

 

커널 메모리 = MemTotal - (MemFree + Active + Inactive + Unevictable)

 

정도 이지만 커널 메모리의 구체적인 내용은 알수 없다. 

/proc/meminfo에서 Slab라는게 있는데 이는 슬렙할당자 에 의해 확보된 메모리에 총량이다.

 

슬렙 할당자란(slab allocator)

커널이 사용하는 여러 데이터를 저장하는 메모리 영역은

빈 메모리를 찾아서 그때그때 사용하는 것이 아니라 

데이터의 형식에 따라 미리 확보해둔 영역을 분배하는 형식으로 사용되며

메모리는 4KB의 페이지 단위로 나눠 릴리즈되며

4KB이하의 메모리가 필요시 분할 해서 사용할 필요가 있는데

이런 기능들을 제공해 준다.

 

또한 Slab 에 밑에 

SReclaimable - 사용중인 객체가 없어 파기할 수 있는 슬랩 용량

SUnreclaim - 사용중인 객체가 있어 파기할 수 없는 슬랩 용량

의 정보가 있다.

 

슬렙에 대해 정확한 정보는 /proc/slabinfo 을 출력해 확인할 수 있다.

여기서 확인 할 수 있는 내용은

슬랩의  수 num_slabs

여기에 속한 사용중인 슬랩의 수 active_slabs

한 개의 슬랩이 사용하는 메모리 페이지수 pagesperslab

한 개의 슬랩 안의 객체 수 obfperslab

전체 객체 수 num_objs 

사용 중인 객체 수 active_objs

등 알 수 있다.

 

그 다음으론 VmallocUsed가 있는데 커널이 메모리를 사용할때는 

슬랩 할당자가 준비한 객체를 사용하지 않고 빈 페이지를 논리 어드레스에

직접 매핑하여 사용하는 경우도 있다.

 

커널 내부에서 이런 목적으로 사용하는 논리 어드레스의 범위가 미리 정해져 있는데

그게 VmallocTotal 이다.

 

KernelStack은 커널의 프로그램 코드가 사용하는 스택 영역이이고

리눅스 커널은 실행하는 유저 프로세스를 계속 바꾸면서 처리해가기 때문에

커널이 사용하는 스택 영역도 유저 PS마다 준비한다.

 

PageTables은 페이지 테이블을 뜻하며  각 유저 프로세스의 논리 어드레스에

대응하는 물리 어드레스의 변환표를 저장하는 메모리 영역이므로

이것도 PS을 가동할 때 마다 증가한다.

 

 

 

 

 

 

 

 

반응형

'리눅스' 카테고리의 다른 글

DNS 설정  (0) 2021.02.12
Samba 서버 buff/cache 메모리에 대해  (0) 2020.11.26
(2) Linux에서 디스크 확인과 구조  (0) 2020.09.18
(1) Linux 사용 서버의 기초 확인 방법  (0) 2020.09.18
PXE server 구축 (pxe 서버 구축)  (0) 2020.08.29