我的新blog地址 纠结了好久,终于弄了个独立blog。地址是:[url=http://www.pagefault.info]这里[/url]如果您有订阅我的blog,希望您能更改订阅地址,因为这里以后就不更新了,谢谢!...
Receive packet steering patch详解 Receive packet steering简称rps,是google贡献给linux kernel的一个patch,主要的功能是解决多核情况下,网络协议栈的软中断的负载均衡。这里的负载均衡也就是指能够将软中断均衡的放在不同的cpu核心上运行。简介在这里:http://lwn.net/Articles/362339/linux现在网卡的驱动支持两种模式,一种是NAPI,一种是...
内核中拥塞窗口初始值对http性能的影响分析 这个是google的人提出的概念,那就是对tcp的拥塞窗口的初始值进行增大可以显著的提高http的性能,这个主要是针对tcp的slow start(我前面的blog有介绍)的.下面是相关的paper和ppt:paper: http://code.google.com/speed/articles/tcp_initcwnd_paper.pdfppt:http://www.ietf...
nginx中sub_request的处理 首先来看subrequest的处理。什么是subrequest,顾名思义,那就是子请求,也就是在当前的一个请求中nginx再生成一个请求。比如在nginx的HttpAddition这个filter,就有用到subrequest。这里要注意,一个subrequest是当父reuest执行完毕后才会被执行,并且它会将所有的需要进行的handler phase重新执行一遍(这个我们后面的...
nginx中handler的处理(二) 这次我们来看各个phase的checker的处理。首先我们要弄明白一个事情,那就是在nginx中,一般来说,都是在NGX_HTTP_CONTENT_PHASE中调用outputfilter的,也就是说filter是在handler中调用的,这样看来只能有一个handler能够执行outputfiler.所以说在写nginx的handler模块的话,要注意不同的phase的返回值代表的不同意...
nginx中handler的处理(一) nginx中的处理一个http的请求分为了8个phase,分别是下面几个阶段.其中特别要注意就是几个rewrite阶段。[code="java"]typedef enum {//读取请求phase NGX_HTTP_POST_READ_PHASE = 0,//接下来就是开始处理//这个阶段主要是处理全局的(server block)的rewrite。 ...
nginx中的output chain的处理(二) 接着上次的分析继续,这次我们来看filter链中最关键的一个模块,那就是ngx_http_copy_filter_module模块,这个filter主要是用来将一些需要复制的buf(文件或者内存)重新复制一份然后发送给剩余的body filter,这里有个很重要的部分,那就是在这里nginx的剩余的body filter有可能会被调用多次,这个接下来我会一一阐述的。先来看它的初始化函数:[...
nginx中锁的设计以及惊群的处理 nginx中使用的锁是自己来实现的,这里锁的实现分为两种情况,一种是支持原子操作的情况,也就是由NGX_HAVE_ATOMIC_OPS这个宏来进行控制的,一种是不支持原子操作,这是是使用文件锁来实现。首先我们要知道在用户空间进程间锁实现的原理,起始原理很简单,就是能弄一个让所有进程共享的东西,比如mmap的内存,比如文件,然后通过这个东西来控制进程的互斥。说起来锁很简单,就是共享一...
nginx中的output chain的处理(一) 这里我们详细来看ngx_linux_sendfile_chain方法,这个函数也就是nginx的发送函数。一般来说,我们最终都会调用这个函数来发送最终的数据,因此我们来着重分析这个函数,这里主要就是对buf的一些参数的理解。来看函数原型:[code="java"]ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t...
nginx的filter的处理 随笔拿一个nginx的filter模块来看,gzip模块,来看它的初始化。[code="java"]static ngx_http_output_header_filter_pt ngx_http_next_header_filter;static ngx_http_output_body_filter_pt ngx_http_next_body_filter;st...
nginx中request请求的解析 ngx_http_init_request 中初始化event 的handler 为ngx_http_process_request_line,然后首先调用ngx_http_read_request_header来读取头部,然后就是开始调用函数ngx_http_parse_request_line对request line进行解析。随后如果解析的url是complex的话,就进入complex...
卖书了 1 代码之美 全新 603 c++网络编程卷2 全新 308 tcp/ip 详解 第二卷中文版 全新 60这里基本全新 就是 有在里面画一些线。。价钱都好商量,只限杭州市内。 有意向给我发站内消息或者给我留个联系方式,我联系你。...
linux 内核tcp拥塞处理(一) 这次我们来分析tcp的拥塞控制,我们要知道协议栈都是很保守的,也就是说只要有一个段被判断丢失,它就会认为发生了拥塞.而现在还有另一种,也就是路由器来通知我们发生了拥塞,这里ip头还会有一个ECN的位(准确的说是两位),来表示已经发送拥塞,不过这里要注意首先收到ECN的是接受方,可是真正需要被通知的却是发送方,因此当接受方收到ECN之后,用下一个ack来通知发送方有拥塞发生了,然后发送方才会做出响应...
内核tcp协议栈SACK的处理 上一篇处理ack的blog中我们知道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理。这篇blog就主要来介绍内核如何处理sack段。SACK是包含在tcp的option中的,由于tcp的头的长度的限制,因此SACK也就是最多包含4个段,也就是32个字节。我们先来看tcp中的SACK段的表示:[code="java"]struct tcp...
09年看的书,电影以及听过的音乐 其实有一些是很早就看过或听过的,只不过今年加进去了,还有一些书就是没看完,比如haskell那本。。[img]http://dl.iteye.com/upload/attachment/194684/a030715f-6df4-3953-ae11-722f7d11dac8.jpg[/img][img]http://dl.iteye.com/upload/attachment...
内核tcp的ack的处理 我们来看tcp输入对于ack,段的处理。先是ack的处理,在内核中,处理ack段是通过tcp_ack来进行的。这个函数主要功能是:1 update重传队列,并基于sack来设置skb的相关buf。2 update发送窗口。3 基于sack的信息或者重复ack来决定是否进入拥塞模式。在看之前我们要知道tcp是累积确认的。为了解决带来的缺点,我们才需...
内核处理time_wait状态详解 这次来详细看内核的time_wait状态的实现,在前面介绍定时器的时候,time_wait就简单的介绍了下。这里我们会先介绍tw状态的实现,然后来介绍内核协议栈如何处理tw状态。首先我们要知道在linux内核中time_wait的处理是由tcp_time_wait这个函数来做得,比如我们在closing状态收到一个fin,就会调用tcp_time_wait.而内核为time_wait状态的...
linux已经不存在惊群现象 惊群也就是指多个进程阻塞在accept,当有连接完成,会唤醒所有进程。经过测试,发现现在的内核已经修复了这个问题,当有多个进程阻塞在accept,只会唤醒一个进程。下面这个是一篇论文,就是讲这个问题的。http://www.usenix.org/event/usenix2000/freenix/full_papers/molloy/molloy.pdf这里会先测...
tcp协议栈处理各种事件的分析 首先我们来看socket如何将一些状态的变化通知给对应的进程,比如可读,可写,出错等等。先来看sock结构中这几个相关域:[code="java"]struct sock {..........................wait_queue_head_t *sk_sleep;.....................................void ...
linux内核sk_buff的结构分析 我看的内核版本是2.6.32.在内核中sk_buff表示一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head,在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头,现在在2.6.32里面这个域已经被删除了。而sk_buff的内存布局可以分作3个段,第一个就是sk_buff自身,第二个是linear-data buff,第三个是...