Tệp được sao lưu, khóa bộ nhớ chia sẻ và tương tác đĩa


7

Varnish, một trình tăng tốc HTTP, sử dụng nhật ký SHM được hỗ trợ tệp ~ 80 MB được mlock () ed vào bộ nhớ. Các tài liệu Varnish khuyên bạn nên lưu trữ tệp trên tmpfs để tránh truy cập đĩa không cần thiết. Tuy nhiên, nếu toàn bộ tệp bị khóa vào bộ nhớ, nhân Linux có còn ghi vào tệp sao lưu không?

Tôi đã cố gắng theo dõi điều này bằng cách sử dụng inotify và fatrace, tuy nhiên vì tương tác này có lẽ xảy ra tất cả bên trong kernel, nên không có hoạt động tệp nào được hiển thị cho các công cụ này. Rõ ràng có một số loại cập nhật xảy ra với tệp hoặc hệ thống tệp, vì việc theo dõi tệp sao lưu bằng ls cho thấy thời gian tệp thay đổi và sha1sum cho thấy nội dung đang thay đổi, nhưng điều này thực sự liên quan đến truy cập đĩa hoặc tất cả đều xảy ra trong ký ức?

Về cơ bản, tôi đang cố gắng tránh phải thực hiện giải pháp thay thế tmpfs, vì sử dụng SHM để sao lưu SHM có vẻ như là một cách giải quyết xấu xí cho một vấn đề thậm chí không tồn tại.

Câu trả lời:


4

Varnish dường như sử dụng tệp ánh xạ bộ nhớ đơn giản cho bộ nhớ dùng chung (thay vì, ví dụ: POSIX shm_open). Từ nguồn :

loghead = mmap(NULL, heritage.vsl_size,
    PROT_READ|PROT_WRITE,
    MAP_HASSEMAPHORE | MAP_NOSYNC | MAP_SHARED,
    heritage.vsl_fd, 0);

Trên BSD, MAP_NOSYNCyêu cầu kernel không ghi dữ liệu chia sẻ vào đĩa trừ khi bị ép buộc (ví dụ: để giải phóng bộ nhớ). Khi nó cũng bị khóa, điều đó gần như không bao giờ xảy ra. Thật không may, Linux không hỗ trợ MAP_NOSYNC.

Vì vậy, Linux sẽ thường xuyên viết các trang bị bẩn (đã thay đổi) từ bộ đệm vào đĩa. Đặt bộ đệm vào một tmpfs sẽ tránh điều đó. Vì vậy, Varnish cũng sẽ sử dụng bộ nhớ chia sẻ POSIX hoặc SysV (thực ra, bộ nhớ chia sẻ POSIX được triển khai trên Linux với một tmpfs được gắn tại /dev/shm, vì vậy sử dụng tmpfs sẽ ổn).

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.