본문 바로가기

IBM/AIX

paging In/Out 으로 인한 성능 저하

우영님의 블로그에 메모리 swaping 이 지속적으로 발생하는 현상이라는 포스트가 올라왔다. 내용을 간단하게 정리하면 다음과 같다. 

시스템의 Free Memory가 있음에도 불구하고 Paging In/Out이 빈번하게 발생한다.
Paging In/Out으로 인하여 Wait CPU 사용률이 증가하고 서비스가 지연되었다.

그리하여 다음 명령어를 사용하면 해결된다.

# vmo -p  -o maxclient%=70 -o maxperm%=70 -o minperm%=30 
  (재부팅시 반영)

이 포스트를 보면서 maxclient, maxperm, minperm이 무슨 뜻일까 하는 생각이 들었다. 각각의 용어에 대한 설명과 AIX에서 메모리 관리 방법이 들어 있는 문서를 첨부한다. 

AIX5 Initial Settings for Databases Servers


Performance Management Guide


나는 Performance Management Guide 중에 Performance Overview of the Virtual Memory Manager(VMM) 만 읽었다. 다른 부분도 읽어두면 후에 좋을 것 같다. 

처음에 제시된 문제 시스템의 Free Memory가 있음에도 불구하고 Paging In/Out이 빈번하게 발생하는 문제의 해답에 대하여 다른 결과가 있어서 넣는다. Aix Service에 올라온 글로서 IBM의 이현진님이 작성한 것으로 보인다. 원문링크

client page사용시 lru algorithm을 변경할 수 있는 lru_file_repage 설정 값이 생겼습니다.        

아래 APAR 를 통한 새로운 메모리 설정 값이 생겼습니다. 

1. for AIX 5.1 : IY69789 remove repaging checks for client lru
2. for AIX 5.2 : IY62224 remove repaging checks for client lru

jfs2 파일 시스템을 사용할 경우 jfs2 파일 시스템이 메모리 page 중 client page를 사용하게 되는데 AIX 5.1 및 AIX 5.2 ML04 이전 버전의 경우 maxclient 기본적으로 hardlimit으로 적용이 되어 있게됩니다. 따라서 numclient가 minperm과 maxclient 사이에 위치하게 되는데 이때에는 lru의 규칙이 client page나 computational page 중 repage rate을 따져서 우선 순위가 낮은 page를 steal하게 되어 있습니다. 

그런데 maxclient가 hardlimit으로 되어 있음에 따라 client page가 maxclient에 도달하게 되면 client page의 file repage rate이 증가하게 되어서 computational page가 상대적으로 우선 순위가 낮아지기 때문에 심지어 여유 메모리가 많이 있음에도 불구하고 paging space page in/out이 계속적으로 발생하는 경우를 종종 볼 수가 있었습니다.

이런 현상을 방지하기 위해서 AIX 5.2 ML04 이상 버전에서는 쉽게 strict_maxclient를 0으로 설정할 수 있습니다만 strict_maxclient 설정 값 자체가 없기 때문에 어떻게 할 방법이 없었습니다.

위와 같은 문제에 대한 조치로 위에 기재한 APAR가 나왔는데 이 APAR를 설치하면 lru_file_repage라는 설정 값이 생깁니다. 이 설정 값은 0과 1로 설정할 수 있는데 이 값이 0으로 설정이 되면 file page가 minperm이상의 값을 유지하는 이상 page steal이 우선 순위와 상관없이 항상 file page에서 발생하게 됩니다. 하지만 file page가 minperm 이하로 떨어지면 예전과 같이 reference되지 않은 page를 무작위로 steal하게 되지요...

따라서 AIX 5.2 ML04 이전 버전의 환경에서 jfs2를 사용할 때 위의 문제로 인해 paging space page in/out이 과다하게 발생하게 된다면 lru_file_repage를 0으로 설정하는 것이 좋겠습니다.

위의 설명과 같이 maxclient 값이 hardlimit으로 적용 되어 있기 때문에 Free Memory가 남아도 Paging In/Out 이 빈번하게 발생할 수 있다는 애기 입니다. 그걸 방지하기 위해서 lru_file_repage라는 설정이 생겼다고 하네요. 이 설정을 확인하기 위해서 AIX 5.2이후에서는 vmo 명령을 이용하면 됩니다. 우영님의 포스트에 설명이 나와 있습니다.