오퍼링 > 소프트웨어 테크놀로지 서비스 > 오픈소스 SW > OS > 자료실

오픈소스 SW 자료실 - OS

오픈소스 OS 관련 기술서비스 정보 및 자료를 제공합니다.

swappiness 커널 파라미터 관련(SWAP)

2021.02.25

Q1. Swap 이란?


• 시스템 운영 중 메모리 사용량이 늘어남에 따라 디스크의 일부를 마치 확장된 RAM 처럼 사용할 수 있게 해주는 기술입니다.

• 커널은 실제 메모리에 올라와 있는 메모리 블록들 중에서 당장 쓰이지 않는 것을 디스크에 저장하여, 사용 가능한 메모리 영역을 늘립니다.

 

Q2. 커널 vm.swappiness 파라미터란?


• 해당 설정값은 0 - 100 까지 설정 가능하며,  100 값으로 설정하게 되면 적극적으로 swap 을 사용하고 0값으로 설정하면 최악의 상황에서 swap을 사용 하게 됩니다.

• 기본값은 60입니다.

• 단, tuned 를 사용할 경우 profile 에 의해 자동 할당되게 됩니다.

° tuned의 virtual-guest profile을 사용할 경우 값은 30 입니다.


° throughput-performance profile을 사용할 경우 값은 10 입니다.


• 리눅스 에서 Swap 은 swap_tendency 값이 100 을 넘어서는 시점부터 swap 을 시작하며, 계산 공식에 swappiness가 포함 됩니다.

• swap_tendency 공식은 아래와 같습니다.

° swap_tendency = mapped_ratio / 2 + distress + swappiness


mapped_ratio


° 전체 메모리 중 구동 중인 애플리케이션들이 사용하고 있는 (Mapped) 메모리의 공간 비율 입니다.


° 만약 전체 16G 메모리 중 12G의 메모리가 사용이 되고 있다면 mapped_ratio 값은 75가 됩니다.


° 즉, 100이 넘지 않았으므로 swap이 발생하지 않게 됩니다.


° 확인 방법은 "cat /proc/meminfo | grep Mapped" 로 확인 가능 합니다.


distress


° 메모리 페이지 확보가 얼마나 어려운 상태인지 나타내는 지표로서 0~100 의 값 입니다.


° 리눅스 커널은 페이지 프레임 회수 알고리즘에 의해 접근 빈도가 적은 페이지를
활성 리스트에서 비활성 리스트로 옮기는 작업을 수행합니다.


° 한꺼번에 너무 많은 페이지를 회수하게 되면 시스템 성능이 저하되기 때문에
활성 리스트에서 적은 개수의 페이지 검색을 시도 합니다.


° 페이지 회수에 실패하는 경우 점점 더 많은 개수의 페이지를 찾아서 옮기게 됩니다.


° 이때 priority 값이 떨어지게 되는데(12 -> 0) priority 값이 변함에 따라 distress 값도 같이 변하게 됩니다.
distress = 100 / (2^ priority)
priority(distress) : 12~7(0), 6(1), 5(3), 4(6), 3(12), 2(25), 1(50), 0(100)


swappiness


° swap 메모리 사용을 제어하기 위한 커널 파라미터 옵션으로 기본값은 60 입니다.


° 평상시 Distress 값은 0 이므로 일반적인 경우라면 메모리 사용율(mapped_ratio)이
80%을 넘게 되는 시점부터 swap 발생하게 됩니다.


° 가용 메모리 공간이 남아 있음에도 불구하고 swap 메모리를 사용하게 되는 이유이며,
이런 성능 이슈가 발생될 수 있는 부분을 swappiness로 컨트롤 할 수 있습니다.


 

• DB 시스템 에서 사용 예

 

° 보통 DB 시스템의 경우 swappiness의 값을 10 으로 설정을 많이 하고 있습니다.


° swap 을 사용하게 되면 성능에 영향이 직접적으로 발생 하게 됩니다.


° swap을 사용하지 않기 위해 대부분 DB 시스템이 미리 할당된 영역을 사용 합니다.


– SGA 영역 혹은 hugepage 설정을 통해 미리 할당된 영역을 사용 합니다.


° swappiness 설정을 10 으로 설정하게 되면 swap 사용 빈도를 줄일 수 있습니다.


° 메모리 사용률이 99% 이지만 대부분 Cached 영역이어서 재사용이 가능한 부분이라면


– Swap 영역을 사용하지 않고 Page out을 통한 메모리를 할당이 이루어 지게 됩니다.


° OS백업, DB백업, Batch Job 등의 순간적인 IO를 발생 시켜야 하는 경우


– swap이 발생 할 수 있어 모니터링이 필요 합니다.




Q3. 운영 중 Online 으로 vm.swappiness 값 변경 시, 현재 swap을 사용하고 있는 프로세스에도 변경 값이 바로 적용 되나요?


• 현재 swap을 사용하고 있는 프로세스에는 변화는 없으며 적용 이후부터 적용 되게 됩니다.

• 즉, 변경하였다고 해서 기존에 사용 중 이였던 Swap Page가 Swap in 되지 않습니다.


Q4. swap 사용하고 있는 프로세스의 재시작만으로 swap 영역 회수 가능 하나요?


• 사용 중인 프로세스를 STOP하게 되면 Swap 영역 회수를 하지만 순식간에 바로 되는 경우도 조금 시간이 걸리는 경우도 있습니다.

• 따라서 RESTART 보단 STOP - 확인 - START 를 권장 드립니다.


Q5. 운영 중인 장비의 swap 사용률 증가를 막거나 swap 영역 회수를 위해 권장하는 방법이 있나요?


• 여유 메모리 (Cached 포함) 가 남아 있다면 swappiness 설정이 가장 효과적입니다.

• 기본값인 60에서 10으로 변경 하여 모니터링 권장 드립니다.