balloon driver memory reclaim 과정
페이지 정보
작성자 조희승 댓글 0건 조회 6,717회 작성일 12-08-17 15:05본문
balloon driver로 메모리를 xen에게 반환하는 과정
## balloon driver memory reclaim 분석 ##
- 김환주
- 김환주
frame_list: mfn 저장 (for increase/decrease batching in page size)
1. memory reclaim
- ballon driver
alloc_page로 nr_pages 만큼 할당
할당한 페이지에 대한 mfn을 frame_list에 저장
할당한 페이지를 zeroing
Lowmem이면 update_va_mapping으로 해당 엔트리 0으로 셋
할당한 페이지에 대해 P2M 테이블을 INVALID_P2M_ENTRY로 채움
ballon_append를 통해 할당 페이지들을 balloon_pages에 추가(각 balloon_high와 balloon_low에 카운트 증가)
reservation 구조체의 extent_start 핸들에 frame_list 할당
reservation 구조체의 nr_extents에 nr_pages 할당
HYPERVISOR_memory_op( XENMEM_decrease_reservation, &reservation )
리턴 값으로 실제 decrease에 성공한 페이지 수 리턴
bs.current_pages으로부터 nr_page만큼 감소
totalram_pages = bs.current_pages
- ballon driver
alloc_page로 nr_pages 만큼 할당
할당한 페이지에 대한 mfn을 frame_list에 저장
할당한 페이지를 zeroing
Lowmem이면 update_va_mapping으로 해당 엔트리 0으로 셋
할당한 페이지에 대해 P2M 테이블을 INVALID_P2M_ENTRY로 채움
ballon_append를 통해 할당 페이지들을 balloon_pages에 추가(각 balloon_high와 balloon_low에 카운트 증가)
reservation 구조체의 extent_start 핸들에 frame_list 할당
reservation 구조체의 nr_extents에 nr_pages 할당
HYPERVISOR_memory_op( XENMEM_decrease_reservation, &reservation )
리턴 값으로 실제 decrease에 성공한 페이지 수 리턴
bs.current_pages으로부터 nr_page만큼 감소
totalram_pages = bs.current_pages
- xen
do_memory_op
decrease_reservation
extent_list에 저장된 mfn들에 대해 guest_remove_page를 호출
guest_remove_page
clear pinned, allocated
put_page , put_page_type
m2p invalidation
do_memory_op
decrease_reservation
extent_list에 저장된 mfn들에 대해 guest_remove_page를 호출
guest_remove_page
clear pinned, allocated
put_page , put_page_type
m2p invalidation
참고) xenolinux에서 XENMEM_decrease_reservation을 호출하는 곳
1) hypervisor interface
1 319 arch/i386/mm/hypervisor.c <<<xen_create_contiguous_region>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
2 415 arch/i386/mm/hypervisor.c <<<xen_destroy_contiguous_region>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
1 319 arch/i386/mm/hypervisor.c <<<xen_create_contiguous_region>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
2 415 arch/i386/mm/hypervisor.c <<<xen_destroy_contiguous_region>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
2) balloon driver
9 200 drivers/xen/balloon/balloon.c <<<increase_reservation>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
10 302 drivers/xen/balloon/balloon.c <<<decrease_reservation>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
11 519 drivers/xen/balloon/balloon.c <<<dealloc_pte_fn>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
12 553 drivers/xen/balloon/balloon.c <<<alloc_empty_pages_and_pagevec>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
9 200 drivers/xen/balloon/balloon.c <<<increase_reservation>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
10 302 drivers/xen/balloon/balloon.c <<<decrease_reservation>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
11 519 drivers/xen/balloon/balloon.c <<<dealloc_pte_fn>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
12 553 drivers/xen/balloon/balloon.c <<<alloc_empty_pages_and_pagevec>>>
ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
3) netfront (page flipping)
13 823 drivers/xen/netfront/netfront.c <<<network_alloc_rx_buffers>>>
np->rx_mcl[i].args[0] = XENMEM_decrease_reservation;
14 834 drivers/xen/netfront/netfront.c <<<network_alloc_rx_buffers>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
13 823 drivers/xen/netfront/netfront.c <<<network_alloc_rx_buffers>>>
np->rx_mcl[i].args[0] = XENMEM_decrease_reservation;
14 834 drivers/xen/netfront/netfront.c <<<network_alloc_rx_buffers>>>
if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
- 이전글netfront 분석입니다 12.08.17
- 다음글A Rough Introduction to Using Grant Tables - Christopher Clark 12.08.17
댓글목록
등록된 댓글이 없습니다.