2012-04-19 32 views
9

Tôi có một ứng dụng định kỳ (sau mỗi 1 hoặc 2 giây) lấy điểm kiểm tra bằng cách tự rèn. Vì vậy, trạm kiểm soát là một ngã ba của quá trình ban đầu mà chỉ ở lại nhàn rỗi cho đến khi nó được yêu cầu bắt đầu khi một số lỗi trong quá trình ban đầu xảy ra.Chi phí của bẫy lỗi trang

Bây giờ câu hỏi của tôi là cơ chế sao chép-ghi-ghi chép tốn kém như thế nào. Chi phí của bẫy lỗi trang sẽ xảy ra bất cứ khi nào quy trình gốc ghi vào trang bộ nhớ (lần đầu tiên sau khi lấy điểm kiểm tra), vì cơ chế sao chép trên ghi sẽ đảm bảo rằng quy trình gốc sẽ trang vật lý khác với điểm kiểm tra.

Theo ý kiến ​​của tôi, chi phí bẫy lỗi trang có thể khá cao khi xảy ra gián đoạn, chúng tôi chuyển từ vùng đất người dùng sang vùng không gian hạt nhân và sau đó quay lại từ hạt nhân sang không gian người dùng. Tôi có thể mất bao nhiêu chu trình CPU từ một bẫy lỗi trang như vậy. Giả sử rằng RAM đủ lớn và chúng tôi không bao giờ cần phải trao đổi vào đĩa cứng. Vâng, tôi biết rằng thật khó để tưởng tượng một chương trình kiểm tra hiệu quả hơn điều này và do đó bạn có thể nói lý do tại sao tôi lo lắng về chi phí lỗi trang bẫy, nhưng tôi yêu cầu chỉ có ý tưởng chi phí sẽ là bao nhiêu cho chương trình này.

+0

Tùy thuộc vào kiểu truy cập dữ liệu của ứng dụng của bạn. Hãy thử so sánh thời gian chạy có và không có điểm kiểm tra để xem các điểm kiểm tra ảnh hưởng như thế nào đến thời gian chạy. –

+1

Tôi không thể thấy tính hữu dụng của điểm kiểm tra này. Sau ngã ba(), cha mẹ và con là giống hệt nhau. Ater parent exit() s, đứa trẻ có thể tham chiếu chính xác các trang vật lý giống nhau, vì cha mẹ đã bỏ nó tham chiếu đến nó (trạng thái COW cho các trang có thể dự phòng thành "đính kèm" cho tiến trình con, vì trạng thái COW với chỉ tham khảo quy trình không có ý nghĩa) – wildplasser

+0

wildplasser, sự cần thiết cho checkpointing là để tránh khởi động lại ứng dụng. Nó có thể được nối lại từ một trạm kiểm soát trạng thái đã lưu trước đó là a.k.a. – pythonic

Trả lời

10

Bạn có thể thực hiện phép tính sơ bộ cho một người tự học đoán. Giả sử không có quyền truy cập đĩa (~ 10 tỷ chu kỳ), bạn phải chiếm

  • 160 chu kỳ cho các bẫy và trở về (khoảng, trên x86_64)
  • kiểm tra tính hợp lệ, hạn ngạch, kế toán, và không có điều gì (không rõ, có thể là một vài trăm đến một ngàn chu kỳ)
  • thẳng hàng memcpy của 4096 byte, một cái gì đó xung quanh 500-800 chu kỳ
  • TLB huỷ bỏ hiệu lực (thêm 10-100 chu kỳ về tiếp cận đầu tiên)
  • hoặc đuổi của dữ liệu lưu trữ khác hoặc là một bộ nhớ cache được bảo đảm bỏ lỡ (80-400 chu kỳ) tùy thuộc vào việc thực hiện memcpy. Nó quan trọng rất nhiều về mô hình truy cập của bạn cho dù một hay khác là tốt hơn.

Vì vậy, tất cả trong tất cả, chúng ta đang nói về một cái gì đó khoảng 2000 chu kỳ, với một số hiệu ứng (ví dụ: TLB và hiệu ứng bộ nhớ cache) được trải ra và không nhìn thấy ngay lập tức. Omondi và Sedukhin báo cáo 1700 chu kỳ trên P-III vào năm 2003, phù hợp với ước tính này.

Lưu ý rằng nếu trang chưa bao giờ được viết trước đó, mọi thứ hơi khác nhau theo nhận xét của L. Torvalds vào năm 2000. Một bản sao chép ghi trên trang không sẽ kéo trang khác 0 từ hồ bơi và không sao chép số không. Đó là khá nhiều một bộ nhớ cache được bảo đảm bỏ lỡ quá, mặc dù.

+0

Rất nhiều thông tin. Cảm ơn! – pythonic