Làm thế nào để ngăn chặn một quá trình Linux để thực hiện sau đó hoán đổi bộ nhớ của nó


19

Tôi muốn dừng một quá trình chạy dài để nó không tiêu tốn bất kỳ tài nguyên CPU hoặc bộ nhớ vật lý nào, với ý định nối lại quá trình tương tự trong tương lai.

Tôi biết phần CPU có thể đạt được bằng cách sử dụng SIGSTOPSIGCONT tín hiệu nhưng có thể thoát ra khỏi trang (hoán đổi trong trường hợp xử lý các trang bẩn) ngay lập tức bộ nhớ RSS riêng của quá trình (đã dừng)?


1
Ý định đằng sau này là gì? Bạn có muốn đảm bảo rằng quá trình tiếp tục nhanh hơn? Hay bạn muốn ngăn dữ liệu nhạy cảm được ghi vào đĩa? Hay cái gì khác? Nếu chúng tôi biết ý định, chúng tôi có thể đưa ra câu trả lời tốt hơn.
oliver

13
HĐH sẽ tự động làm việc này. Thực sự không có lý do để làm bất cứ điều gì cụ thể.
David Schwartz

@oliver Tôi đang tạo một bộ lập lịch hàng loạt ( github.com/brutusin/wava ). Việc triển khai hiện tại cung cấp lịch trình không ưu tiên nhưng tôi muốn chuyển sang một kế hoạch ưu tiên (có thể dừng công việc) để duyên dáng tránh một số tình huống bế tắc khi tất cả các công việc đang chạy phụ thuộc vào công việc xếp hàng. Tôi cần chính xác hành vi được yêu cầu, tiếp tục các quy trình đã dừng (không tạo quy trình mới từ điểm kiểm tra)
idelvall

1
@DavidSchwartz đó là một khẳng định rủi ro
idelvall

@idelvall Sau đó, có vẻ như bạn không muốn làm gì đặc biệt cho bộ nhớ.
David Schwartz

Câu trả lời:


11

Bạn có thể xem xét một kỹ thuật gọi là điểm kiểm tra / khôi phục. Điều này sẽ cho phép bạn thực hiện một quy trình đang chạy và lưu trạng thái của nó vào một tập hợp các tệp, sau đó khôi phục lại sau đó.
Để sử dụng nó, hãy bắt đầu bằng cách cài đặt chương trình criu [ git , wiki ] ( yum install criuhoặc apt install criu).

Để kiểm tra một quá trình đang chạy, hãy tạo một thư mục trống để giữ các tệp của nó và cd vào thư mục đó.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Bây giờ hãy kiểm tra quá trình chạy. Trong trường hợp này, tôi đang sử dụng --shell-job vì tôi có quy trình của mình đang chạy trong một vỏ với một tty liên quan.

criu dump -t 404 --shell-job

404 là mấu chốt của quá trình tôi muốn kiểm tra. Khi tôi làm điều này, tôi thấy quá trình chạy của mình bị giết và thư mục / var / tmp / checkpoint của tôi được điền với một tập các tệp cần thiết để khôi phục nó.

Để khôi phục quy trình, tôi đảm bảo rằng tôi đang ở trong thư mục chứa các tệp điểm kiểm tra và thực hiện khôi phục.

cd /var/tmp/checkpoint
criu restore --shell-job

Quá trình sẽ chọn nơi nó rời đi trong thiết bị đầu cuối nơi nó được chạy. Nếu tôi giết tiến trình đang chạy này và chạy criu restore --shell-joblại, quá trình sẽ trở lại điểm kiểm tra và khởi động lại.

Hi vọng điêu nay co ich.


4
Điều này không làm những gì OP tuyên bố họ muốn làm. Hãy thử nó - sẽ không có giảm bộ nhớ được sử dụng. Nó sẽ chỉ chuyển từ bộ nhớ riêng xử lý sang bộ đệm đĩa (do ghi ra tập hợp các tệp). Nó chỉ thực hiện một bước lưu thêm và một bước khôi phục bổ sung, và cùng một bộ nhớ được sử dụng (và có thể đẩy ra) theo cùng một cách. Trong thực tế, nó có thể làm cho mọi thứ tồi tệ hơn khi một số bộ nhớ bị trùng lặp do tạo ra mọi thứ mới để viết ra.
David Schwartz

heh, điểm tốt @David, đặc biệt nếu /tmplà tmpfs (được hỗ trợ bởi bộ nhớ / không gian hoán đổi). Nếu bạn kiểm tra một hệ thống tập tin được hỗ trợ bằng đĩa thông thường, thì bạn có thể sử dụng vmtouch -eđể đuổi các trang khỏi pagecache, nhưng nó vẫn sử dụng thêm RAM tạm thời. (Trừ khi criucó tùy chọn thực hiện i / o trực tiếp (với O_DIRECT) ...)
Peter Cordes

1
Thật khó để biết đây có phải là điều OP muốn hay không bởi vì OP yêu cầu một giải pháp cụ thể thay vì giải thích vấn đề mà anh ta đang cố gắng giải quyết. Đây có thể là câu trả lời hoàn hảo hoặc nó có thể vô dụng với anh ta, chúng tôi không thể nói.
David Schwartz

Tôi chưa xem xét chi tiết nhưng có vẻ như quy trình được khôi phục là một quy trình mới (pId khác nhau) và đây không phải là chính xác những gì tôi cần ...
idelvall

1
@idelvall: Đó là cách mà hầu hết các hương vị của điểm kiểm tra / khôi phục hoạt động. Một trường hợp sử dụng chính là lưu tiến trình tính toán trên các lần khởi động lại.
Peter Cordes
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.