스왑은 언제 트리거되며 swap_tendency를 계산하는 방법은 무엇입니까?

스왑은 언제 트리거되며 swap_tendency를 계산하는 방법은 무엇입니까?

프로덕션 서비스에 Redis를 사용하려고 하며 성능에 좋지 않은 스왑을 피하려고 합니다.

나는 스왑이 다음에 의존하는 swap_tendency에 의해 트리거된다는 것을 이해합니다.

swap_tendency =mapped_ratio/2 + 교환 정도 + 고통

/proc/meminfo모니터링 스크립트에서 mapped_ratio/distress를 어떻게 얻나요?

아니면 시스템이 페이지를 교환할 것임을 알려주는 매개변수가 있습니까?

답변1

매핑 비율

mapped_ratio다음과 같이 계산할 수 있습니다.

mapped ratio = (nr mapped * 100) / total memory;

원천:https://www.cs.columbia.edu/~smb/classes/s06-4118/l19.pdf

숫자 매핑

값은 nr_mapped다음에서 읽을 수 있습니다 /proc/vmstat.

$ grep nr_mapped /proc/vmstat
nr_mapped 47640

고민하다

이 기사에 따르면 제목은 다음과 같습니다.Linux 메모리 - 구현 노트

"이것은 가상 머신이 페이지를 회수하는 것이 얼마나 어려운지를 나타내는 척도입니다. 가상 머신이 메모리 회수를 시도할 때마다 페이지를 회수하기 위해 각 영역에서 비활성 목록의 1/n을 스캔합니다. 목록을 순회할 때 해당 지역의 비활성 클린+프리 페이지 수가 최저 워터마크를 초과하지 않으면 n 빼기 1은 100 >> n"으로 측정됩니다.5

많은 문서를 연구할 때 "디스트레스"가 커널 카운터인 것처럼 들리지만 사실은 그렇지 않습니다. 대신, 각 메모리 영역을 스캔할 때 사용되는 값이며, 커널이 메모리 페이지의 프레임을 회수하려고 스캔하면서 값이 점차 증가합니다. 이에 대한 논의는 이 Q&A의 범위를 벗어나지만, 책의 "리눅스 커널 이해" 부분이 궁금하시다면,17장: 페이지 프레임 재활용. "distress" 값은 해당 영역을 스캔할 때 "prev_priority" 값에서 나옵니다.

인용하다

관련 정보