Các trường buff buff / bộ nhớ cache và bộ nhớ cache trong các mục mem có nghĩa là gì?


28

Trong đầu ra của đầu trang, có hai trường, được đánh dấu là "buff / cache" và "avail Mem" trong bộ nhớ và các dòng sử dụng trao đổi:

nhập mô tả hình ảnh ở đây

Hai lĩnh vực này có ý nghĩa gì?

Tôi đã thử Googling chúng, nhưng kết quả chỉ đưa ra các bài viết chung chung trên đầu và chúng không giải thích những gì các trường này biểu thị.

Câu trả lời:


31

topTrang của man không mô tả các trường, nhưng free's :

bộ đệm

Bộ nhớ được sử dụng bởi bộ đệm kernel ( Buffersin /proc/meminfo)

bộ nhớ cache

Bộ nhớ được sử dụng bởi bộ đệm trang và bảng ( CachedSReclaimabletrong /proc/meminfo)

đệm / bộ đệm

Tổng bộ đệm và bộ đệm

có sẵn

Ước tính dung lượng bộ nhớ khả dụng để bắt đầu các ứng dụng mới mà không cần trao đổi. Không giống như dữ liệu được cung cấp bởi bộ đệm hoặc các trường miễn phí, trường này tính đến bộ đệm của trang tài khoản và cũng không phải tất cả các bảng bộ nhớ có thể lấy lại được do các mục đang được sử dụng ( MemAvailabletrong /proc/meminfo, có sẵn trên các hạt nhân 3.14, được mô phỏng trên các hạt nhân 2.6.27+ , nếu không thì giống như miễn phí)

Về cơ bản, bộ đệm buff / bộ nhớ cache Bộ nhớ đếm bộ nhớ được sử dụng cho dữ liệu trên đĩa hoặc sẽ sớm kết thúc ở đó và kết quả là có thể sử dụng được (bộ nhớ tương ứng có thể được cung cấp ngay lập tức, trong trường hợp bộ nhớ cache hoặc đủ thời gian, trong trường hợp bộ đệm - dù sao thì cái sau được cho là nhỏ lại); Có sẵn các máy đo độ cứng có thể được phân bổ và sử dụng mà không gây ra sự hoán đổi nhiều hơn (xem Làm cách nào tôi có thể nhận được số lượng bộ nhớ khả dụng trên các bản phân phối? Để biết thêm chi tiết về điều đó).


1
Bộ đệm / bộ đệm không được cung cấp đủ thời gian ; chúng là các phân đoạn bộ nhớ có sẵn ngay lập tức nếu bất kỳ chương trình nào yêu cầu một số bộ nhớ được phân bổ. Xem thêm linuxHRyram.com
DopeGhoti

4

Chỉ cần làm rõ một chút, bộ đệm đề cập đến dữ liệu đang được ghi - bộ nhớ đó không thể được lấy lại cho đến khi ghi xong.

Bộ nhớ cache đề cập đến dữ liệu đã được đọc - nó được giữ xung quanh trong trường hợp cần đọc lại, nhưng có thể được lấy lại ngay lập tức vì nó luôn có thể được đọc lại từ đĩa.


Đó không thực sự là những gì nó có nghĩa ở đây. /proc/meminfocó một lĩnh vực Writebackcụ thể. Có một trường riêng biệt Buffers, và đó là những gì được hiển thị như bufferstrong free -w. Một lý do phổ biến cho Buffersviệc sử dụng bộ nhớ được hiển thị ở đây: " 30% RAM là bộ đệm của bộ dữ liệu. Nó là gì? "
sourcejedi

Từ điều này ( access.redhat.com/solutions/406773 ) Tôi cho rằng WritBack là một phần của Bộ đệm chưa được ghi vào đĩa. Hay bạn đang nói cái gì khác?
WallStProg

Mô tả đó sẽ gây hiểu nhầm. Bufferslà (bây giờ) một phần của bộ đệm trang; nó không được tính vào Cached, nhưng nó được tính là một phần của Active(file) + Inactive(file). Xem bình luận về câu trả lời của Stephen Kitt. Dirtylà một phần của bộ đệm trang đã được ghi vào, và do đó cuối cùng cần ghi lại vào đĩa. Writebackkhông bao gồmDirty . Do đó, Writebackkhông phải là một phần của giá trị Buffers.
nguồn

Điều Buffersthực sự có nghĩa là bộ đệm trang được liên kết với thiết bị khối. Một số hệ thống tập tin sử dụng nội bộ này; những người khác không sử dụng nó cả. / đi đến sửa lỗi câu trả lời của tôi cho câu hỏi "30% RAM của tôi là bộ đệm".
nguồn

2

Nguồn chính của thông tin này là /usr/src/linux/Documentation/filesystems/proc.txt

Bộ đệm : Bộ nhớ tương đối tạm thời cho các khối đĩa thô không nên có dung lượng cực lớn (20MB hoặc hơn) Bộ nhớ cache : bộ nhớ cache trong bộ nhớ cho các tệp được đọc từ đĩa (bộ đệm trang). Không bao gồm SwapCached.

Bạn cũng có thể tìm thấy một số chi tiết ở đây .

Bộ đệm ẩn trang Linux ("Bộ nhớ cache :" từ meminfo) là bộ nhớ RAM lớn nhất trên hầu hết các hệ thống. Bất cứ khi nào bạn thực hiện đọc () từ một tệp trên đĩa, dữ liệu đó sẽ được đọc vào bộ nhớ và đi vào bộ đệm của trang (1.).
Bộ đệm bộ đệm (" Bộ đệm :" trong meminfo) có liên quan chặt chẽ với bộ đệm của bộ đệm / inode.

Hoặc phân tích mã nguồn như thế này .

Số lượng bufferslà giá trị trả về của hàmnr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

Số lượng cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.