routing cache hash table 조절하는 방법..
글쓴이: 지나가는새 / 작성시간: 월, 2005/03/14 - 3:10오후
커널 메세지 중에,
IP: routing cache hash table of 512 buckets, 4Kbytes
와 같은 메세지가 나옵니다.
사실, 박스가 라우터도 아니고, 엣지단에 붙어 있기 때문에 4K의 테이블은 좀 넘친다는 생각이 듭니다.(브릿지로 사용하고 있습니다)
제가 궁금한것은,
1. 저 4K를 줄이려면 어떤 방법으로 해야 하는지
2. 저 4K를 만약에 줄인다면(1K나.. 등으로) 그 나머지가 커널이 사용하는 메모리로 옮겨 지는지 알고 싶습니다.
3. 1번에 관련되어 net/ipv4/route.c의 코드를 보면
goal = num_physpages >> (26 - PAGE_SHIFT); for (order = 0; (1UL << order) < goal; order++) /* NOTHING */; do { rt_hash_mask = (1UL << order) * PAGE_SIZE / sizeof(struct rt_hash_bucket); while (rt_hash_mask & (rt_hash_mask - 1)) rt_hash_mask--; rt_hash_table = (struct rt_hash_bucket *) __get_free_pages(GFP_ATOMIC, order); } while (rt_hash_table == NULL && --order > 0);
의 식으로 PAGE_SHIFT가 중요한 인자로 사용되는데요, 저 PAGH_SHIFT가 정확히 어떠한 인자로 사용되는지 가늠이 안됩니다.
/* PAGE_SHIFT determines the page size */ #define PAGE_SHIFT 12 #define PAGE_SIZE (1L << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE-1))
로 정의 되어 있지만 상당히 많은 부분(사실상 페이징에 관련된 거의 모든 곳)에 사용되는거 같은데요, 정확히 저 SHIFT라는 것의 정의가 어떻게 사용되는지 감이 오질 않네요. (대부분 arg >> ( x - PAGE_SHIFT)로 사용되더군요)
도움 부탁 합니다.
kernel version 2.4.18, network configuration <*> Packet socket [ ] Packet socket: mmapped IO <M> Netlink device emulation [*] Network packet filtering (replaces ipchains) [ ] Network packet filtering debugging [*] Socket Filtering <*> Unix domain sockets [*] TCP/IP networking [ ] IP: multicasting [ ] IP: advanced router [ ] IP: kernel level autoconfiguration < > IP: tunneling < > IP: GRE tunnels over IP [ ] IP: ARP daemon support (EXPERIMENTAL) [ ] IP: TCP Explicit Congestion Notification support [ ] IP: TCP syncookie support (disabled per default) IP: Netfilter Configuration ---> < > The IPv6 protocol (EXPERIMENTAL) < > Kernel httpd acceleration (EXPERIMENTAL) [ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL) <M> 802.1Q VLAN Support (EXPERIMENTAL) --- < > The IPX protocol < > Appletalk protocol support < > DECnet Support <M> 802.1d Ethernet Bridging < > CCITT X.25 Packet Layer (EXPERIMENTAL) < > LAPB Data Link Driver (EXPERIMENTAL) [ ] 802.2 LLC (EXPERIMENTAL) [ ] Frame Diverter (EXPERIMENTAL) < > Acorn Econet/AUN protocols (EXPERIMENTAL) < > WAN router [ ] Fast switching (read help!) [ ] Forwarding between high speed interfaces QoS and/or fair queueing --->
Forums:
페이지의 크기..
rt_hash_table 은 __get_free_pages() 함수를 이용하여 할당받기 때문에
페이지 크기 이하로는 할당이 불가능합니다.
PAGE_SHIFT 매크로는 페이지의 크기를 결정하는 값으로
PAGE_SIZE 는 2 의 PAGE_SHIFT 승의 크기를 가집니다.
위에서 PAGE_SHIFT 는 12 이므로 PAGE_SIZE 는 4096, 즉 4k 가 됩니다.
댓글 달기