Buffer và cache
buffer
1
Cache
6
White

manhdung viết ngày 11/03/2016

Đây là hai khái niệm không mới nhưng lại rất dễ gây nhầm lẫn.

Khi thực hiện free -m, hẳn bạn đã từng thấy các tham số buffer và cache này.

             total       used       free     shared    buffers     cached
Mem:         31790      31600        190          0        143      23248
-/+ buffers/cache:       8207      23582
Swap:        15967          0      15967

Trên server này, tôi có buffers là 143M còn cached là 23248M (khoảng 23G rất lớn)

Buffer

Là một vùng nhớ physical memory được dùng để làm vùng chứa data tạm thời trước khi chuyển đến một nơi khác. Ví dụ khi bạn cần đọc/ghi data từ/ra một thiết bị ngoại vi như disk, network, màn hình hoặc keyboard... Đây là vùng physical memory được cấp sẵn. Nhờ vậy, hệ thống sẽ không cần tốn công điều tác để cấp phát vùng nhớ mỗi khi sử dụng.

Buffer sẽ giải quyết được vấn đề đồng bộ thời gian giữa hai đầu gửi và nhận. Ví dụ process cần ghi data xuống disk. Process sẽ gọi một system call nhưng do tốc độ xử lý của disk khá chậm so với memory nên hàm system call sẽ phải chờ. Thời gian chờ này rất lãng phí vì khi đó process không thể làm gì được cho đến khi system call return. Buffer sẽ khắc phục sự lãng phí này. Data thay vì đẩy ngay xuống disk thì đẩy trước vào buffer, system call sẽ trả kết quả về ngay lập tức. Data sau đó sẽ dần được đẩy từ buffer xuống disk.

Một lợi thế nữa khi dùng buffer là cho phép tái điều chỉnh kích cỡ các block data. Nếu process ghi block data có kích cỡ nhỏ hơn block size trên disk thì khi qua buffer, data sẽ được gom lại để khớp với block size của disk rồi mới flush xuống disk.

Buffer xuất hiện ở cả hai đầu đọc/ghi và thường được implement ở dạng queue, một đầu đọc, một đầu ghi.

Buffer cũng có thể làm trung gian để truyền data giữa hai process.

Cache

Thường là một lớp lưu trữ memory để giữ lại các data thường được sử dụng nhằm giảm việc truy cập đến các storage có tốc độ chậm hơn. Một data vừa được ghi thì sẽ sớm được đọc. Nguyên tắc này dẫn đến các data vừa ghi sẽ được đưa vào cache ngay để phục vụ cho thao tác đọc sau này.

Mở rộng ra, cache còn có thể là các static file được sử dụng thường xuyên, nằm trên proxy nhằm giảm việc truy cập đến các backend hoặc cũng có thể là một container chứa các object, nằm trên tầng web nhằm giảm truy cập đến db.

Bài gốc:
https://coffeecode101.blogspot.com/2016/02/buffer-va-cache.html

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

manhdung

44 bài viết.
263 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
76 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết 3 năm trước
76 11
White
48 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết gần 2 năm trước
48 4
White
41 12
Trong phần 1, tôi đã giới thiệu về sơ lược rabbitmq, vai trò của rabbitmq trong hệ thống phân tán và hướng dẫn cài đặt. Trong phần này, tôi sẽ trìn...
manhdung viết 3 năm trước
41 12
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
263 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!