AIX 에서의 Comp , Noncomp 의 메모리 사용확인및 튜닝
2011.01.03 22:20
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
출처 : http://www.systemadmin.pe.kr
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
==== IBM 유부선 ====
기본적으로 AIX는 v4.3.2부터 paging space allocation policy가 Deferred입니다.
즉, 실제로 real memory가 부족해서 paging space로 swap out 될 때만 paging space가 allocate됩니다.
따라서, 더 이상 paging space가 늘어나지 않을 때까지 관찰을 해보시고, 가령 그때까지의 paging space 사용량이 1GB 라고 하면, 1GB 정도만 더 memory 증설을 하시면 됩니다. 다만, filecache도 고려하고 안전빵도 생각하면, X 1.5 ~ 2 하시는 것이 좋겠지요.
Memory가 많아서 나쁠거야 없지만, 꼭 성능이 좋아지는 것은 아닙니다. 과다한 memory는 file cache용으로 밖에 안쓸테니까요.
==== 852 박재영 ====
그리고 paging fault 는 아시겠지만 모든 자료가 real memroy 에 있는 것이 아니고, 사용되지 않는
자료는 paging space 에 놓이게 되죠... 이때 paging space in 과 paging space out 이 발생하면서
paging fault 가 발생하게 됩니다. 이 비율이 많으면 real memoty 가 부족할때 많이 발생합니다.
==== 4139 유부선 ====
lsps -a 했을 때 사용량이 1% 이상이라면, 한때나마 memory 부족으로 paging space를 사용했었다는 이야기입니다. 다만, 다른 process가 종료되어 이제는 real memory에 여유가 있다고 하더라도, 한번 paging space로 내려갔던 page들은 계속 paging space를 점유하고 있으므로, 해당 process 자체가 죽지 않는 이상 lsps -a 했을 때 사용량은 어느 정도 남아 있게 됩니다.
==== 4127 유부선 ====
굳이 file cache를 clear하고 싶은 경우에는, vmtune의 -P값 (maxperm)을 매우 작게 줄이고 (가령 20%), -h (strict maxperm)을 1로 두시면 됩니다. 그러면 file cache가 강제적으로 20% 로 낮아지게 됩니다. 그러나, 특수한 상황이 아니라면, 이 strict maxperm은 사용하지 않으시는 것이 전체 performance에는 오히려 유리할 겁니다.
==== 3447 김혁 ====
www.aixservice.net 이라는 사이트가 있습니다. 그곳에서 성능튜닝 부분에 보면 해당 문서가 있습니다. 여러 기준값이 정의 되어 있습니다.
예로 paging space in/out 이 지속적으로 10 이상이면 memory bottle neck
cpu 사용률이 80 % 이상이면 bottle ncek
disk busy 율이 70% 이상이면 bottle neck 등입니다.
자세한 내용은 해당 문서를 참조 하시길...
==== 3355 유부선 ====
pagein, out 이라는 것이 어디에 나오는 것인가요 ? 혹시 monitor나 topas, nmon 등에서 보여주는 것이라면, 그것은 page steal을 말하는 것이 아닙니다. 단순히, real memory에 없는 내용이 요구되기 때문에, filesystem 등 disk나 network에서 불러들이고 내보내는 것을 뜻합니다. 따라서, page in/out은 memory 부족 여부와도 상관없고, page stealing과도 다릅니다.
==== 3145 유부선 ====
1. Paging In/Out은 real memory 상황이라기 보다는 virtual memory 상황입니다. Pagsp In/Out은 swap in/out이 맞습니다. 따라서, Paging In/Out은 사실상 유의해서 보실 필요가 없습니다. AIX의 memory 사용형태가 이해하기 어렵다는 분들이 종종 있는데, 사실은 매우 간단합니다. Swap in/out이 없다면 memory는 여유가 있는 상태이고, Swap in/out이 조금이라도 있다면 memory가 부족하거나, 또는 vmtune tuning이 제대로 안된 것입니다. 이는 Solaris 등과 달리, real memory를 file cache로 공격적으로 사용하기 때문이며, paging(swap) space 관리를 "Deferred Policy"를 이용하여 수행하기 때문입니다. 위에서 언급된 paging space 관리 policy에는 3가지가 있습니다만, AIX 4.3.2부터는 default로 "Deferred"를 사용합니다. 먼저, "Early"는 program이 구동될 때, malloc이 요구하는 memory를 곧장 paging space에도 잡아두는 것입니다. 둘째, "Late"는 malloc할 때는 paging space를 잡지 않다가, 나중에 malloc이 잡아둔 memory 공간에 뭔가 data가 들어갈 때 비로소 paging space를 잡는 것입니다. 위의 이 두 policy는 모두, 실제로는 아직 필요하지 않은 paging space를 잡아두는 것이고, 아직 실제로 사용하지는 않는 것입니다. 즉, memory 부족으로 인해 실제 swap in/out이 일어나지 않더라도 swap space는 사용량이 몇% 올라와 있는 것으로 보이게 됩니다. 세째가 "Deferred"인데, 이는 정말 memory가 부족하여 swap in/out이 일어날 때 비로소 paging space를 확보하는 것입니다. 따라서, AIX에서는 paging space 사용량이, memory가 부족하지 않는 이상 거의 언제나 1% 정도로 보이게 됩니다. 아시다시피 file cache로 사용되는 real memory space인 "Permanant segment"는 paging space로 swap되지 않습니다.
2. Topas의 top process 부분에 보이는 PgSp 부분(2번으로 표시하신 부분)에 대해서는 자세한 documentation이 되어 있지 않아 제가 확언을 드릴 수는 없습니다만, 다른 tool (가령 ps)로 보면, 그 부분은 그 process가 사용하는 virtual memory size라고 할 수 있습니다. 흔히 virtual memory가 paging space라고 생각하시는 분들도 가끔 있으신데, virtual memory는 글자 그대로 real memory이건 paging space이건 상관하지 않는 가상 memory로서, paging space 사용량이 없는 경우에는 real memory라고 보시는 것이 맞습니다.
3. 그림에 lsps -a를 표시하셨는데, 이것이 33%를 가리키고 있다면, 말씀하신대로 심각합니다. 특히 memory를 2배로 늘렸는데도 그렇다면 심각합니다. 먼저, Oracle data file들이 filesystem 상에 있는 것이지 raw device (LV)로 되어 있는 것인지 확인해보시기 바랍니다. 아마도 filesystem으로 되어 있을 겁니다. 만약 그렇다면, 이는 과도한 filesystem I/O로 인해서, virtual memory manager가 real memory에 대한 할당에 있어, process memmory (topas memory에서 %Comp로 표시되는 부분)보다도, file cache로 사용하는 memory (topas에서 %Noncomp로 표시되는 부분)에 더 우선권을 주기 때문일 것입니다. 설명하려면 더 복잡한데, 결론부터 말씀드리면 /usr/samples/kernel/vmtune -P 20 -p 10 -h 1 을 수행하시면, file cache로 사용되는 memory를 10% ~20%로 제한하게 됩니다. 나머지 memory는 당근 process memory로 사용될 수 있습니다. 이는 Oracle을 filesystem-base로 생성하는 경우 흔히 있는 일인데, 이 경우 filesystem에서도 I/O가 크게 일어나므로, virtual memory manager가 "filesystem I/O"가 더 급한 모양이다"라고 판단하게 되기 때문입니다. 기본으로 file cache는 20~80% 사이를 유지하도록 되어 있습니다. 혹시 위의 경우가 아니라면, 글쎄요, 정식으로 support line을 이용하시는 것이 좋겠습니다.
4. AIX는 기본적으로 paging과 swapping을 동일한 개념으로 섞어 사용합니다. 따라서, 헷갈리시는 것도 무리가 아니며, 저도 사실 가끔 헷갈립니다. 기본적으로는, 모든 page라는 단어는 virtual memory의 page라고 생각하시면 되고, paging space라는 말은 100% swap space라고 생각하시면 됩니다. 도움이 되셨는지 모르겠네요.
==== 1765 김세희 ====
pgout이 되는 경우:
메모리가 넉넉해서 swap공간인 paging공간은 사용하고 있지 않을 때 메모리에 몇개의 page가 올라와 있다고 가정해봅시다. 한 page의 내용이 변경되어 dirty인데 이 page를 오랫동안 사용하지 않았다면 memory management정책에 따라 사용하지도 않는 페이지를 오래 memory에 둘 필요가 없으므로 쫓아내야 하는데 dirty이므로 disk에 write합니다. 이런 경우는 pgout입니다.
pgsout이 되는 경우:
메모리가 넉넉하지 않아서 swap공간까지 사용하고 있을때 메모리에도 몇개의 page가 올라와 있다고 가정해봅시다. 메모리에 2개의 page가 들어갈 수 있고 swap공간에 3개의 page 가 들어갈 수 있다고 가정했을 때 메모리에 1,2라는 page가 들어가 있고 swap에 3,4,5라는 페이지가 들어가 있다고 합시다. 누군가 1이라는 page를 계속 참조하고 있고 이때 누군가 3이라는 페이지를 참조하려고 하는데 2역시 바로 얼마전에 사용되던 페이지 라면 디스크공간에 2를 그냥 내려놓으면 또 가져와야할 위험성이 있습니다. 따라서 2를 swap공간에 내려놓고 3을 대신 memory로 가져와야 합니다.
이런 경우에 pgsout,pgsin이 일어나게 됩니다.
==== 1759 김세희 ====
page ins -> pgin
: disk -> memory
page outs -> pgout
: memory -> disk
paging space page ins -> pgsin
: disk(hd6) -> memory
paging space page outs -> pgsout
: memory -> disk(hd6)
page-in은 paging space in을 포함합니다.(out도 마찬가지)
pgsin/pgsout이 변동이 심하지 않은건 만약 메모리가 크다면 굳이
swap공간까지 사용할 필요가 없어서 사용하지 않으면 이 값이 변동이
적겠죠? 기본적으로 swap space는 메모리가 부족할때만 사용됩니다.
그리고 아무리 메모리가 크다고 하더라도 disk에서 데이터를 읽어오는
경우는 반드시 있기 때문에 pgin값은 발생합니다.
그리고 메모리가 아무리 크더라도 안쓰는 페이지가 있으면 그냥 날라가니까
pgout에 해당되지 않고 dirty data라면 disk에 내려갈테니까
어쨌든 swap을 쓸 일은 없고 pgout에 해당됩니다.
===== 김경진 =====
2.첨부하신 자료를 보니...
1) svmon -G와 topas 결과를 통해서 판단해 보면
- 전체 메모리 사이즈 : 2097141(pages) * 4096(bytes) = 8(GB)
- file cache로 사용중인 메모리 : 807920(pages) * 4096(bytes) = 3(GB)
==> 전체메모리 사용량의 39% 정도
- computational 메모리 : 1285405(pages) * 4096(bytes) = 5(GB)
==> 전체메모리 사용량의 61% 정도
<참고> IBM 사용자 게시판 발취