Linux 커널에서 스왑 공간 액세스는 어디에서 처리됩니까?

Linux 커널에서 스왑 공간 액세스는 어디에서 처리됩니까?

저는 연구 조교이며 이 질문은 우리 팀에게 매우 중요합니다.

우리는 프로세스(예: Python 프로그램)가 스왑 공간을 사용할 때 지연을 주입하는 방법을 찾고 있습니다. 예를 들어, 정상적인 상황에서 페이지를 처리하기 위해 스왑 공간에서 주 메모리로 스왑되는 경우 이를 수행하기 전에 지연이 필요합니다. (실제 세계에서는 스왑 공간이나 주 메모리에 액세스할 때 커널에서 지연이 발생하는 것이 의미가 없다는 것을 알고 있지만 이렇게 하면 우리에게 중요한 것을 시뮬레이션할 수 있습니다.)

내가 전에 했던 일:

printk커널의 다음 섹션에 명령문을 추가하려고 시도했지만 그 중 어느 것도 핸들 swap-inswap-out프로세스의 정확한 위치가 아닌 것 같습니다.

  1. 파일 의 memory.c함수에서 do_swap_page(). 항상 작동하는 것은 아닙니다.
  2. 파일 의 memcontrol.c함수에서 mem_cgroup_swapin_charge_page. 애플리케이션이 새로 스왑 공간을 할당하는 경우에만 작동합니다. (실제로 스왑을 사용할 때보다는)
  3. swap_state.c파일, 함수 swapin_readahead()및 함수 에서 swap_vma_readahead().

프로세스가 스왑 공간을 사용하더라도 아무런 효과가 없습니다.

참고 1: 저는 최신 버전의 커널(6.0.9)을 사용하고 있습니다. 그러나 나는 Linux 커널의 다른 버전이 다를 것이라고 생각하지 않습니다.

참고 2: 명령을 사용하여 사용된 스왑 양을 측정하고 있습니다 free -m. 또한 자세한 내용은 문서에서 제공됩니다 /proc/meminfo. 따라서 내 프로세스가 스왑 공간을 사용하고 있다고 확신하지만 커널 소스에서 이를 포착하는 방법을 모르겠습니다.

나는 성공하지 못한 채 몇 주 동안 답을 찾고 있었습니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사해요.

관련 정보