zram vs zswap vs zcache Hướng dẫn cuối cùng: khi nào nên sử dụng cái nào


55
  1. Chúng là cái quái gì vậy? chúng khác nhau như thế nào (tôi đã viết sự hiểu biết của mình trong câu trả lời dưới đây)
  2. Trong hệ thống Zswap, khi một trang bị đuổi khỏi zswap sang trao đổi thực tế thì nó có được lưu trữ trong một nén từ đâu không? (hoặc nó được giải nén trước khi lưu trữ?, AFAICT nó vẫn được nén nhưng tôi không thể chắc chắn)
  3. Tình trạng hiện tại của zcache là gì? nó rõ ràng đã bị xóa hoặc một cái gì đó trong 3.11. Điều đó có nghĩa là gì? ( http://git.kernel.org/cgit/linux/kernel/git/urdy/linux-urdy.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )

2
Trả lời 2. Thông báo cam kết nêu rõ các bản vá (liên quan đến zcache) đã bị xóa khỏi 3.11, nhưng sẽ được đưa vào cây -mm chính.
hỏi

1
@staticd Tại sao bạn không chấp nhận câu trả lời của chính mình? Nó là rất tốt!
Léo Léopold Hertz

Khi một trang bị đuổi khỏi zswap (bộ đệm trao đổi nén), đó là _ decompression_ và được đặt trong thiết bị trao đổi sao lưu, mỗi một tham chiếu năm [ lwn.net/Articles/537422/] bên dưới ...
Cbhihe

( lwn.net/Articles/537422 - "Trong quá trình viết lại, zswap giải nén trang ..."). @mmin dưới đây cho thấy điều này có thể không hiệu quả hoặc thậm chí là một mối nguy hiểm có thể khai thác cho máy chủ!
mwfearnley

Câu trả lời:


2

Về 2., zswap dường như giải nén các trang trên ghi lại, xác nhận nhận xét của @ Cbhihe.

mm / zswap.c , dòng 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

Vì vậy, zswap rất hữu ích cho các tình huống trong đó bộ đệm trong ram có khả năng bị quên sớm trước khi ghi lại vào đĩa. Nó không dành cho các ứng dụng có đống lớn, sống lâu mà cuối cùng sẽ cần được hỗ trợ bởi thiết bị trao đổi thực tế.


7
Tôi tìm thấy một hành vi nguy hiểm tiềm tàng của zswap. Khi một ứng dụng phân bổ nhiều trang và ghi vào chúng dữ liệu nén rất tốt (giả sử là một chuỗi số không), zswap vui vẻ lưu trữ chúng trong bộ nhớ của bảng nhân. Tuy nhiên, khi một cái gì đó kích hoạt trao đổi đĩa thực tế, thì dữ liệu được lưu trữ đột nhiên 'nổ' - nhiều số không trên các trang chỉ mất "gigabyte" trong bộ nhớ giờ đã giải nén thành hàng trăm gigabyte trên đĩa.
đánh bóng

2
Kẻ tấn công có thể cố gắng lưu trữ dữ liệu entropy thấp trên máy chủ. Khi một cái gì đó kích hoạt trao đổi, máy chủ sẽ chết.
đánh bóng

1
Bạn đã báo cáo điều này ngược dòng?
Ken Sharp

Một nhược điểm khác của việc viết dữ liệu không nén
Mihail Malostanidis

Chắc chắn sẽ tốt hơn về không gian và thời gian để đổ dữ liệu ở dạng giải nén! Nghe có vẻ như một cái gì đó chúng tôi thực sự muốn nó làm. Tôi chỉ có thể giả định rằng tái cấu trúc khu vực trao đổi để cho phép điều này liên quan đến việc viết lại rất nhiều mã hiện có hoặc yêu cầu một hệ thống phân bổ phức tạp hơn.
mwfearnley

75

Có rất nhiều thứ về ba hệ thống này nhưng không có cái nào trong số đó làm cho sự so sánh đơn giản giữa chúng chứ đừng nói đến việc giải thích chúng tốt. Tôi đã cố gắng để làm cho nó có ý nghĩa nhưng đầu tôi nổ tung. Sau đó tôi nghĩ rằng tôi đã có nó vì vậy tôi đã thử viết nó xuống và đầu tôi lại nổ tung. (xem tóm tắt về các triển khai) Tôi nghĩ rằng sẽ rất hữu ích khi đăng bài này ở đây vì có nhiều câu hỏi stackexchange hỏi về so sánh cặp đôi giữa chúng.

Tóm tắt những gì sẽ sử dụng khi:

  1. ZRAM nếu bạn không có thiết bị trao đổi trên ổ cứng / SSD.
  2. ZSWAP nếu bạn có thiết bị trao đổi trên ổ cứng / SSD.
  3. ZCACHE : Nó thực hiện những gì ZSWAP làm và CSONG nén và tăng tốc độ bộ đệm của trang hệ thống tập tin. (Nó phức tạp hơn nhiều trong nội bộ và không nằm trong kernel mainline vì nó vẫn đang được phát triển).

Tóm tắt về việc thực hiện của họ:

  1. ZRAM là một thiết bị trao đổi dựa trên RAM nén
  2. ZSWAPCache được nén nếu bạn đã có một trao đổi.
  3. ZCache là phần phụ trợ cho một loại RAM ảo đặc biệt (Bộ nhớ siêu việt) có thể được sử dụng để lưu trữ các trang hệ thống tập tin hoặc trao đổi dữ liệu.

Chi tiết:

  • ZRAM: Làm cho một thiết bị trao đổi trong RAM. Các trang được gửi ở đây được nén khi chúng được lưu trữ. Nó có mức độ ưu tiên cao hơn các thiết bị trao đổi khác: các trang được hoán đổi được ưu tiên gửi đến thiết bị zram cho đến khi nó đầy, chỉ sau đó là bất kỳ thiết bị trao đổi nào khác được sử dụng.

    • Lợi ích: Không phụ thuộc vào các thiết bị trao đổi (vật lý) khác. Nó có thể được sử dụng khi không có phân vùng trao đổi để mở rộng bộ nhớ khả dụng.
    • Nhược điểm: Nếu có các thiết bị trao đổi khác (HDD / SSD) thì chúng không được sử dụng tối ưu. Vì thiết bị zram là một thiết bị trao đổi độc lập, nên khi thiết bị đã đầy, mọi trang mới cần được hoán đổi sẽ được gửi trực tiếp đến thiết bị trao đổi tiếp theo, do đó:
      1. Có một cơ hội thực sự của đảo ngược LRU (ít được sử dụng gần đây nhất): Đây sẽ là dữ liệu được hoán đổi gần đây nhất vào đĩa chậm, trong khi các trang không hoạt động được hoán đổi từ lâu sẽ vẫn còn trong ZRAM nhanh
      2. Dữ liệu được gửi và đọc từ đĩa sẽ tiêu tốn rất nhiều băng thông vì nó không bị nén.
    • Trạng thái: Sáp nhập vào kernel mainline 3.14. Sau khi được kích hoạt trên một hệ thống, nó yêu cầu một số cấu hình không gian người dùng để thiết lập các thiết bị trao đổi và sử dụng chúng.
  • ZSWAP: Các frontswapmóc hệ thống cố gắng trao đổi trên trang và sử dụng zswap như write-back-cache cho một thiết bị swap HDD / SSD: Một cố gắng được thực hiện để nén trang và nếu nó chứa ít dữ liệu nén nó được ghi trực tiếp vào đĩa. Nếu dữ liệu được nén, nó được lưu trữ trong nhóm bộ nhớ zswap. Nếu các trang bị tráo đổi khỏi bộ nhớ khi tổng số trang được nén trong RAM vượt quá một kích thước nhất định, trang được nén gần đây nhất (LRU) được ghi vào đĩa vì không thể sớm được yêu cầu.

    • Lợi ích: Sử dụng rất hiệu quả RAM và trao đổi dựa trên đĩa. Giảm thiểu I / O trên đĩa bằng cách giảm số lần ghi và đọc yêu cầu (dữ liệu được nén và giữ trong RAM) và bằng cách giảm băng thông của các hoạt động I / O này khi dữ liệu ở dạng nén.
    • Hạn chế: Đó là sự cải tiến của các hệ thống trao đổi dựa trên đĩa và do đó phụ thuộc vào phân vùng trao đổi trên đĩa cứng.
    • Trạng thái: Được hợp nhất vào kernel linux 3.11.
  • ZCache: Nó là phần phụ trợ cho hệ thống bộ nhớ Siêu việt. Bộ nhớ siêu việt cung cấp bộ nhớ giống như RAM chỉ có thể được truy cập một trang tại một thời điểm bằng cách sử dụng putgetgọi. Điều này không giống như bộ nhớ bình thường có thể được truy cập một byte tại một thời điểm. Các hook frontswapcleancachehệ thống cố gắng trao đổi và lấy lại bộ đệm trang hệ thống tệp tương ứng và gửi chúng đến các phụ trợ bộ nhớ siêu việt. Khi zcache được sử dụng làm phụ trợ, dữ liệu sẽ được nén và lưu trữ trong RAM. Khi nó đầy lên, các trang nén được chuyển sang trao đổi. (một phụ trợ thay thế là RAMster chia sẻ một nhóm RAM trên các máy tính được nối mạng). Chỉ sử dụng frontswapfrontend với zcachephụ trợ hoạt động như thế nào zswap. (Trong thực tế zswap là tập con đơn giản của zcache)

    • Lợi ích Cung cấp bộ nhớ đệm nén cho cả trao đổi và bộ đệm hệ thống tập tin.
    • Tình trạng: Vẫn chưa được xử lý chính vì nó rất phức tạp và đang được xử lý.

Các tài nguyên tốt nhất tôi tìm thấy là:



6
Có thể và / hoặc hợp lý để sử dụng cả zram và zswap?
Phlya

2
Không ai trong số ba nhu cầu / nên được chạy cùng một lúc. zswap cần trao đổi dựa trên đĩa dưới dạng phụ trợ không giống như ZRAM không cần phân vùng trao đổi chuyên dụng. Tuy nhiên, nếu bạn đã trao đổi thì phân vùng trao đổi ZRAM + kém hiệu quả hơn nhiều so với phân vùng trao đổi zswap +.
staticd

Bạn có thể vui lòng tóm tắt ở đây cách bạn kích hoạt zswap. Tại đây chi tiết Askubfox.com / a111321 / 25388
Léo Léopold Hertz


1
Mỗi câu trả lời rằng đó zramlà một swaphoàn toàn sai. zramKHÔNG PHẢI LÀ a swap. Chỉ swapcó thể được lưu trữ trong zram. Nhưng đây là một trong nhiều trường hợp sử dụng có thể!. Dưới đây là một ví dụ: "Một số usecase bao gồm lưu trữ / tmp, sử dụng làm đĩa trao đổi, lưu trữ khác nhau trong / var và có thể nhiều hơn nữa :)" kernel.org/doc/Documentation/blockdev/zram.txt Ví dụ: tôi sử dụng nó cho lưu trữ tạm thời mà tôi định dạng và gắn kết như bất kỳ thiết bị khối bình thường khác.
Victor Yarema
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.