페이지 캐시 페이지가 수정되면 더티로 표시되고 다시 쓰기가 필요하다는 것을 알고 있습니다.
시나리오 : 실행 파일 인 / apps / EXE 파일은 페이지 캐시에 완전히 페이징되고 (모든 페이지는 캐시 / 메모리에 있음) 프로세스 P에 의해 실행됩니다.
연속 릴리스는 / apps / EXE를 새로운 실행 파일로 대체합니다.
가정 1 : 프로세스 P (및 이전 실행 파일을 참조하는 파일 디스크립터가있는 다른 사람)는 문제없이 메모리 / apps / EXE에서 이전을 계속 사용하고 해당 경로를 실행하려고하는 새로운 프로세스는 새로운 실행 파일
가정 2 : 파일의 모든 페이지가 메모리에 매핑되지 않는 경우 교체 된 파일의 페이지를 요구하는 페이지 오류가 발생할 때까지 문제가 없으며 아마도 segfault가 발생한다고 가정합니다.
질문 1 : 파일의 모든 페이지를 vmtouch와 같은 것으로 막 으면 시나리오가 전혀 바뀌지 않습니까?
질문 2 : / apps / EXE가 원격 NFS에 있다면 차이가 있습니까? (그렇지 않다고 가정)
두 가지 가정을 수정하거나 확인하고 두 가지 질문에 대답하십시오.
이것이 일종의 3.10.0-957.el7 커널을 가진 CentOS 7.6 박스라고 가정하자
업데이트 : 더 생각해 보면이 시나리오가 다른 더티 페이지 시나리오와 다르지 않은지 궁금합니다.
새 바이너리를 작성하는 프로세스는 모두 페이지로 묶여 있기 때문에 모든 캐시 페이지를 읽고 가져오고 모든 페이지가 더티로 표시된다고 가정합니다. 그들이 잠겨 있으면 참조 카운트가 0이 된 후 코어 메모리를 차지하는 쓸모없는 페이지 일뿐입니다.
현재 실행중인 프로그램이 끝나면 다른 모든 것이 새로운 바이너리를 사용할 것이라고 생각합니다. 그것이 모두 맞다고 가정하면 파일의 일부만 페이징 될 때만 흥미로울 것 같습니다.