Sự khác biệt giữa bộ đệm so với bộ nhớ cache trong Linux là gì?


179

Đối với tôi không rõ sự khác biệt giữa hai khái niệm bộ nhớ Linux: buffercache. Tôi đã đọc qua bài đăng này và dường như với tôi rằng sự khác biệt giữa chúng là chính sách hết hạn:

  1. chính sách của bộ đệm là vào trước, ra trước
  2. Chính sách của bộ đệm là ít được sử dụng gần đây.

Tôi có đúng không

Cụ thể, tôi đang xem xét hai lệnh: freevmstat

james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
5  0      0    173     67    912    0    0    19    59   75 1087 24  4 71  1
james@utopia:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2007       1834        172          0         67        914
-/+ buffers/cache:        853       1153
Swap:         2859          0       2859

YOu nên cung cấp cho chúng tôi nhiều ngữ cảnh hơn, cả hai thuật ngữ được sử dụng với các ý nghĩa khác nhau. Bạn đang tham khảo freeđầu ra lệnh?
leonbloy

3
bạn nói đúng, tôi đang xem hai lệnh: free, vmstat. xem cập nhật của tôi
James.Xu

1
Bạn cũng có thể truy cập unix.stackexchange.com
leonbloy

Câu trả lời:


69

"Bộ đệm" biểu thị bao nhiêu phần RAM được dành riêng cho các khối đĩa đệm. "Bộ nhớ cache" tương tự như "Bộ đệm", chỉ có điều lần này nó lưu các trang khỏi việc đọc tệp.

trích dẫn từ:


3
Tôi đã thử nghiệm điều này bằng cách sử dụng một chương trình python đơn giản để viết số lượng lớn các khối. Điều gì xảy ra là cacheđược điền vào như báo cáo free -w -h, không phải bufferscột. Tôi nghĩ rằng cachecột đếm cả đĩa ghi và đĩa đọc và buffersđược sử dụng cho mục đích khác.
CMCDragonkai

@CMCDragonkai cảm ơn các bằng chứng thực nghiệm. Câu hỏi thú vị là liệu bạn có viết nhanh hơn đĩa có thể tuôn ra không. (ví dụ: đồng bộ hóa sẽ mất nhiều thời gian) sẽ cho chúng tôi biết nếu các khối bẩn được tính khác với các khối sạch. Linux chắc chắn sẽ lưu trữ cả hai loại (lru như đã đề cập trong câu hỏi) nhưng một loại nghiêm trọng hơn nhiều về áp lực bộ nhớ.
Seth Robertson

179

Bộ đệm được liên kết với một thiết bị khối cụ thể và bao gồm bộ nhớ đệm của siêu dữ liệu hệ thống tệp cũng như theo dõi các trang trong chuyến bay. Bộ đệm chỉ chứa dữ liệu tệp chưa sử dụng. Đó là, bộ đệm ghi nhớ những gì trong thư mục, quyền của tập tin là gì và theo dõi bộ nhớ nào được ghi từ hoặc đọc cho một thiết bị khối cụ thể. Bộ đệm chỉ chứa nội dung của các tệp.

trích dẫn liên kết


1
Ngắn gọn và giải thích tốt. Cảm ơn.
tò mò

84

Trích dẫn câu trả lời (để tham khảo):

Câu trả lời ngắn: Bộ nhớ cache là kích thước của bộ đệm trang. Bộ đệm là kích thước của bộ đệm I / O trong bộ nhớ. Các vấn đề được lưu trữ; Bộ đệm phần lớn không liên quan.

Câu trả lời dài: Bộ nhớ cache là kích thước của bộ đệm trang Linux, trừ bộ nhớ trong bộ đệm trao đổi, được biểu thị bằng SwapCached (do đó tổng kích thước bộ đệm của trang là Bộ đệm + SwapCached). Linux thực hiện tất cả các tệp I / O thông qua bộ đệm trang. Viết được thực hiện đơn giản là đánh dấu là bẩn các trang tương ứng trong bộ đệm trang; các chủ đề flizer sau đó định kỳ ghi lại vào đĩa bất kỳ trang bẩn. Đọc được thực hiện bằng cách trả lại dữ liệu từ bộ đệm trang; nếu dữ liệu chưa có trong bộ đệm, nó sẽ được điền lần đầu tiên. Trên một hệ thống Linux hiện đại, Bộ nhớ đệm có thể dễ dàng vài gigabyte. Nó sẽ co lại chỉ để đáp ứng với áp lực bộ nhớ. Hệ thống sẽ lọc bộ đệm trang cùng với việc hoán đổi dữ liệu ra đĩa để cung cấp thêm bộ nhớ khi cần.

Bộ đệm là bộ đệm I / O trong bộ nhớ. Họ là tương đối ngắn. Trước phiên bản Linux kernel 2.4, Linux có bộ đệm trang và bộ đệm riêng. Kể từ 2.4, bộ đệm của trang và bộ đệm được thống nhất và Bộ đệm là các khối đĩa thô không được thể hiện trong bộ đệm của bộ đệm, tức là không phải dữ liệu tệp. Do đó, số liệu Buffers có tầm quan trọng tối thiểu. Trên hầu hết các hệ thống, Bộ đệm thường chỉ có hàng chục megabyte.


7
"Bộ đệm phần lớn không liên quan" - Không. Có nhiều trường hợp, trong đó bộ đệm ẩn nội dung tệp không liên quan, nhưng việc giữ siêu dữ liệu trong bộ đệm sẽ tăng tốc mọi thứ. Một máy chủ NAS truyền phát video chẳng hạn.
Gunther Piez

Bất kỳ hệ thống nào thực hiện nhiều I / O sẽ sử dụng nhiều bộ nhớ cho bộ đệm. Tôi đang tải số lượng lớn cơ sở dữ liệu MySQL / InnoDB 100GB và bộ đệm luôn vượt trên 2GB.
Marcelo Pacheco

21

Nó không "hoàn toàn" đơn giản như thế này, nhưng nó có thể giúp hiểu:

Bộ đệm là để lưu trữ siêu dữ liệu tệp (quyền, vị trí, v.v.). Mỗi trang bộ nhớ được theo dõi ở đây.

Cache là để lưu trữ nội dung tập tin thực tế.


5
IOW, Bộ đệm = Siêu dữ liệu; Bộ nhớ cache = Dữ liệu;
Freedom_Ben

13

Giải thích bởi RedHat :

Trang bộ nhớ cache:

Bộ đệm là một phần của bộ nhớ lưu trữ dữ liệu một cách trong suốt để các yêu cầu trong tương lai cho dữ liệu đó có thể được phục vụ nhanh hơn. Bộ nhớ này được nhân sử dụng để lưu trữ dữ liệu đĩa và cải thiện hiệu năng i / o.

Nhân Linux được xây dựng theo cách nó sẽ sử dụng nhiều RAM nhất có thể để lưu trữ thông tin từ các hệ thống tệp và đĩa cục bộ và từ xa. Khi thời gian trôi qua các lần đọc và ghi khác nhau được thực hiện trên hệ thống, kernel cố gắng lưu trữ dữ liệu trong bộ nhớ cho các quy trình khác nhau đang chạy trên hệ thống hoặc dữ liệu của các quy trình có liên quan sẽ được sử dụng trong tương lai gần. Bộ đệm không được lấy lại tại thời điểm khi tiến trình dừng / thoát, tuy nhiên khi các quá trình khác cần thêm bộ nhớ thì bộ nhớ còn trống, kernel sẽ chạy heuristic để lấy lại bộ nhớ bằng cách lưu trữ dữ liệu bộ đệm và cấp phát bộ nhớ đó cho quy trình mới.

Khi bất kỳ loại tệp / dữ liệu nào được yêu cầu thì kernel sẽ tìm một bản sao của phần mà người dùng đang thực hiện và nếu không có bản sao đó tồn tại, nó sẽ phân bổ một trang mới của bộ nhớ đệm và điền vào nó các nội dung thích hợp đọc ra từ đĩa.

Dữ liệu được lưu trữ trong bộ đệm có thể là các giá trị đã được tính toán trước đó hoặc trùng lặp với các giá trị ban đầu được lưu trữ ở nơi khác trong đĩa. Khi một số dữ liệu được yêu cầu, bộ đệm được kiểm tra trước tiên để xem liệu nó có chứa dữ liệu đó không. Dữ liệu có thể được truy xuất nhanh hơn từ bộ đệm so với nguồn gốc của nó.

Các phân đoạn bộ nhớ dùng chung SysV cũng được tính là bộ đệm, mặc dù chúng không thể hiện bất kỳ dữ liệu nào trên các đĩa. Người ta có thể kiểm tra kích thước của các phân đoạn bộ nhớ dùng chung bằng lệnh ipcs -m và kiểm tra cột byte.

Bộ đệm:

Bộ đệm là biểu diễn khối đĩa của dữ liệu được lưu trữ dưới bộ đệm trang. Bộ đệm chứa siêu dữ liệu của các tệp / dữ liệu nằm trong bộ đệm của trang. Ví dụ: Khi có yêu cầu về bất kỳ dữ liệu nào có trong bộ đệm của trang, trước tiên, kernel sẽ kiểm tra dữ liệu trong bộ đệm chứa siêu dữ liệu trỏ đến các tệp / dữ liệu thực tế có trong bộ đệm của trang. Một khi từ siêu dữ liệu, địa chỉ khối thực tế của tệp được biết đến, nó được chọn bởi kernel để xử lý.


12

bộ đệm và bộ đệm.

Một bộ đệm là một cái gì đó chưa được "ghi" vào đĩa.

Bộ nhớ cache là thứ đã được "đọc" từ đĩa và được lưu trữ để sử dụng sau.


2
mẹo người dùng mới: làm cho câu trả lời của bạn càng liên quan rõ ràng đến câu hỏi càng tốt. Nếu tôi là bạn, tôi sẽ thêm vào câu trả lời của bạn một phần bắt đầu bằng "Vì vậy, với ví dụ của bạn ..." và giải thích một chút về điều đó.
Piotr Wadas

25
Tôi không nghĩ câu trả lời này là đúng trong cùng bối cảnh với câu hỏi (cụ thể là, nhân Linux nghĩa là gì bởi "bộ đệm" và "bộ đệm"
Freedom_Ben

8

Tôi nghĩ rằng trang này sẽ giúp hiểu được sự khác biệt giữa bộ đệm và bộ đệm sâu. http://www.tldp.org/LDP/sag/html/buffer-cache.html

Đọc từ đĩa rất chậm so với truy cập bộ nhớ (thực). Ngoài ra, người ta thường đọc cùng một phần của đĩa nhiều lần trong khoảng thời gian tương đối ngắn. Ví dụ, trước tiên người ta có thể đọc thư e-mail, sau đó đọc thư vào trình chỉnh sửa khi trả lời thư, sau đó làm cho chương trình thư đọc lại khi sao chép vào thư mục. Hoặc, xem xét mức độ thường xuyên lscó thể chạy lệnh trên một hệ thống có nhiều người dùng. Bằng cách đọc thông tin từ đĩa chỉ một lần và sau đó giữ nó trong bộ nhớ cho đến khi không còn cần thiết, người ta có thể tăng tốc tất cả trừ lần đọc đầu tiên. Đây được gọi là bộ đệm đĩa và bộ nhớ được sử dụng cho mục đích này được gọi là bộ đệm bộ đệm.

Thật không may, vì bộ nhớ là tài nguyên hữu hạn, hiện tại, khan hiếm, bộ đệm bộ đệm thường không thể đủ lớn (nó không thể chứa tất cả dữ liệu mà người ta muốn sử dụng). Khi bộ nhớ cache đầy, dữ liệu không được sử dụng trong thời gian dài nhất sẽ bị loại bỏ và do đó bộ nhớ được giải phóng được sử dụng cho dữ liệu mới.

Bộ đệm đĩa cũng hoạt động để ghi. Một mặt, dữ liệu được ghi thường sớm được đọc lại (ví dụ: tệp mã nguồn được lưu vào tệp, sau đó được trình biên dịch đọc), do đó, đưa dữ liệu được ghi vào bộ đệm là một ý tưởng tốt. Mặt khác, bằng cách chỉ đưa dữ liệu vào bộ đệm, không ghi dữ liệu vào đĩa cùng một lúc, chương trình ghi sẽ chạy nhanh hơn. Việc ghi sau đó có thể được thực hiện trong nền, mà không làm chậm các chương trình khác.


Điều này giải thích bộ đệm bộ đệm là gì, nhưng không phải là sự khác biệt giữa bộ đệm và bộ đệm trong các đầu ra của lệnh vmstat và lệnh miễn phí.
Roel Schroeven

4

Liên kết 2 của Seth Robertson cho biết "Để hiểu kỹ về các thuật ngữ đó, hãy tham khảo cuốn sách nhân Linux như Phát triển nhân Linux của Robert M. Love."

Tôi tìm thấy một số nội dung về 'bộ đệm' trong phiên bản thứ 2 của cuốn sách.

Mặc dù bản thân thiết bị vật lý có thể truy cập được ở cấp độ ngành, hạt nhân thực hiện tất cả các hoạt động của đĩa về mặt khối.

Khi một khối được lưu trữ trong bộ nhớ (giả sử, sau khi đọc hoặc chờ ghi), nó sẽ được lưu trong 'bộ đệm'. Mỗi "bộ đệm" được liên kết với chính xác một khối. 'Bộ đệm' đóng vai trò là đối tượng đại diện cho một khối đĩa trong bộ nhớ.

Một "bộ đệm" là biểu diễn trong bộ nhớ của một khối đĩa vật lý.

Các thao tác Khối I / O thao tác một khối đĩa đơn tại một thời điểm. Một hoạt động I / O khối phổ biến là đọc và viết các nút. Nhân cung cấp hàm Bread () để thực hiện đọc mức độ thấp của một khối từ đĩa. Thông qua 'bộ đệm', các khối đĩa được ánh xạ tới các trang trong bộ nhớ được liên kết của chúng. "


2

Bộ đệm chứa siêu dữ liệu giúp cải thiện hiệu suất ghi

Bộ nhớ cache chứa chính nội dung tệp (đôi khi chưa ghi vào đĩa) giúp cải thiện hiệu suất đọc


1

Trích dẫn từ cuốn sách: Giới thiệu về truy xuất thông tin

Bộ nhớ cache

Chúng tôi muốn giữ càng nhiều dữ liệu càng tốt trong bộ nhớ, đặc biệt là những dữ liệu mà chúng tôi cần truy cập thường xuyên. Chúng tôi gọi kỹ thuật giữ dữ liệu đĩa được sử dụng thường xuyên trong bộ nhớ đệm chính.

Đệm

Hệ điều hành thường đọc và viết toàn bộ khối. Do đó, việc đọc một byte đơn từ đĩa có thể mất nhiều thời gian như đọc toàn bộ khối. Kích thước khối 8, 16, 32 và 64 kilobyte (KB) là phổ biến. Chúng tôi gọi một phần của bộ nhớ chính trong đó một khối được đọc hoặc ghi được lưu trữ một bộ đệm.


0

Bộ đệm là một vùng bộ nhớ được sử dụng để tạm thời giữ dữ liệu trong khi nó được di chuyển từ nơi này sang nơi khác trong máy tính. Trong khi đó, bộ đệm là vùng lưu trữ tạm thời nơi dữ liệu được truy cập thường xuyên có thể được lưu trữ để truy cập nhanh. Khi dữ liệu được lưu trữ trong bộ đệm, việc sử dụng trong tương lai có thể được thực hiện bằng cách truy cập vào bản sao được lưu trong bộ nhớ cache thay vì tìm nạp lại dữ liệu gốc, để thời gian truy cập trung bình ngắn hơn.

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.