struct page -> flags 변수의 활용을 알고 싶습니다.
글쓴이: inamind / 작성시간: 화, 2010/06/15 - 4:52오후
안녕하세요.
virtual memory 의 추가적인 정보를 보여주는 CONFIG_DEBUG_VM feature 를 enable 했더니 아래에서 VM_BUG_ON에서 Error 가 발생했습니다.
결론적으로 "page->flags >> NODES_PGSHIFT" 값이 0 인지 검사하는건데 가끔 1이 나와서 애러가 발생하네요.
page struct 의 flags 에서 shift 된 저 정보가 어떤 의미인지 알고 싶으나
google 신에도 내용이 없네요.
KLDP 전문가님들 도와주세요~~
static int move_freepages(struct zone *zone,
struct page *start_page, struct page *end_page,
int migratetype)
{
...
VM_BUG_ON(page_to_nid(page) != zone_to_nid(zone));
...
}
static inline int page_to_nid(struct page *page)
{
return (page->flags >> NODES_PGSHIFT) & NODES_MASK;
}
static inline int zone_to_nid(struct zone *zone)
{
#ifdef CONFIG_NUMA
return zone->node;
#else
return 0;
#endif
}
Forums:
ULK 책에서 찾아봤는데...
page descriptors 쪽에 flags 가 나와있긴 한데
32 bit 에 20개의 내용만 나열해 놓아서 어떤것에 해당하는지 알수가 없네요..;;
NUMA node id
page 구조체의 flags 필드는 크게 두 부분으로 나누어 집니다.
아래쪽은 (알고계신대로) 페이지의 현재 상태를 나타내는 비트맵이며
위쪽은 페이지가 속한 node 및 zone 등의 정보를 저장합니다.
page_to_nid() 함수는 이를 통해 NUMA node id 값을 추출하는 역할을 합니다.
아래를 참고하세요..
http://lxr.linux.no/#linux+v2.6.34/include/linux/mm.h#L435
댓글 달기