free명령에서 buffers와 cached의 의미

hardtack의 이미지

메모리의 영역의 의미에서 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

codebank의 이미지

간단하게 buffers는 임시저장장소 같은것입니다.
즉, 파일에 어떤것을 작성하라는 명령이 내려진다면 LINUX는 즉시 파일에 데이터를
쓰지 않고 버퍼에 담아두다가 CPU가 바쁘지 않을때 쓰기를합니다.
이럴때 사용하는것이 buffers입니다.
cached는 버퍼와는 다른의미로 메모리에서 사용되었던 실행이미지를 잠시동안
보관하고 있는곳입니다. cache가 필요한 이유는 자주 사용하는 프로그램을 빠르게
실행하기 위해서입니다. 이렇게 함으로써 실행도 빨라지지만 HDD에 접근하는 횟수도
훨씬 줄어들 수가 있습니다.
shared는 말그대로 공유메모리입니다. 프로세서,thread간 통신을 위해서 사용됩니다.

http://tunelinux.pe.kr/tune/tunning-pse/pse-01.html

2.5절을 읽어보세요.

------------------------------
좋은 하루 되세요.

ssson의 이미지

질문의 요지는 이겁니다.
예를 들어 A 라는 사람이 RAMDISK를 만들어서 사용한다고 가정하면, 특별히 cached 가 되거나 하면, 메모리의 낭비가 있지 않겠습니까? 그러니, 특별 파일시스템에 대해서는 메모리에 올려 놓지 말라고 지정할 수 있나요?

그리고, 위에서 언급하신 실행파일이라는 것이 명령파일만 cached로 가게 되나요? 아니면, 기타 데이터 파일 같은것은 어떤가요?
만약에 웹서버에서 사용하는 static 파일들을 올려놓는다면 어떨까요? 그것들도 cached로 가게 되나요?

let's partition the world !!

cinsk의 이미지

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 형태로 주어질 것입니다.

cinsk의 이미지

참고로 저는 커널 개발자가 아니기 때문에, 잠깐 linux source를 훑어보고 말씀드린 겁니다. 커널 프로그래밍 게시판에 묻는 것이 더 정확한 답변을 얻을 수 있을 것 같군요.

FIFO의 이미지

님 좀 능력자이신듯. 대략 존경합니닷.

송효진의 이미지

buffers 가 load,save 를 위한 확보 공간이라면,
잦은 load,save 가 일어난다거나 fp 를 물고 있는게 있다거나 해야 할 것 같은데...
방금 그냥 부팅했더니

free -l
             total       used       free     shared    buffers     cached
Mem:       4020404    3612388     408016          0    1972412     867316
Low:       4020404    3612388     408016
High:            0          0          0
-/+ buffers/cache:     772660    3247744
Swap:      4200988        328    4200660

위와 같이 2GB 나 buffers 가 잡아먹고 있습니다.
ps 나 gnome-system-monitor 로는 buffers 를 잡아먹는 것이 무엇인지 알 수가 없네요.
그 동안 이랬던 적이 없으니 (항상 0 이었습니다.)
재부팅 하면 증상이 없어질 것 같긴 합니다만,
잡아먹는 프로세스가 무엇인지 범인 색출을 할 수 있는 방법이 있다면 알려주세요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

superwisdom의 이미지

근데 궁금한게 있는데, 이 상황이 왜 문제가 되는건가요?

             total       used       free     shared    buffers     cached
Mem:       4020404    3612388     408016          0    1972412     867316

이 상황에서, 메모리를 1Gbyte 사용하는 프로그램을 실행시키면 buffers나 cached가
줄어들 뿐이지, swap되는건 아니잖아요?

사실상

             total       used       free     shared    buffers     cached
-/+ buffers/cache:     772660    3247744

이게 의미 있는데요.. 사용중인 메모리는 772660, 남아있는 메모리는 3247744..

혹시, 부팅을 끝내자마자 buffers/cached에 2Gbyte가 넘게 쌓여 있으니까, 뭔가 부팅 과정중에
실행되는 프로세스가 I/O를 엄청 한다. 따라서 이걸 찾아내고 싶다....

이런 말씀이신가요?

송효진의 이미지

제가 노트북 쓰면서 이런걸 처음 봤거든요.
buffers 는 웬만하면 오래도록 잡고있지 않고 비워지더라고요.
재부팅 한 지금은 40116 밖에 안되고요.
작업에서 달라진건 아무것도 없는데, 차이가 난다는 것이 문제인거죠.
HDD LED 에 불도 안들어 오고 있었는데 1972412 나 계~속 먹고 있는것의 원인을 찾아보고 싶었습니다.

감사합니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

redneval의 이미지

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/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.