linux内核
dog250
这个作者很懒,什么都没留下…
展开
-
周日下雨,寂寥中读核
linux内核进程调度负载均衡不是一个复杂的机制,相反它很简单,如果没有理解,那么复习一下时序电路,复习一下状态机,呵呵,弄了半天,我感觉这些玩意儿的设计者好像一个人。 如果没有System.map,没有任何符号信息,还是人家的内核,那么调试内核的时候怎么办。我是这么办的,我在LD脚本中发现了一些信息,而且,我在.XX.YY中发现了信息,或者用圆珠笔把写到纸上,然后扔到网上,哈哈,再原创 2010-03-14 17:03:00 · 11738 阅读 · 6 评论 -
Linux3.5内核对路由子系统的重构对Redirect路由以及neighbour子系统的影响
几年前,我记得写过好几篇关于Linux去除对路由cache支持的文章,路由cache的下课来源于一次对路由子系统的重构,具体原因就不再重复说了,本文将介绍这次重构对Redirect路由以及neighbour子系统的影响。事实上,直到最近3个月我才发现这些影响是如此之大,工作细节不便详述,这里只是对关于开放源代码Linux内核协议栈的一些实现上的知识进行一个汇总,以便今后查阅,如果有谁也因此获益,则原创 2016-02-27 13:23:47 · 6586 阅读 · 1 评论 -
Linux3.5内核以后的路由下一跳缓存
在Linux3.5版本(包括)之前,存在一个路由cache,这个路由cache的初衷是美好的,但是现实往往是令人遗憾的。以下是陈列得出的两个问题:1.面临针对hash算法的ddos问题(描述该问题的文章已经汗牛充栋,不再赘述);2.缓存出口设备是p2p设备的路由项会降低性能。这些问题本质上是由于路由cache的查找方式和路由表的查找方式互不相容引起的。路由cache必须是精确的元组匹配,因此它必须原创 2016-03-05 17:27:20 · 9181 阅读 · 0 评论 -
Linux内核中网络数据包的接收-第一部分 概念和框架
与网络数据包的发送不同,网络收包是异步的的,因为你不确定谁会在什么时候突然发一个网络包给你,因此这个网络收包逻辑其实包含两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协议栈的两端,即网卡/协议栈边界以及协议栈/应用边界:网卡/协议栈边界:网卡通知数据包到来,中断协议栈收包;协议栈栈/应用边界:协议栈将数据包填充socket队列,通知应用程序有数据可读,应用程序负责接收原创 2016-01-16 15:26:51 · 14951 阅读 · 4 评论 -
关于ICMP Redirect路由的一个不是bug的bug
在新公司碰到的第一个网络问题竟然是关于重定向路由的,这个不常被关注的问题竟然花费了我整整一下午时间来整理,本文介绍Linux协议栈是如何对待重定向路由的。路由项的生成方式任何具备网络功能的设备在内部都有有一张路由表,该表指示数据包如何从该设备发出以及下一站发送到哪里。路由表由一项一项组成,每一项称为一条路由项,这些路由项有以下的生成方式:1.自动发现的路由项网卡启动并且配置上IP地址的时候,会自动原创 2015-11-22 14:31:10 · 8497 阅读 · 3 评论 -
多核心Linux内核路径优化的不二法门之-多核心平台TCP优化
本文可以作为《Linux转发性能评估与优化(转发瓶颈分析与解决方案)》的姊妹篇,这两篇文章结合在一起,恰好就是整个Linux内核协议栈的一个优化方案。事实上Linux协议栈本来就是面向两个方向的,一个是转发,更多的是本地接收。目前大量的服务器采用Linux作为其载体,更加体现了协议栈本地处理相对于转发的重要性,因此本文就这个问题扯两句,欢迎拍砖!0.声明:0).关于来源昨天就答应皮鞋厂老板了,只是原创 2015-09-23 23:03:00 · 12328 阅读 · 3 评论 -
多核心Linux内核路径优化的不二法门之-slab与伙伴系统
作为这个系列的第一篇,我先来描述一下slab系统。因为近些天有和同事,朋友讨论过这个主题,而且觉得这个主题还算比较典型,所以就作为第一篇了。其实按照操作系统理论来讲,进程管理应该更加重要些,按照我自己的兴趣来讲,IO管理以及TCP/IP协议栈会更加有分量,关于这些内容,我会陆续给出。 Linux内核的slab来自一种很简单的思想,即事先准备好一些会频繁分配,释放的数据结构。然而标准的s原创 2015-09-16 05:08:00 · 9127 阅读 · 4 评论 -
Linux内核中几个比较有意思的解释(进程调度算法,页面调度算法,非线性工作集)
1.O(1)调度器的时间计算公式与CFS调度器Linux 2.6.23之前普遍采用了O(1)调度器,它是一种基于优先级的时间片调度算法,所谓的O(1)只是它的一些精巧的数据结构使然,在不考虑动态补偿/惩罚的情况下,只要优先级确定,那么时间片就是固定的。2.6.23以后的CFS呢,它是一种基于权重的非时间片调度算法,进程每次执行的时间并不是固定的,而是根据进程数在一个准固定周期内按照其权重比例的时间原创 2015-09-26 12:31:34 · 8753 阅读 · 3 评论 -
Linux TCP实现优化的背后想法
想象一下当初为什么不让多个进程/线程在一个相同的IP地址和端口上侦听,很简单,这是因为TCP/IP模型将一个端口作为一个四层复用解复用的唯一标识,也就是一个四层地址,正如IP地址属于一个主机一样(属于一块网卡?),一个IP/端口对属于一台主机上一个特定的进程,它只是一个保证唯一性的静态标识。世界上不同的主机不能有相同的IP地址,一台主机上绑定特定IP地址的不同进程也不能有相同的端口,否则就不知道一原创 2015-09-25 00:03:33 · 7992 阅读 · 7 评论 -
当心!TCP本机客户端连接本机服务器
上周,在我们进行性能测试的时候,发现了一个问题。我们的服务器上启了一个redis服务端,侦听0.0.0.0的1234端口,同处在本机的另外一个进程会频繁发起到该服务端的短连接,结果导致了两个问题:1.大量的TIME_WAIT状态的连接;2.发起连接的进程的CPU占用率接近100%。这两个结果严重影响了我们网关的性能,在分析具体原因之前,首先做一个提倡,那就是:本机连接本机,首选UNIX域套接字而不原创 2015-09-27 23:07:30 · 10005 阅读 · 9 评论