Thứ Sáu, 17 tháng 3, 2017

Buffer and Cache Part III

 Phân biệt Cache Và Buffer?

Cache: 
- Cache là tên gọi của bộ nhớ đệm, dạng bộ nhớ trung gian như RAM - trung gian giữa nơi xử lí (CPU) và nơi chứa dữ liệu (HDD), nơi lưu trữ các dữ liệu nằm chờ các ứng dụng hay phần cứng xử lý. Mục đích của nó là để tăng tốc độ xử lý (có sẵn xài liền không cần tốn thời gian đi lùng sục tìm kéo về).
- Cache là một cơ chế lưu trữ tốc độ cao đặc biệt. Bộ nhớ Cache là bộ nhớ nằm bên trong của CPU, nó có tốc độ truy cập dữ liệu theo kịp tốc độ xủa lý của CPU, điều này khiến cho CPU trong lúc xử lý không phải chờ dữ liệu từ RAM vì dữ liệu từ RAM phải đi qua Bus của hệ thống nên mất nhiều thời gian. Nó có thể là một vùng lưu trữ của bộ nhớ chính hay một thiết bị lưu trữ tốc độ cao độc lập. Có hai dạng lưu trữ Cache được dùng phổ biến trong máy tính cá nhân là memory caching (bộ nhớ cache hay bộ nhớ truy xuất nhanh) và disk caching (bộ nhớ đệm đĩa).
Ví dụ: Hàng đã có trong kho thì không cần phải mất thêm thời gian ra tiệm mua mới mà chỉ cần vào kho lấy ra thôi.

Buffer: 
- Buffer là bộ đệm, bộ nhớ trung gian, một đơn vị của bộ nhớ được giao nhiệm vụ tạm thời lưu giữ các thông tin.
Bộ đệm (Buffer) hay bộ nhớ đệm là vùng nhớ tạm trong khi chờ đến lượt vì CPU và các thiết bị khác không làm việc cùng tốc độ, HDH thì xử lý các tiến trình có chia thời gian. Do đó cần có bộ đệm để chứa tạm thời. Bộ đệm hoạt động theo cơ chế FIFO.
Ví dụ: 
+ Khi ghi dữ liệu lên ổ cứng hoặc đọc dữ liệu từ ổ cứng cũng cần Buffer. 
+ Khi hai máy tính truyền dữ liệu cũng cần Buffer…

---------------------------------------

Buffer và cache

Đâ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.

Không có nhận xét nào:

Đăng nhận xét