QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1357|回复: 5

tcp_init函数的一点疑问

[复制链接]
发表于 2003-10-25 17:07:06 | 显示全部楼层 |阅读模式
[code:1]
if (num_physpages >= (128 * 1024))
                goal = num_physpages >> (21 - PAGE_SHIFT);
        else
                goal = num_physpages >> (23 - PAGE_SHIFT);

        for (order = 0; (1UL << order) < goal; order++)
                ;
        do {
                tcp_ehash_size = (1UL << order) * PAGE_SIZE /
                        sizeof(struct tcp_ehash_bucket);
                tcp_ehash_size >>= 1;
                while (tcp_ehash_size & (tcp_ehash_size - 1))
                        tcp_ehash_size--;
                tcp_ehash = (struct tcp_ehash_bucket *)
                        __get_free_pages(GFP_ATOMIC, order);
        } while (!tcp_ehash && --order > 0);
[/code:1]
这段代码是确定order值,最终通过order值,确定可以存储的tcp_ehash_bucket结构数目,通过__get_free_pages函数分配该结构所需的页面空间。
但是我不知道order为什麽需要这样确定?依据是什么?哪里有相关的参考信息?
发表于 2003-10-27 15:21:17 | 显示全部楼层
order is number of pages. it has to be 2(x) which is required by binary buddy allocator the kernel uses.
回复

使用道具 举报

 楼主| 发表于 2003-10-27 17:37:15 | 显示全部楼层
从上面这段代码看,并不能保证是order是2的倍数呀。
另外,为什麽内存大于512M时是21-12呢?小于时是23-12呢?
回复

使用道具 举报

发表于 2003-10-29 19:18:22 | 显示全部楼层
sorry, order is the exponent of 2, 2^order is the number of the pages requested.
回复

使用道具 举报

发表于 2003-10-30 16:55:03 | 显示全部楼层
guess: greater than 512MB, ehash size can be 1/512 of total memory
          less than 512, ehash size can be 1/2048 of the total.
回复

使用道具 举报

 楼主| 发表于 2003-10-30 21:37:58 | 显示全部楼层
thanks!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 06:19 , Processed in 0.078103 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表