routing cache hash table 조절하는 방법..

지나가는새의 이미지

커널 메세지 중에,

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  --->
pastime의 이미지

rt_hash_table 은 __get_free_pages() 함수를 이용하여 할당받기 때문에
페이지 크기 이하로는 할당이 불가능합니다.

rt_hash_table = (struct rt_hash_bucket *)
            __get_free_pages(GFP_ATOMIC, order); 

PAGE_SHIFT 매크로는 페이지의 크기를 결정하는 값으로
PAGE_SIZE 는 2 의 PAGE_SHIFT 승의 크기를 가집니다.
위에서 PAGE_SHIFT 는 12 이므로 PAGE_SIZE 는 4096, 즉 4k 가 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.