[CDN 技术] TCP_MEM_HIT 和 TCP_HIT 的性能到底相差多远
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2010/06/13/squid-tcp_mem_hit-tcp_hit.html
在内存中命中,使用 Squid 本身的机制来 Cache 文件,和文件系统本身的 Cache 机构时,Squid 内存 Cache 机构性能提高会有多少.
压力测试语句
./ab -c 100 -n 30000 "http://test.php-oa.com:81/4k.html?cct00003000"
测试用的 AB ,并发 100 打 3W 次压力,文件的大小是 4k 的小文件.使用 16 进制来随机生成文件名.这样来测试,为了保证有效性,我先前打了二次,不做为记录,只为了 Cache ,然后在 Squid 中配置大点的内存来存放这些小文件.
系统的配置,机器有点老.不好意思,哈哈
cache_mem 2048 MB maximum_object_size 409600 KB minimum_object_size 0 KB maximum_object_size_in_memory 4096 KB
1. TCP_MEM_HIT 时的数据
这是打出来的数据.当所有的 Object 都是内存命中时的性能,如果随机数,在少点,上 5k 是很容易的.这是每秒处理完的响应.
Time taken for tests: 6.979 seconds Complete requests: 30000 Failed requests: 0 Write errors: 0 Total transferred: 135908818 bytes HTML transferred: 122884096 bytes Requests per second: 4298.66 [#/sec] (mean) Time per request: 23.263 [ms] (mean) Time per request: 0.233 [ms] (mean, across all concurrent requests) Transfer rate: 19017.79 [Kbytes/sec] received
2.TCP_HIT时的数据
然后重起 Squid .因为重起 squid 时会给所有的数据保存到硬盘中,这时文件就不在会变成 TCP_MEM_HIT,只会是 TCP_HIT.然后在 使用 并发 100 打 3W 次压力.
Concurrency Level: 100 Time taken for tests: 8.915 seconds Complete requests: 30000 Failed requests: 0 Write errors: 0 Total transferred: 135934529 bytes HTML transferred: 122884096 bytes Requests per second: 3365.13 [#/sec] (mean) Time per request: 29.717 [ms] (mean) Time per request: 0.297 [ms] (mean, across all concurrent requests) Transfer rate: 14890.54 [Kbytes/sec] received
TCP_MEM_HIT 和 TCP_HIT 总结:
很明显的,当响应是TCP_MEM_HIT 时,量能打到4298.66 [#/sec] 和 TCP_HIT时3365.13 [#/sec] ,从流量上也能看出来.我担心是不是 I/O 影响了性了,在 TCP_HIT 时,使用 iostat 监控了多次硬盘,基本没有什么 I/O 操作,说明被文件系统本身 cache 到内存中了.



















第一次知道TCP_HIT的时候还可能是文件系统本身cache到内存~~~月初有一次iostat看cache磁盘几乎没操作的时候我还一直奇怪呢~~
好文,剖析的通俗易懂
在TCP_HIT也没有io操作的时候,区别只在于TCP_MEM_HIT少了一次从kernel态到user态的内存拷贝。其实MEM_HIT这种指标在当今已经没意义了,如果改成sendfile,那么没有io操作的情况下(也就是这篇博文测试用例的情况),能够获得比目前TCP_MEM_HIT更高的效率,如果再配成0 cache_mem还能节省下这些物理内存给fs用。
因为这个case里面,压力太低了,不到20M一秒的吞吐,硬盘表示毫无压力。
楼上的把squid改成基于sendfile了?公开源码吧,扬名立万啊
普通硬盘如果随机读 4 k 以下,能有 1-2M 的速度就相当不错了,时间都用在寻道上了。。。
你好,想请问一下,为什么Squid要设置成重启后磁盘的数据就不会加载到内存。
这样的话,按我的理解就是:只有从后端取到的数据会加入内存,而只有当内存使用达到限制时,才按memory_replacement_policy设置的策略删除内存中的冷数据,而原本就在磁盘缓存的数据就再也没有机会进入到内存中。只会利用到文件系统本身的cache层。
你的理解没错。所以我指得不会加载到内存,是不会加载到 Squid 管理的内存块中,但系统本身的 cache 还是会有。