Viết lại và ghi vào bộ nhớ đệm?


93

Tôi hiểu rằng sự khác biệt chính giữa hai phương pháp là trong phương thức "ghi qua" dữ liệu được ghi vào bộ nhớ chính thông qua bộ nhớ cache ngay lập tức, trong khi trong "ghi ngược" dữ liệu được ghi trong "thời gian sau".

Chúng ta vẫn cần phải đợi bộ nhớ trong "thời gian sau" vậy lợi ích của "ghi qua" là gì?


@EricWang Tôi nghĩ ý bạn là write backcó hiệu suất tốt hơn?
wlnirvana

@wlnirvana Vâng, bạn nói đúng, đó là lỗi thư ký của tôi. Tôi sẽ xóa nó và đưa vào một bình luận mới ở đây để tránh gây hiểu lầm trong tương lai.
Eric Wang

6
Nói một cách đơn giản, write backcó hiệu suất tốt hơn, bởi vì ghi vào bộ nhớ chính chậm hơn nhiều so với ghi vào bộ nhớ cache cpu và dữ liệu có thể ngắn trong thời gian (phương tiện có thể thay đổi lại sớm hơn và không cần phải đưa phiên bản cũ vào bộ nhớ). Nó phức tạp, nhưng phức tạp hơn, hầu hết bộ nhớ trong cpu hiện đại sử dụng chính sách này.
Eric Wang

Tôi thấy rằng một câu trả lời giải thích đã được đưa ra. Tôi khuyên bạn nên xem xét các thẻ Write-Allocate, Write-NoAllocate sau khi bao gồm thuật toán ghi lại.
Çağlayan DÖKME

Câu trả lời cho câu hỏi của bạn là với bộ nhớ đệm ghi qua, khi ghi trong cùng một khối, chỉ cần một lần ghi vào bộ nhớ chính. Xem câu trả lời của tôi để biết chi tiết.
qwr

Câu trả lời:


111

Lợi ích của việc ghi qua bộ nhớ chính là nó đơn giản hóa thiết kế của hệ thống máy tính. Với tính năng ghi qua, bộ nhớ chính luôn có bản sao cập nhật của dòng. Vì vậy, khi quá trình đọc được thực hiện, bộ nhớ chính luôn có thể trả lời với dữ liệu được yêu cầu.

Nếu sử dụng tính năng ghi ngược, đôi khi dữ liệu cập nhật nằm trong bộ nhớ đệm của bộ xử lý và đôi khi nằm trong bộ nhớ chính. Nếu dữ liệu nằm trong bộ nhớ đệm của bộ xử lý, thì bộ xử lý đó phải ngăn bộ nhớ chính trả lời yêu cầu đọc, vì bộ nhớ chính có thể có bản sao cũ của dữ liệu. Điều này phức tạp hơn ghi qua.

Ngoài ra, ghi qua có thể đơn giản hóa giao thức đồng tiền trong bộ nhớ cache vì nó không cần trạng thái Sửa đổi . Các Sửa hồ sơ nhà nước rằng bộ nhớ cache phải viết lại dòng bộ nhớ cache trước khi nó làm mất hiệu lực hoặc evicts dòng. Trong quá trình ghi qua một dòng trong bộ nhớ cache luôn có thể bị vô hiệu mà không cần ghi lại vì bộ nhớ đã có bản sao cập nhật của dòng.

Một điều nữa - trên một phần mềm kiến ​​trúc ghi lại ghi vào các thanh ghi I / O được ánh xạ bộ nhớ phải thực hiện thêm các bước để đảm bảo rằng các ghi được gửi ngay lập tức ra khỏi bộ nhớ cache. Nếu không, việc ghi sẽ không hiển thị bên ngoài lõi cho đến khi dòng được đọc bởi bộ xử lý khác hoặc dòng bị loại bỏ.


7
Đối với I / O được ánh xạ bộ nhớ, những địa chỉ đó thường được ánh xạ dưới dạng chưa được lưu vào bộ nhớ cache. Ghi qua cũng có thể được sử dụng để tăng độ tin cậy (ví dụ: nếu L1 chỉ có bảo vệ chẵn lẻ và L2 có ECC). Ghi qua cũng phổ biến hơn đối với các bộ nhớ đệm nhỏ hơn sử dụng không-ghi-phân bổ (nghĩa là, một lỗi ghi không phân bổ khối cho bộ nhớ cache, có khả năng làm giảm nhu cầu về dung lượng L1 và băng thông lấp đầy L2 / L1) vì phần lớn phần cứng yêu cầu viết qua đã có sẵn cho việc viết như vậy.
Paul A. Clayton

1
Có thể kiểm tra xem phương pháp bộ nhớ cache trong lõi của tôi là ghi ngược hay ghi qua?
Trí tuệ nhân tạo vào

4
Có thể gây hiểu lầm khi nói rằng ghi lại phức tạp hơn vì bộ xử lý phải ngăn bộ nhớ chính trả lời yêu cầu đọc. Ngoài ra, bộ nhớ đệm còn theo dõi dữ liệu nào là dữ liệu (không liên kết với bộ nhớ chính) và dữ liệu nào không bằng cách sử dụng "(các) bit bẩn", do đó có thể hoàn toàn không kiểm tra bộ nhớ chính.
steviejay

@Shaowu "lshw" lệnh hiển thị các khả năng của bộ nhớ cache như "ghi ngược nội bộ không đồng bộ"
mug896 10/02/17

Tôi vẫn không hiểu các bước thực sự được sử dụng trong ghi lại là gì, nhưng chỉ biết rằng nó phức tạp ... Bạn có thể cung cấp thêm tài nguyên / chi tiết về nó?
Combinatorics Guy

10

Hãy xem xét điều này với sự trợ giúp của một ví dụ. Giả sử chúng ta có một bộ đệm ẩn được ánh xạ trực tiếp và chính sách ghi lại được sử dụng. Vì vậy, chúng tôi có một bit hợp lệ, một bit bẩn, một thẻ và một trường dữ liệu trong một dòng bộ nhớ cache. Giả sử chúng ta có một phép toán: write A (trong đó A được ánh xạ tới dòng đầu tiên của cache).

Điều gì xảy ra là dữ liệu (A) từ bộ xử lý được ghi vào dòng đầu tiên của bộ đệm. Bit hợp lệ và các bit thẻ được đặt. Bit bẩn được đặt thành 1.

Dirty bit chỉ đơn giản là dòng bộ nhớ cache đã từng được ghi kể từ lần cuối cùng nó được đưa vào bộ nhớ cache!

Bây giờ, giả sử một hoạt động khác được thực hiện: đọc E (trong đó E cũng được ánh xạ tới dòng bộ nhớ cache đầu tiên)

Vì chúng ta có bộ nhớ cache được ánh xạ trực tiếp, dòng đầu tiên có thể đơn giản được thay thế bằng khối E sẽ được đưa từ bộ nhớ. Nhưng vì khối được ghi cuối cùng vào dòng (khối A) vẫn chưa được ghi vào bộ nhớ (được chỉ ra bởi bit bẩn), do đó, bộ điều khiển bộ nhớ đệm sẽ đưa ra lệnh ghi ngược vào bộ nhớ để chuyển khối A vào bộ nhớ, sau đó nó sẽ thay thế dòng bằng khối E bằng cách đưa ra hoạt động đọc vào bộ nhớ. bit dơ bẩn hiện được đặt thành 0.

Vì vậy, chính sách ghi lại không đảm bảo rằng khối sẽ giống nhau trong bộ nhớ và dòng bộ đệm liên quan của nó. Tuy nhiên, bất cứ khi nào dòng sắp được thay thế, việc ghi lại được thực hiện trước tiên.

Chính sách ghi thông qua thì ngược lại. Theo đó, bộ nhớ sẽ luôn có dữ liệu cập nhật. Có nghĩa là, nếu khối bộ đệm được ghi, bộ nhớ cũng sẽ được ghi theo. (không sử dụng các bit bẩn)


7

có lẽ bài viết này có thể giúp bạn liên kết ở đây

Ghi qua: Ghi được thực hiện đồng bộ cả vào bộ nhớ cache và vào kho sao lưu.

Ghi lại (hoặc Ghi lại): Việc ghi chỉ được thực hiện vào bộ nhớ đệm. Một khối bộ nhớ cache đã sửa đổi được ghi lại vào cửa hàng, ngay trước khi nó được thay thế.

Ghi qua: Khi dữ liệu được cập nhật, dữ liệu được ghi vào cả bộ nhớ cache và bộ nhớ phụ. Chế độ này dễ vận hành nhưng ghi dữ liệu chậm vì dữ liệu phải được ghi vào bộ nhớ đệm và bộ lưu trữ.

Ghi lại: Khi dữ liệu được cập nhật, nó chỉ được ghi vào bộ đệm. Dữ liệu đã sửa đổi chỉ được ghi vào bộ nhớ phụ khi dữ liệu được xóa khỏi bộ đệm. Chế độ này có tốc độ ghi dữ liệu nhanh nhưng dữ liệu sẽ bị mất nếu xảy ra mất điện trước khi dữ liệu cập nhật được ghi vào bộ lưu trữ.


3

Write-back và write-through mô tả các chính sách khi ghi xảy ra lần truy cập , đó là khi bộ nhớ đệm có thông tin được yêu cầu. Trong các ví dụ này, chúng tôi giả sử một bộ xử lý đang ghi vào bộ nhớ chính bằng bộ nhớ đệm.

Ghi qua: Thông tin được ghi vào bộ đệm và bộ nhớ, và quá trình ghi kết thúc khi cả hai kết thúc. Điều này có lợi thế là dễ triển khai hơn và bộ nhớ chính luôn nhất quán (đồng bộ) với bộ nhớ đệm (đối với trường hợp bộ xử lý đơn - nếu một số thiết bị khác sửa đổi bộ nhớ chính, thì chính sách này là không đủ) và lỗi đọc không bao giờ dẫn đến ghi vào bộ nhớ chính. Điểm bất lợi rõ ràng là mỗi lần ghi phải thực hiện hai lần ghi, một trong số đó truy cập bộ nhớ chính chậm hơn.

Ghi lại: Thông tin được ghi vào một khối trong bộ nhớ cache. Khối bộ nhớ cache đã sửa đổi chỉ được ghi vào bộ nhớ khi nó được thay thế (thực tế là một lệnh lười ghi ). Một bit đặc biệt cho mỗi khối cache, bit bẩn , đánh dấu xem khối cache đã được sửa đổi hay chưa khi ở trong bộ nhớ cache. Nếu bit dơ bẩn không được đặt, khối bộ nhớ cache là "sạch" và một lỗi ghi không phải ghi khối vào bộ nhớ.

Ưu điểm là việc ghi có thể xảy ra với tốc độ của bộ đệm, và nếu ghi trong cùng một khối thì chỉ cần một lần ghi vào bộ nhớ chính (khi khối trước đó đang được thay thế). Nhược điểm là giao thức này khó thực hiện hơn, bộ nhớ chính có thể không nhất quán (không đồng bộ) với bộ đệm và việc đọc dẫn đến thay thế có thể gây ra việc ghi các khối bẩn vào bộ nhớ chính.

Các chính sách cho một lần bỏ lỡ viết được nêu chi tiết trong liên kết đầu tiên của tôi.

Các giao thức này không xử lý các trường hợp có nhiều bộ xử lý và nhiều bộ nhớ đệm, như thường thấy trong các bộ xử lý hiện đại. Đối với điều này, cần phải có các cơ chế kết hợp bộ nhớ cache phức tạp hơn . Bộ nhớ đệm ghi qua có các giao thức đơn giản hơn vì quá trình ghi vào bộ đệm được phản ánh ngay lập tức trong bộ nhớ.

Tài nguyên tốt:


0

Write-Back là một công cụ phức tạp hơn và đòi hỏi một giao thức liên kết bộ nhớ cache (MOESI) phức tạp nhưng nó rất đáng giá vì nó làm cho hệ thống nhanh và hiệu quả.

Lợi ích duy nhất của Write-Through là nó làm cho việc triển khai cực kỳ đơn giản và không cần giao thức đồng tiền bộ nhớ cache phức tạp.


1
WT vẫn cần một giao thức đồng tiền. Một cửa hàng từ một lõi vẫn cần làm mất hiệu lực các bản sao trong các bộ đệm khác để chúng không tiếp tục đọc dữ liệu cũ vô thời hạn. Nguyên tử RMW cần một số hỗ trợ đặc biệt. Tất cả điều này dễ dàng hơn với WT, tôi nghĩ, nhưng đồng tiền cần thiết vẫn hơi phức tạp.
Peter Cordes

Hoặc có thể bạn đang nói về một hệ thống lõi đơn với hệ thống phân cấp bộ nhớ cache là L1 / L2 (và có thể nhiều hơn nữa). Trong trường hợp đó, bạn không thực sự phải sử dụng MESI / MOESI cho các bộ nhớ đệm bên trong tìm nạp thông qua bộ nhớ đệm bên ngoài, trừ khi bạn muốn hỗ trợ DMA kết hợp bộ nhớ cache có thể truy cập hướng bộ nhớ đệm ngoài cùng. Nhưng sau đó bạn vẫn cần đồng tiền để ghi DMA để làm mất hiệu lực bộ đệm bên trong.
Peter Cordes

1
Giao thức đồng tiền đệm bộ nhớ cache chỉ cần thiết nếu cần hỗ trợ cho nhiều bộ nhớ đệm / bộ xử lý hoặc một cái gì đó ảnh hưởng đến bộ nhớ như DMA. Tính năng ghi qua có lợi thế của nó ngay cả đối với các hệ thống xử lý đơn lẻ, đó là tốc độ ghi.
qwr

Đối với DMA, hệ điều hành có thể xóa rõ ràng bộ nhớ đệm sau I / O. Là phần mềm, nó kém hiệu quả hơn.
qwr
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.