free명령에서 buffers와 cached의 의미
글쓴이: hardtack / 작성시간: 화, 2005/03/15 - 6:43오후
메모리의 영역의 의미에서 buffers와 cached의 의미를 알고 싶습니다.
차이가 모죠? 파일을 읽으면 buffer에 저장되나요? cache에 저장하나요?
기본적인 buffer와 cache에 대한 개념을 알고 싶습니다.
여기 BBS에서 정확하게 설명한 자료를 못봐서 올립니다. 또 shared의 의미도 덤으로 알려주시길.... ^^
[root@redhat root]# free -t
total used free shared buffers cached
Mem: 511024 499348 11676 0 192176 162220
-/+ buffers/cache: 144952 366072
Swap: 1052248 24524 1027724
Total: 1563272 523872 1039400
Forums:
간단하게 buffers는 임시저장장소 같은것입니다.즉, 파일에 어떤것
간단하게 buffers는 임시저장장소 같은것입니다.
즉, 파일에 어떤것을 작성하라는 명령이 내려진다면 LINUX는 즉시 파일에 데이터를
쓰지 않고 버퍼에 담아두다가 CPU가 바쁘지 않을때 쓰기를합니다.
이럴때 사용하는것이 buffers입니다.
cached는 버퍼와는 다른의미로 메모리에서 사용되었던 실행이미지를 잠시동안
보관하고 있는곳입니다. cache가 필요한 이유는 자주 사용하는 프로그램을 빠르게
실행하기 위해서입니다. 이렇게 함으로써 실행도 빨라지지만 HDD에 접근하는 횟수도
훨씬 줄어들 수가 있습니다.
shared는 말그대로 공유메모리입니다. 프로세서,thread간 통신을 위해서 사용됩니다.
http://tunelinux.pe.kr/tune/tunning-pse/pse-01.html
2.5절을 읽어보세요.
------------------------------
좋은 하루 되세요.
그럼, cached 가 안되게 할 수 있나요?
질문의 요지는 이겁니다.
예를 들어 A 라는 사람이 RAMDISK를 만들어서 사용한다고 가정하면, 특별히 cached 가 되거나 하면, 메모리의 낭비가 있지 않겠습니까? 그러니, 특별 파일시스템에 대해서는 메모리에 올려 놓지 말라고 지정할 수 있나요?
그리고, 위에서 언급하신 실행파일이라는 것이 명령파일만 cached로 가게 되나요? 아니면, 기타 데이터 파일 같은것은 어떤가요?
만약에 웹서버에서 사용하는 static 파일들을 올려놓는다면 어떨까요? 그것들도 cached로 가게 되나요?
let's partition the world !!
ssson님이 말씀하신 cache는 hardware로 존재하는 cache
ssson님이 말씀하신 cache는 hardware로 존재하는 cache memory를 의미합니다. 일반적으로 software에서 cache나 buffer는 큰 차이가 없습니다.
궂이 두 가지를 구별하겠다면, buffer는 대개 데이터를 load 또는 save하기 위해 미리 메모리 공간을 확보해 두는 곳이며, cache는 어떤 데이터의 사본(copy)을 의미합니다. 따라서 원래 데이터가 저장되어 있는 곳을 직접 access하지 않고 이 사본을 가지고 읽고 쓸 수 있습니다. 물론 이 사본이 위치하고 있는 곳은 원본이 위치하고 있는 곳보다 물리적으로 access time이 짧은 곳입니다.
Linux의 경우 파일 시스템은 virtual file system(VFS) 위에서 동작하는 일종의 driver 형태입니다. ramdisk라도 특별히 다른 것이 없습니다. 대개 unix의 file system은 inode라고 하는 파일의 정보를 가진 헤더와 실제 data block으로 이루어집니다. (확실치는 않지만), inode의 경우 inode cache는 VFS에서 담당하고,
data cache는 실제 driver 형태의 file system이 담당하는 것 같습니다. 따라서 ramdisk들의 data cache는 ramdisk file system driver에 달려있는 것이며, 당연히 data를 cache하지 않을 것입니다. 여기까지는 커널에서 처리하는 것을 설명한 것이고,
실제 application이 쓰는 C 라이브러리 stdio에 들어가게 되면 또 문제가 달라집니다. 왜냐하면 stdio library는 내부적으로 buffer를 준비하고, 쓰기 때문에, file system이 다르다고 해서 특별히 달라질 것이 없습니다.
특정 파일 시스템에서 cache하지 말라고 하는 것은, 특정 파일 시스템을 mount할 때 mount option 형태로 주어질 것입니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
참고로 저는 커널 개발자가 아니기 때문에, 잠깐 linux source를
참고로 저는 커널 개발자가 아니기 때문에, 잠깐 linux source를 훑어보고 말씀드린 겁니다. 커널 프로그래밍 게시판에 묻는 것이 더 정확한 답변을 얻을 수 있을 것 같군요.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
잠깐 훑어보셨는데 이 정도시라니
님 좀 능력자이신듯. 대략 존경합니닷.
buffers 가 load,save 를
buffers 가 load,save 를 위한 확보 공간이라면,
잦은 load,save 가 일어난다거나 fp 를 물고 있는게 있다거나 해야 할 것 같은데...
방금 그냥 부팅했더니
위와 같이 2GB 나 buffers 가 잡아먹고 있습니다.
ps 나 gnome-system-monitor 로는 buffers 를 잡아먹는 것이 무엇인지 알 수가 없네요.
그 동안 이랬던 적이 없으니 (항상 0 이었습니다.)
재부팅 하면 증상이 없어질 것 같긴 합니다만,
잡아먹는 프로세스가 무엇인지 범인 색출을 할 수 있는 방법이 있다면 알려주세요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
근데 궁금한게
근데 궁금한게 있는데, 이 상황이 왜 문제가 되는건가요?
이 상황에서, 메모리를 1Gbyte 사용하는 프로그램을 실행시키면 buffers나 cached가
줄어들 뿐이지, swap되는건 아니잖아요?
사실상
이게 의미 있는데요.. 사용중인 메모리는 772660, 남아있는 메모리는 3247744..
혹시, 부팅을 끝내자마자 buffers/cached에 2Gbyte가 넘게 쌓여 있으니까, 뭔가 부팅 과정중에
실행되는 프로세스가 I/O를 엄청 한다. 따라서 이걸 찾아내고 싶다....
이런 말씀이신가요?
http://wiki.kldp.org/wiki.php/superwisdom
제가 노트북 쓰면서
제가 노트북 쓰면서 이런걸 처음 봤거든요.
buffers 는 웬만하면 오래도록 잡고있지 않고 비워지더라고요.
재부팅 한 지금은 40116 밖에 안되고요.
작업에서 달라진건 아무것도 없는데, 차이가 난다는 것이 문제인거죠.
HDD LED 에 불도 안들어 오고 있었는데 1972412 나 계~속 먹고 있는것의 원인을 찾아보고 싶었습니다.
감사합니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
buffers ...
buffers 를 많이 잡고 있는 경우는
부팅할 때 파일시스템 검사(fsck)를 했던 경우 말고는 못 봤습니다.
cat /var/log/fsck/checkroot 로 언제 검사했는지 한번 확인해보세요.
--------------------Signature--------------------
Light a candle before cursing the darkness.
그 경우가
그 경우가 맞나봅니다.
기록이 있네요.^^
감사합니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
댓글 달기