Jak zatrzymać proces systemu Linux w celu późniejszego wykonania, zamieniając jego pamięć

19

Chcę zatrzymać długotrwały proces, aby nie zużywał zasobów procesora ani pamięci fizycznej, z zamiarem wznowienia tego samego procesu w przyszłości.

Wiem, że część procesora jest osiągalny za pomocą SIGSTOPi SIGCONT sygnały , ale jest to możliwe do strony out (swap w przypadku brudnych stron procesu) natychmiast prywatny RSS z pamięci (zatrzymany) proces?

idelvall
źródło
1
Jaki jest tego cel? Czy chcesz mieć pewność, że proces zostanie wznowiony szybciej? A może chcesz zapobiec zapisywaniu poufnych danych na dysku? Albo coś innego? Jeśli znamy intencję, możemy być w stanie udzielić lepszych odpowiedzi.
oliver
13
System operacyjny zrobi to automatycznie. Naprawdę nie ma powodu, aby robić cokolwiek konkretnego.
David Schwartz
@oliver Tworzę harmonogram wsadowy ( github.com/brutusin/wava ). Obecna implementacja oferuje planowanie zapobiegawcze, ale chcę przejść do działania zapobiegawczego (możliwość zatrzymania uruchomionych zadań), aby w sposób płynny uniknąć niektórych sytuacji zakleszczenia, gdy wszystkie uruchomione zadania zależą od zadań w kolejce. Potrzebuję dokładnie takiego zachowania, kontynuowania zatrzymanych procesów (nie tworzenia nowych z punktu kontrolnego)
idelvall,
1
@DavidSchwartz, co jest ryzykownym stwierdzeniem
idelvall,
@idelvall Wygląda na to, że nie chcesz robić nic specjalnego w pamięci.
David Schwartz

Odpowiedzi:

11

Możesz spojrzeć na technikę o nazwie punkt kontrolny / przywracanie. Umożliwi to uruchomienie uruchomionego procesu i zapisanie jego stanu w zestawie plików, a następnie przywrócenie go w późniejszym czasie.
Aby z niego skorzystać, zacznij od zainstalowania programu criu [ git , wiki ] ( yum install criulub apt install criu).

Aby sprawdzić działający proces, utwórz pusty katalog, w którym będą przechowywane jego pliki, i włóż dysk CD do tego katalogu.

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

Teraz sprawdź działający proces. W tym przypadku korzystam z zadania --shell, ponieważ mój proces działa w powłoce z powiązanym tty.

criu dump -t 404 --shell-job

404 to pid procesu, który chcę sprawdzić. Kiedy to robię, widzę, że mój proces został zabity, a mój katalog / var / tmp / checkpoint został zapełniony zestawem plików potrzebnych do jego przywrócenia.

Aby przywrócić proces, upewniam się, że jestem w katalogu z plikami punktów kontrolnych i przywracam.

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

Proces rozpocznie się w miejscu, w którym został przerwany, w terminalu, w którym został uruchomiony. Jeśli zabiję ten uruchomiony proces i uruchomię go criu restore --shell-jobponownie, proces powróci do punktu kontrolnego i uruchomi się ponownie.

Mam nadzieję że to pomoże.

virtex
źródło
4
To nie robi tego, co twierdzi OP, że chce zrobić. Spróbuj - nie zostanie zmniejszone zużycie pamięci. Po prostu przełączy się z przetwarzania pamięci prywatnej na pamięć podręczną dysku (z powodu wypisania zestawu plików). Po prostu robi dodatkowy krok zapisu i dodatkowy krok przywracania, a ta sama pamięć jest używana (i wysuwana) w ten sam sposób. W rzeczywistości może to pogorszyć sytuację, ponieważ część pamięci zostaje zduplikowana z powodu wygenerowania wszystkiego, co można zapisać.
David Schwartz
heh, dobry punkt @David, szczególnie jeśli /tmpjest to tmpfs (wspierany przez pamięć / przestrzeń wymiany). Jeśli vmtouch -ezaznaczysz punkt kontrolny do normalnego systemu plików opartego na dysku, możesz następnie użyć do eksmisji stron z pamięci podręcznej, ale nadal tymczasowo używa dodatkowej pamięci RAM. (Chyba że criuma opcję bezpośredniego wejścia / wyjścia (z O_DIRECT) ...)
Peter Cordes
1
Trudno wiedzieć, czy tego właśnie chce OP, czy nie, ponieważ OP prosi o konkretne rozwiązanie, a nie wyjaśnia, jaki problem próbuje rozwiązać. To może być idealna odpowiedź lub może być dla niego bezużyteczna, nie możemy powiedzieć.
David Schwartz
Nie przyjrzałem się temu szczegółowo, ale wydaje się, że przywrócony proces jest procesem nowym (inny wykres) i nie jest to dokładnie to, czego potrzebuję ...
idelvall,
1
@idelvall: Tak działa większość smaków punktu kontrolnego / przywracania. Jednym z głównych przypadków użycia jest zapisanie postępów w obliczeniach między restartami.
Peter Cordes,