물리 메모리가 2기가인 시스템이 예쁘게 놓여 있다. 여기에 물리 메모리보다 큰 메모리 파일 시스템을 적용해보고 거기에 물리 메모리보다 큰 파일을 할당할 수 있는지, 할당한다면 Resident 상태로 잡히는지 Swap으로 잡히는지 테스트 해보자.
컴퓨터 멈추는 줄 알았다. 참고로 이거 하는 동안 vmstat 1을 했는데 swap-out이 엄청나게 일어났다.
$ cat /proc/sys/vm/swappiness
0
$ uname -s -r
Linux 2.6.9-42.ELsmp
$ free -m
total used free shared buffers cached
Mem: 2026 35 1990 0 0 6
-/+ buffers/cache: 28 1997
Swap: 4102 0 4102
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 63G 1.4G 59G 3% /
/dev/sda1 289M 16M 259M 6% /boot
none 1.0G 0 1.0G 0% /dev/shm
이런 시스템이 있단 말이지.$ mount -oremount,size=3G /dev/shm
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 63G 1.4G 59G 3% /
/dev/sda1 289M 16M 259M 6% /boot
none 3.0G 0 3.0G 0% /dev/shm
일단 물리 메모리보다 큰 파일 시스템을 마운트 했다. 이제 아래와 같은 우왁시런 소스로 2.5기가 파일을 생성해보자.#define _LARGEFILE_SOURCE 1
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int
main(int argc,char* argv[])
{
if (argc<2)
{
printf("falloc [size mb]\n");
exit(1);
}
off_t size(atoi(argv[1]));
size *= 1024*1024;
int fd (open("/dev/shm/falloc.dat", O_TRUNC|O_CREAT|O_RDWR, 0700));
char buf[1024*1024];
for ( size_t i = 0; i < atoi(argv[1]); i++ )
{
write(fd, buf, sizeof(buf));
}
close(fd);
return 0;
}
컴파일하고 실행해보자!$ make falloc
g++ falloc.cpp -o falloc
$ ./falloc 2560
# 영겁이 걸린다.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 63G 1.4G 59G 3% /
/dev/sda1 289M 16M 259M 6% /boot
none 3.0G 2.6G 510M 84% /dev/shm
$ free -m
total used free shared buffers cached
Mem: 2026 2002 23 0 0 597
-/+ buffers/cache: 1404 621
Swap: 4102 1968 2134
컴퓨터 멈추는 줄 알았다. 참고로 이거 하는 동안 vmstat 1을 했는데 swap-out이 엄청나게 일어났다.
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 144 906456 840 1134840 0 0 0 0 4018 4 0 25 75 0
1 0 144 391640 840 1648600 0 0 0 0 4020 14 0 25 75 0
3 1 657396 14096 148 1368900 0 37724 0 37724 8062 180 0 24 55 21
3 0 1421560 14120 156 630984 0 0 0 36 4198 12 0 50 36 14
0 4 1699308 14016 156 407260 0 209064 0 209092 4640 194 0 25 49 26
0 2 1726188 14016 156 407700 0 248016 0 248016 5165 134 0 6 50 44
1 1 1726188 14080 156 448044 0 291288 0 291288 4494 125 0 8 50 42
0 3 1726188 15488 156 480168 0 256580 0 256580 4297 100 0 6 50 44
0 2 1726188 14400 156 499136 0 106820 0 106820 4442 69 0 3 50 48
0 3 1726188 14016 156 504624 0 5012 0 5012 4522 49 0 0 50 50
0 2 1726188 16640 156 504652 0 3900 0 3900 4507 53 0 0 50 50
0 2 1726188 14336 156 518596 0 17452 0 17452 4373 45 0 1 50 49
좀 성급하긴 하지만 위 결과를 토대로 "공유 메모리도 swap 정책에 따른다"는 것을 알 수 있다.
댓글
댓글 쓰기