한 NUMA 노드에서 다른 NUMA 노드로 프로세스의 모든 메모리 페이지를 마이그레이션하는 방법은 무엇입니까?


10

Linux에서는 런타임시 KVM 가상 머신의 메모리 페이지를 하나의 NUMA 노드에서 다른 NUMA 노드로 마이그레이션하려고합니다. 그러나 KVM 하이퍼 바이저에서 또는 libvirt API를 사용하여 인터페이스를 찾을 수 없습니다. 그런 다음의 numa_migrate_pages함수 를 사용 -lnuma하고 VM 프로세스의 메모리 페이지를 마이그레이션 하려고했습니다 . 그러나이 numa_migrate_pages기능은 일부 페이지 만 마이그레이션 할 수 있으며 모든 페이지를 마이그레이션 할 수는 없습니다. 예를 들어 아래 텍스트는이 VM 프로세스의 메모리 페이지 배포를 보여줍니다.

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages

그리고 Node2의 모든 페이지를 Node0으로 마이그레이션하고 싶습니다. 그러나 numa_migrate_pages기능 을 사용한 후 아래 텍스트와 같이 일부 페이지 만 마이그레이션됩니다.

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages

그런 다음 파일을 열고 Node2에 남아있는 대부분의 페이지가 익명이고 더티 페이지임을 발견했습니다./proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...

그렇다면 Node2의 모든 페이지를 Node0으로 마이그레이션 할 수없는 이유는 무엇입니까? 여기서 무슨 문제가 있습니까?


3
텍스트를 붙여 넣을 때 이미지를 게시하지 마십시오. 이미지를 검색하거나 답변에 붙여 넣을 수 없으며 사용자와 크게 다른 모니터 (예 : 더 큰 고해상도 모니터에서는 읽을 수없는 작은 글꼴) 나 화면 판독기 소프트웨어를 사용하는 시각 장애가있는 사용자가 읽을 수 없습니다 입 부분.
cas

누마 마이그레이션 페이지를 루트로 실행하고 있다고 가정합니까?
Lmwangi

@Lmwangi 예, 루트로 실행 중입니다.
Jenson

거래를 완료하기에 Node0에 충분한 여유 페이지가 있습니까?
Aaron Walerstein

답변:


1

당신은 원하는 migratepages에서 바이너리 numactl패키지를.

사용법 및 예

sudo migratepages $VM_PID $SRC_NODE $DEST_NODE
sudo migratepages 12345 2 0

한계

VM 하드웨어

예를 들어 페이지가 노드에 잠겨있을 수 있습니다. 하드웨어 통과와 관련이 있고 특정 노드에있는 하드웨어를 나타내는 경우

사용 가능한 메모리 및 페이지 크기

대상 노드에 충분한 여유 메모리가 필요하지만 큰 페이지를 이동하기 위해 너무 조각화하지 않아도됩니다. 페이지 중 하나가 대량의 연속 할당이고 대상 노드 사용 가능한 메모리에 사용 가능한 영역이 충분히 크지 않은 경우 압축이 트리거되고 성공함에 따라 큰 페이지 이동이 실패 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.