7/12/2016

[DEBIAN] malloc() 시 sysctl vm.swappiness를 이용하여 Swap 적극 활용하기


리눅스에서 여러가지 테스트를 하다보면 memory를 full 시켜야할 상황이 오기도 합니다.
사실 제가 이런 테스트가 필요하기보단 필요한 분 도와드리다보니 아무래도 정리해놓는게 좋을 것 같아 가볍게 작성합니다.

오늘은 memory full test에서 swap 부분에 대해서 쉽게 사용하기 위해서 malloc과 vm.swappiness를 이용해서 테스트하는 방법에 대해 적어볼까 합니다.


Swap memory

Linux의 메모리 관리 기술 중 하나인 Swap 은 메모리가 부족할 때 보조기억장치를 활용해서 메모리 대용으로 사용하는 기법입니다. 음.. linux os 설치해주시면 자동으로 swap을 잡거나 직접 지정하게 되는데, 그 swap이 이 swap입니다.

물론 속도는 엄청 느리지요. 그래서 대체로 안쓰는걸 권장한다지요.
(아예 빼라는건 아니고.. 그냥 여기까지 메로리를 안쓰는게 좋다 이정도.)

swap memory는 free 명령을 통해 쉽게 확인할 수 있습니다.

#> free
             total       used       free     shared    buffers     cached
Mem:       8105636    7898312     207324     210960      95684     884824
-/+ buffers/cache:    6917804    1187832
Swap:      8317948     125396    8192552

vm.swappiness

리눅스 커널 속성 중 하나로 스왑 메모리의 활용수준 및 사용 적극성에 관련하는 값입니다.
vm.swappiness 를 높게 줄수록 적극적으로 스왑 메모리를 사용하죠.

같은 0 ~ 100까지 줄 수 있고 Default 60으로 설정되어 있습니다. 각각 수치는 아래와 같습니다.

SwappinessValueDescription
vm.swappiness0스왑 끄기
vm.swappiness1스왑 최소화
vm.swappiness60Default
vm.swappiness100적극적 스왑 사용

#> sysctl vm.swappiness=100
#> cat /proc/sys/vm/swappiness
100

wm.swappiness 최대치로 malloc 테스트하기

메모리 풀을 만들기 위해선 간단한 코드로 테스트가 가능합니다.
(처음 해킹 관심 가지게 한 이 malloc 함수가 모든일의 시초였죠)

반복하면서 malloc를 해주면 됩니다. 직접 작성하는것도 금방이지만 stackexchange에
좋은 코드 있어서 그걸로 대체할게요.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
    int max = -1;
    int mb = 0;
    char* buffer;

    if(argc > 1)
        max = atoi(argv[1]);

    while((buffer=malloc(1024*1024)) != NULL && mb != max) {
        memset(buffer, 0, 1024*1024);
        mb++;
        printf("Allocated %d MB\n", mb);
        sleep(1);
    }     
return 0;
}
-> Steven D 작성 코드

컴파일 해주시고.
#> gcc -o swapmem_test swapmem_test.c

swappiness 를 최대치로 설정 후 돌려주시면..

#> sysctl vm.swappiness=100;./swapmemtest

메모리를 할당하며 swap을 최대한 쓰려고 하겠네요.

#> ./swapmeme_test
Allocated 1 MB
Allocated 2 MB
Allocated 3 MB
Allocated 4 MB
Allocated 5 MB
Allocated 6 MB

Reference

http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_swappiness



HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment