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

Buffer and Cached Part II

Buffer vs Cache


Chào bạn, tôi băn khoăn không biết nên chọn ý tưởng gì cho blog của tôi: chém gió, đời sống, xã hội hay công nghệ. Ý tưởng có một blog để viết thứ hay ho khá thú vị nhưng nay có rồi thì nó cũng khiến bản thân mình thêm suy nghĩ. Cuối cùng tôi chọn chủ đề chính xuyên suốt blog là chia sẻ, cái gì hay mà tôi học được, đọc được, đúc kết được tôi thấy hay thì tôi sẽ chia sẻ lên đây.

Bài đăng hôm nay sẽ là về một vấn đề kỹ thuật sự khác biệt giữa buffer và cache. Nếu các bạn nghĩ hai thuật ngữ này đều là bộ nhớ giúp tăng hiệu suất làm việc cho cả hệ thống thì bạn đúng rồi. Chỉ có điều vai trò của hai bộ nhớ này có khác nhau chút thôi. Buffer là một bộ đệm được kernel dành riêng ra trên bộ nhớ RAM để lưu trữ dữ liệu trước khi di chuyển đến nơi khác. Buffer giống như khu vực bạn ngồi đợi trước khi lên máy bay đấy. Trong hệ thống thì đây là trạm trung gian giữa process đến một process, hay một process đến một block device ( Nhấn mạnh là chỉ có block device nhé. Có hai loại device: character và block, character device thì không sử dụng buffer đâu ). Đặc điểm đáng lưu ý của buffer là nó sẽ chỉ đẩy dữ liệu (flush) đi khi buffer đầy. Lấy đặc điểm này làm cơ sở phân tích thì chúng ta có thể thấy các lợi ích của buffer:

- Hạn chế việc truy cập trưc tiếp vào device. Số lần truy cập sẽ tính bằng số lần đẩy dữ liệu từ buffer đến device, rõ là nó ít hơn so với khi không dùng buffer. Hạn chế số lần truy cập trực tiếp nghĩa là tăng thời gian đọc ghi vì đọc ghi trực tiếp trên device luôn chậm hơn, cỡ cả ngàn lần so với đọc ghi từ RAM. Vây là ta có công thức Thời gian đọc ghi dữ liệu = Thời gian đọc ghi buffer trên RAM + Thời gian đọc ghi device. Hiệu suất tăng cao bởi vì phần thời gian đọc ghi buffer trên RAM rất ngắn còn thời gian đọc ghi lên I/O device tuy lâu nhưng được hạn chế lại số lần

- Ngoài ra, sử dụng buffer còn hạn chế việc dữ liệu đến quá nhanh khiến device không xử lý kịp cũng như khi dữ liệu đến quá chậm. Đến quá nhanh hay quá chậm đều là vấn đề. Đến chậm quá thì không tận dụng khả năng của thiết bị. Thiết bị xử lý được 5MB mà mỗi lần do độ chậm trễ nó chỉ có 1MB để xử lý. Còn đến quá nhanh thì thiết bị bị quá tải. Cả hai trường hợp này đều được giải quyết bằng buffer.

Tóm lại, buffer là phương án dùng khi có sự chênh lệch giữa tốc độ dữ liệu đến và tốc độ xử lý dữ liệu.

Còn cache thì sao. Cache là bộ nhớ dùng để chứa các dữ liệu thường dùng. Ý tưởng ở đây là thay vì truy cập dữ liệu từ nguồn thì bạn chỉ cần truy cập dữ liệu nhân bản của nó nằm ở đâu đó gần bạn hơn hoặc đó là những dữ liệu đã qua xử lý, sẵn sàng được xài ngay lập tức. Đặc trưng của cache là dữ liệu lưu ở dạng key-value giống như hashtable vậy. Vì dữ liệu nguồn có thể thay đổi nên dữ liệu nhân bản của nó là cache không thể lúc nào cũng chính xác vi thế dữ liệu cache cần có thời hạn sử dụng nhất định. Tùy vào hệ thống mà đặt thời hạn này cho hợp lý, không thể đoán mò mà đặt bừa bãi được. Tóm lại cache là phương án làm giảm sự truy cập trực tiếp đến nguồn dữ liệu.

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

Đăng nhận xét