存档

2013年2月 的存档

Socket选项系列之SO_LINGER

2013年2月24日 7 条评论 9,864 次浏览

SO_LINGER是nginx里用到的另外一个重要套接口选项(因为它涉及到的问题很重要),虽然它不是特定于TCP套接口的,但针对的仍然是面向连接的协议,因此就TCP而言,自然也是可以使用它,这里就统一以TCP为例(即下面所提到的套接口仍然都还是TCP套接口)来进行阐述。 当应用程序在调用close()函数关闭TCP连接时,Linux内核的默认行为是将套接口发送队列里的原有数据(比如之前残留的数据)以及新加入的数据(比如函数close()产生的FIN标记,如果发送队列没有残留之前的数据,那么这个FIN标记将单独产生一个新数据包)发送出去并且销毁套接口(并非把相关资源全部释放,比如只是把内核对象sock标记为dead状态等,这样当函数close()返回后,TCP发送队列的数据包仍然可以继续由内核协议栈发送,但是一些相关操作就会受到影响和限制,比如对数据包发送失败后的重传次数)后立即返回。这需要知道两点:第一,当应用程序获得close()函数的返回值时,待发送的数据可能还处在Linux内核的TCP发送队列里,因为当我们调用write()函数成功写出数据时,仅表示这些数据被Linux内核接收放入到发送队列,如果此时立即调用close()函数返回后,那么刚才write()的数据限于TCP本身的拥塞控制机制(比如发送窗口、接收窗口等等),完全有可能还呆在TCP发送队列里而未被发送出去;当然也有可能发送出去一些,毕竟在调用函数close()时,进入到Linux内核后有一次数据包的主动发送机会,即: tcp_close()... [阅读更多]

Socket选项系列之TCP_DEFER_ACCEPT

2013年2月24日 1 条评论 4,802 次浏览

学过计算机网络课程的人,应该都知道TCP协议有个连接状态转换图,也许对其整体详细不甚清楚,但至少对TCP握手协议有些印象。标准的TCP三次握手(本节仅考虑这种情况,对于四次握手等其他情况,可以参考RFC... [阅读更多]

Socket选项系列之TCP_CORK

2013年2月24日 没有评论 3,745 次浏览

从上一节的内容可以看到,选项TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去,而选项TCP_CORK与此相反,可以认为它是Nagle算法的进一步增强,即阻塞数据包发送,具体点说就是:TCP_CORK选项的功能类似于在发送数据管道出口处插入一个“塞子”,使得发送数据全部被阻塞,直到取消TCP_CORK选项(即拔去塞子)或被阻塞数据长度已超过MSS才将其发送出去。举个对比示例,比如收到接收端的ACK确认后,Nagle算法可以让当前待发送数据包发送出去,即便它的当前长度仍然不够一个MSS,但选项TCP_CORK则会要求继续等待,这在前面的tcp_nagle_check()函数分析时已提到这一点,即如果包数据长度小于当前MSS... [阅读更多]

Socket选项系列之TCP_NODELAY

2013年2月24日 没有评论 3,683 次浏览

在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Nagle algorithm),这是使用它的发明人John Nagle的名字来命名的,John... [阅读更多]

使用systemtap调试Linux内核

2013年2月24日 1 条评论 5,023 次浏览

最近在公司看Linux内核的nmi死锁检测功能的实现机制,当然,是因为它变了,所以我才看的,简单来说就是在红帽的某牛提交了一个内核patch:new nmi_watchdog using perf... [阅读更多]

如何将word里面的自动编号变为正文文本

2013年2月24日 没有评论 5,176 次浏览

把内核代码放到Word文档里,为了标识细节,一般我都会利用自动编号把代码各行的行号弄出来,而利用自动编号非常方便,它能帮我把大段大段的代码行号自动标记上,但有个问题就是,如果某个Word文档里代码非常的多,那些自动编码的行号偶尔会自动发生变化,特别是在进行文字拷贝或某些其他特殊操作时,估计是这些特殊操作影响到Word文档的自动编号功能,触发它重新计算就乱了。最好的解决办法是将这些自动编号数字转变为正文文本,这样一劳永逸,以后也不用担心它们什么时候会自动变化。 利用Word宏能做到这一点,具体操作如下(以Word... [阅读更多]

分类: 其它杂项 标签: ,

Intel 性能监视器

2013年2月23日 没有评论 5,057 次浏览

全文来自Intel开发者手册:Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming... [阅读更多]

Linux线程相关概念

2013年2月6日 没有评论 4,117 次浏览

POSIX Threads,通常简称为Pthreads,它是指开放系统接口标准―POSIX线程,1995年规范的POSIX.1c,即线程扩展标准(IEEE Std... [阅读更多]

分类: *nix技术, 应用程序 标签: ,

Linux glibc源码升级

2013年2月6日 1 条评论 4,363 次浏览

1,准备工作:准备好系统,下载好glibc源代码,确保系统提供的gcc,make等满足glibc的要求(glibc的INSTALL文件内有明确说明)。 # uname -a Linux localhost.localdomain 3.7.0 #1 SMP Wed Jan 9 04:46:12 CST 2013... [阅读更多]

分类: *nix技术, 应用程序 标签: ,

关于ELF的辅助向量

2013年2月5日 没有评论 3,218 次浏览

elf是Linux系统下最通用的可执行程序的文件格式,关于elf文件的加载与动态链接已很多的相关资料,而本文尝试着重介绍一下其中的一个点,即辅助向量(Auxiliary... [阅读更多]