同样思路解决不同的问题,集大成者
2015-09-24 09:25
302 查看
1.BFS调度器与O(1)调度器
O(1)调度器采用二级分类,第一级是CPU,即每一个CPU一个队列,第二级是优先级,每CPU队列又细分为140个优先级队列。第一级采用负载均衡调度,第二级采用优先级调度。虽然很清晰,但是要加入“小手段”来补偿/惩罚。本质上CFS调度器也一
样,只是采用了红黑树以及新增了一个虚拟时钟层屏蔽了补偿/惩罚操作。
BFS调度器同样采用二级队列,第一级是优先级分类,第二级是个简单对的队列,和CPU无关。第一级其实只有两类,实时和普通,针对普通优先级直接掉入第二级链表遍历,链表元素基于到期时间排队,因此欺骗了O(n)!
2.iptables与nf-HiPAC
iptables规则作用于每一个数据包的行为是一条一条遍历,直到匹配。所以它的执行是O(n)的,然而nf-HiPAC采用了基于match而不是基于rule的排列,整合成了树型结构,直接下降到了log级别。3.我的TCP优化与fastsocket
fastsocket本质上依然是让socket基于CPU亲和绑定或者乱蹦乱跳,而只要拉CPU入伙,让CPU全部参与进来,就可以分割socket本身和TCP连接处理。
TCP连接处理完成成为内核的一部分,类似softirqd,工作队列那样,而不再是socket的一部分。
4.DxR与DxR Pro++
DxR本质上依然是用IP地址匹配前缀找到nexthop,而如果将nexthop作为基准,数据结构就可以完全散列开来,可以实现O(1)查询。我的DxR
Pro++采用了继续分割区间的方式让其对应到nexthop,区间和nexthop的对应是一对多的关系而不是传统查询中区间和nexthop多多对一
的关系。
传统方案中,一个区间对应唯一的nexthop,这就是我们要查找的。而DxR Pro++中,一个区间可以对应多个nexthop,我们只需要一个简单的索引就可以得到一个数据包到底匹配哪个nexthop。
5.UNIX文件抽象与IPC
还纠结为什么UNIX没有把网卡抽象成文件吗?事实上UNIX将网络通信看成了对等的IPC而不是CPU到设备的不对等的IO,其IO层面上的语义由socket取代。6..........
相关文章推荐
- JAVA 学习关于 类
- 关于手机框架Framework7使用总结
- C#委托(delegate)简单示例:在两个form之间传递数据
- 黑马程序员——Java语言基础:多线程
- Codeforces Round #321 (Div. 2) 580B Kefa and Company(贪心 + 二分)
- 同样思路解决不同的问题,集大成者
- 【转】一个FAE(AE)的体会和大家交流
- sqlserver 开窗函数分页
- 前端事件系统(一)
- jQuery实现的经典竖向伸缩菜单效果代码
- 自定义控件 仿应用宝 管理界面的标题栏缩放效果
- hdu 4788 Hard Disk Drive
- 魅族的品牌策略
- VirtualBox虚拟机网络设置(四种方式)
- codeforces#321 B(排序+二分)
- Resharper 8.2 注册码
- 源码编译搭建LAMP
- iOS开发笔记--iOS 学习资料整理
- JS重新加载当前页面
- python入门2