Daemon truyền thông sau khi phục hồi các thông điệp gửi lại, nó phải sinh lại tiến trình MPI. Quá trình sinh lại gồm 2 bước:
1) Phục hồi danh sách các thông điệp sao lưu nó gửi cho tiến trình khác trước lúc checkpoint (khi checkpoint, các thông điệp sao lưu này được gắn vào ảnh tiến trình).
server máy phục hồi
Sử dụng thư viện Condor <group>.<rank>.restart.pipe
Daemon truyền thông Bộ lưu trữ ảnh tiến trình lấy danh sách thông điệp lưu (1)
phục hồi danh sách thông điệp đã gửi và sẵn sàng gửi. (2) lấy ảnh tiến trình về (3) chuyển ảnh tiến trình xuống pipe phục hồi (4)
Sinh lại tiến trình MPI (5)
get_checkpoint()
MPI khôi phục
2) Lấy ảnh tiến trình đưa vào pipe phục hồi.
Hình 10: Giao thức khôi phục tiến trình MPI
1) Đầu tiên, Daemon truyền thông phục hồi nhận lại danh sách các thông điệp sao lưu và các thông điệp chuẩn bị gửi trước khi lưu ảnh tiến trình. Khi danh sách này phục hồi, nếu tiến trình khác lại bị lỗi và yêu cầu tiến trình vừa phục hồi này gửi lại thông điệp thì nó sẵn sàng gửi lại. Đây là cơ chế môi trường này có thể chống lỗi đa tiến trình.
2) Tiếp theo, các thông điệp được gắn liền với ảnh tiến trình nhận về được phục hồi vào bảng danh sách các thông điệp sao lưu. Đây là bảng danh sách sao lưu thông điệp trước khi gửi của tiến trình này tới các tiến
Máy chủ phục vụ Máy phục hồi
tiếp tục tính toán. MPI bản sao
fork (1) sử dụng thư viện
Condor để đổ ảnh tiến trình xuống <group>.<rank>.ckpt.pipe (2)
Daemon truyền thông Bộ lưu ảnh tiến trình
gửi danh sách thông điệp(3)
gửi ảnh tiến trình (4)
MPI gốc
put_checkpoint() server
3) Sau đó, tiến trình truyền thông này tiếp tục nhận ảnh tiến trình MPI đã lưu từ Bộ phục vụ lưu trữ ảnh tiến trình.
4) Quá trình nhận ảnh tiến trình diễn ra đồng thời với quá trình đổ ảnh vào <group>.<rank>.restart.pipe để thư viện Condor sử dụng khôi phục tiến trình MPI.
5) Daemon truyền thông sử dụng hàm execvp( ) sinh tiến trình MPI với tham số đầu vào là “restart <group>.<rank>.restart.pipe”. Tiến trình MPI sử dụng thư viện Condor dùng pipe này để phục hồi tiến trình.