閱讀289 返回首頁    go 阿裏雲 go 技術社區[雲棲]


網絡子係統38_ip子係統初始化

//ip子係統初始化
//調用路徑inet_init->ip_init
//包括路由子係統的初始化,inet_peer緩存的初始化
1.1 void __init ip_init(void)
{
	dev_add_pack(&ip_packet_type);//添加l3協議處理函數
	ip_rt_init(); //路由子係統初始化
	inet_initpeers();//inet_peer緩存
}

//調用路徑ip_init->inet_initpeers
//inet_peer緩存初始化
//	1.每一個與linux通過inet協議交換過數據的主機,都會被認為是一個ip peer,linux為每個peer分配一個inet_peer結構。
//	2.inet_peer的主要目的,使不同ip使用不同的ip id生成器。
//	3.係統中所有的inet_peer實例組織成一課avl樹,方便查找。
1.2 void __init inet_initpeers(void)
{
	struct sysinfo si;

	//獲取係統內存信息
	si_meminfo(&si);
	//係統中inet_peer數量的閥值
	if (si.totalram <= (32768*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 1; /* max pool size about 1MB on IA32 */
	if (si.totalram <= (16384*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 1; /* about 512KB */
	if (si.totalram <= (8192*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 2; /* about 128KB */
	//inet_peer SLAB cache
	peer_cachep = kmem_cache_create("inet_peer_cache",
			sizeof(struct inet_peer),
			0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
			NULL);
	//垃圾回收
	peer_periodic_timer.expires = jiffies
		+ net_random() % inet_peer_gc_maxtime
		+ inet_peer_gc_maxtime;
	add_timer(&peer_periodic_timer);
}

最後更新:2017-04-03 15:22:13

  上一篇:go timus 1268 原根
  下一篇:go URAL 1204 中國剩餘定理