`
bollaxu
  • 浏览: 217312 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Squid mainInitialize()函数分析

阅读更多

 

static void mainInitialize(void)
{
	//...

	//do nothing ...
	comm_select_postinit();
	
	//configure_once代表是否曾经调用过mainInitialize()函数
	//1表示之前调用过
	if (!configured_once)
		//do nothing ...
		disk_init();		/* disk_init must go before ipcache_init() */

	//域名和IP地址的缓存初始化,用来缓存dns正反解得到的ip
	//"ipcache_size"ip缓存的entry数量
	//初始化IpcacheStats,一个统计数据的结构(如requests/replies/hits/misses等数据)
	//初始化lru_list,是一个双向链表
	//初始化static_addrs,_ipcache_addrs结构
	//设置ipcache_high和ipcache_low
	//创建一个哈希表ip_table,缓存ip
	//cachemgrRegister注册获取ipcache统计数据的action
	//分配内存池到MemPools的相应位置
	ipcache_init()

	//fqdn缓存初始化
	//"fqdncache_size"域名全称缓存的entry数量
	//初始化类似ipcache_init(),初始化FqdncacheStats,创建一个哈希表fqdn_table,并注册获取统计数据的action,分配内存池到MemPools的相应位置
	fqdncache_init();

	//解析host_file指令指定的文件,一般linux下是"/etc/hosts",并把ip和host放入对应的ip_table和fqdn_table
	parseEtcHosts();

	//使用外部(由cache_dns_program指定)或者内部的dns
	//调用helperOpenServers()启动外部程序,并建立进程间通信通道
	//cachemgrRegister注册获取dns统计数据的action
	//...

	//同上,启动redirect_program指令指定的外部程序,注册获取redirect统计数据的action
	redirectInit();

	//同上,storeurl_rewrite_program指令
	storeurlInit();

	//同上,location_rewrite_program指令
	locationRewriteInit();

	errorMapInit();

	//"auth_param"指令
	//代理认证初始化
	authenticateInit(&Config.authConfig);

	//"external_acl_type"指令
	//外部acl辅助器
	externalAclInit();

	//"external_refresh_check"指令
	//外部辅助器,来决定是否refresh stale response
	refreshCheckInit();

	//打开useragent_log指令指定的logfile
	useragentOpenLog();

	//打开"referer_log"指令指定的logfile
	refererOpenLog();

	//初始化http header中各个域的相关数据结构
	//设置ListHeadersMask,ReplyHeadersMask,RequestHeadersMask的位
	//初始化HttpHeaderStats,并注册一个获取HttpHeaderStats信息的action
	//must go before any header processing (e.g. the one in errorInitialize)
	httpHeaderInitModule();

	//This function finds the error messages formats, and stores them in error_text[];
	errorInitialize();

	//打开"access_log","cache_access_log"指令指定的logfile
	accessLogInit();

	//...

	//第一次调用mainInitialize()
	if(!configured_once) {
	
		//调用cachemgrRegister()注册回调函数,如cachemgrShutdown,cachemgrReconfigure
		//cachemgrRegister()把action及它的回调函数加入到ActionTable里面
		cachemgrInit();

		//统计数据初始化
		//注册获取各种统计数据的action
		statInit();

		//store_table哈希列表,cache摘要,swap dir等初始化,
		storeInit();

		//读取mine文件,把里面的类型存入mime table
		mimeInit(Config.mimeTablePathname);

		//持久化连接table初始化
		//client_pconn_hist,server_pconn_hist初始化
		//给pconn_data_pool,pconn_fds_pool分配内存
		pconnInit();

		//初始化refreshCounts中每个协议(HTTP, ICP, HTCP, on store, Cache Digests)
		//初始化DefaultRefresh (_refresh_t结构)
		refreshInit();

		//调用clientOpenListenSockets()创建并监听socket,socket的地址由"http_port"指定
		//把socket的fd注册到事件监听(如epoll),并注册请求处理函数
		//调用icpConnectionsOpen()打开ICP socket(incoming和outgoing, 都是udp),并添加到事件监听和处理函数
		serverConnectionsOpen();

		//ICP
		neighbors_init();

		//添加一些信号的处理函数
		//...
		//检查MemPools[]的所有entry是否已经初始化
		//...
		//添加事件
		//...

		configured_once = 1;
	}
}
 

void storeInit(void)
{
	//初始化一个大小为16个unsigned char的数组null_key
	storeKeyInit();
	//计算store bucket的个数store_hash_buckets
	storeInitHashValues();
	//创建store_table,bucket个数是store_hash_buckets
	store_table = hash_create(storeKeyHashCmp, store_hash_buckets, storeKeyHashHash);
	//Create removal policy instance
	mem_policy = createRemovalPolicy(Config.memPolicy);
	//Cache摘要(Cache Digest)
	//Cache摘要基于由Pei Cao首先发布的一项技术,叫做摘要缓存。基本思路是用一个Bloom filter来表现cache内容。邻居cache下载其他每个cache的Bloom filter(也即摘要)。然后,通过查询摘要来决定某个URI是否在邻居的cache里。
	//相对于ICP,cache摘要以空间交换时间。ICP查询浪费时间(延时),cache摘要浪费空间(内存,磁盘)。在squid中,邻居的摘要完全存放在内存里。在一个典型的摘要里,每百万目标需要大约625KB的内存。
	//digest_generation on #开启.本参数指令控制squid是否产生自己的cache摘要
	//创建cache摘要store_digest并注册获取cache摘要的action
	storeDigestInit();
	
	//打开cache_store_log指定的logfile
	storeLogOpen();
	
	stackInit(&LateReleaseStack);
	//添加一个event到tasks队列
	eventAdd("storeLateRelease", storeLateRelease, NULL, 1.0, 1);
	//调用SwapDir结构的init()函数来初始化swap fs的bitmap。如aufs就是storeAufsDirInit()
	storeDirInit();
	
	storeRebuildStart();
	//注册actions
	cachemgrRegister("storedir", "Store Directory Stats", storeDirStats, 0, 1);
	cachemgrRegister("store_check_cachable_stats", "storeCheckCachable() Stats", storeCheckCachableStats, 0, 1);
	cachemgrRegister("store_io", "Store IO Interface Stats", storeIOStats, 0, 1);
}
 

 

分享到:
评论

相关推荐

    squid代码分析!

    网上有关开源软件squid源代码的分析很少,这个很大程度弥补了一些需要改squid用户的需求!

    squid资源讲解以及分析

    squid资源讲解以及分析squid资源讲解以及分析

    网络代理缓存Squid存储系统分析.pdf

    网络代理缓存Squid存储系统分析.pdf 网络代理缓存Squid存储系统分析.pdf

    Linux下Squid安装步骤

    目录 ...1.Net-snmp 获取与安装 1 2.Net-snmp 的配置 1 3.Net-snmp 常用命令 2 二、Squid 3 1.检查linux是否存在squid老版本 3 2.Squid 获取与安装 3 3.Squid 配置 4 ...9.Squid命中率分析 11 10.Squid 排错 12

    SQUID 原理分析,安装配置

    SQUID原理分析,安装,配置,使用手册。

    Awstats 7分析squid日志【安装+配置】

    Awstats 7分析squid日志【安装+配置】

    squid的cache功能的学习

    squid的cache功能的学习,还不完善,希望能对大家有所帮助。最近在学习linux 驱动和内核的相关代码,希望能相互交流!

    Linux搭建Squid透明代理及squid+icap环境

    Linux搭建Squid透明代理及squid+icap环境

    Linux+下Squid安装步骤

    1.Net-snmp 获取与安装 2.Net-snmp 的配置 3.Net-snmp 常用命令 Squid 1.检查linux是否存在squid老版本 2.Squid 获取与安装 3.Squid 配置 4.Squid 测试 ...9.Squid命中率分析 10.Squid 排错

    Squid中文权威指南

    13.2.5 access.log分析工具 13.3 store.log 13.3.1 转换文件号到路径名 13.4 referer.log 13.5 useragent.log 13.6 swap.state 13.7 轮转日志 13.8 隐私和安全 第14章 监视Squid 14.1 cache.log告警 ...

    基于linux的Squid代理服务器的架设分析.doc

    基于linux的Squid代理服务器的架设分析.doc

    Squid中文权威指南 最好的Squid指南

    Squid中文权威指南 Squid中文权威指南 Squid中文权威指南

    一款常用的 Squid 日志分析工具

    那么今天,给大家介绍一款常用的 Squid 日志分析软件,希望对有所帮助的同学在今后的日常工作中能够运用的上。 Sarg:全名:Squid Analysis Report Generator,是一款Squid日志分析工具,采用HTML的格式将用户所访问...

    SQUID-MIB.mib

    SQUID-MIB.mib. Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,...

    Squid The Definitive Guide

    Squid is the most popular Web caching software in use today, and it works on a variety of platforms including Linux, FreeBSD, and Windows. Written by Duane Wessels, the creator of Squid, Squid: The ...

    squid-squid中文文档

    squid可充当代理服务器,而对sian,netEase等大型的站点,squid又充当web加速器。我也是在网上找了很长一阵子才找到的,希望能给想学习squid的哥们有点帮助。

    squid文件上传大小配置

    squid文件上传大小配置

    Squid中文权威指南.rar

    本人在工作中维护着数台Squid服务器,多次参阅Duane Wessels(他也是Squid的创始人)的这本书,原书名是"Squid: The Definitive Guide",由O'Reilly出版。我在业余时间把它翻译成中文,希望对中文Squid用户有所帮助...

    Squid使用手册.rar

    Squid 是自由软件和合作项目。假如你觉得squid 有用,请考虑以下面一种或几种方法来回报该项目: 1.参与squid 用户讨论列表,回答问题和帮助新用户。 2.测试新版本,报告bug 或其他问题。 3.致力于在线文档和FAQ...

Global site tag (gtag.js) - Google Analytics