linux早期内核的khttpd服务器--策略污染机制

简介:
linux内核差一点就走进了windows的为需求而升级的发展道路从而偏离了它原来 的“只提供机制不提供策略”的道路,那就是在2.4内核时期,内核提供了一个叫做khttpd的内核级别的web服务器,当时linux的性能还不是很 好,比如进程调度算法还是O(n)的方式,而且不能有效利用多处理器的优势,线程的实现还是很拙劣,很多方面没有达到posix的高性能指标,因此当时的 开发者可能就钻进了解决性能瓶颈的牛角尖上,鉴于apache服务器很多都运行在linux上,而且web服务是如此的普遍和重要,因此性能瓶颈也就主要 是apache的性能瓶颈,因此面对这个如此“特化”而又如此不能不管的需求,开发者们只好就事论事地将web服务器单独加速,也就是在内核中实现一个 web加速服务,如果按照这条路走下去,linux最终还会在内核实现ftp,甚至任何用户的需求性的策略,还会把图形处理搬到内核,像windows NT做的那样,不过linux到了2.6内核以后重新找到了自己的坐标,因为没有必要再用那种特化需求的方式解决局部的性能瓶颈了,2.6内核的很多机制 都将性能提高到一个新的水平,以web服务器为例,经测试证明2.6下的web服务器完全比内核实现的khttpd加速服务拥有更好的性能,这证明 linux只提供机制是很好的,用户在这种机制上实现的策略性能并不差,这样责任便分来了,如果说用户的程序在用户使了大劲后性能还是不够好,那么就要看 看内核是否可以提供更好的机制。2.6内核的所作所为完全阻止了开发者们再在某一个方面进行优化,2.6内核的进步是整体的,比如新的调度算法,比如 2.6.17中的splice和tee系统调用,这些都使khttpd没有了存在下去的必要。 
策略怎么会污染机制呢?想象一下建筑,早先的是混砖式的结构,现在的大厦都成了全框架结构,看看有何不同,住混砖结构房屋的人可能都为装修犯过愁,因为为 了使客厅显得更大,那么就必须打掉一堵墙,可是那堵墙偏偏是承重墙,于是...现在的框架结构就没有这个问题,屋子里除了几个大柱子就没有别的什么了,你 想垒墙就垒墙,想打掉就打掉,这就是机制和策略,框架就是机制,而内部的墙就是策略,如果你把墙垒到了框架里面,势必会影响美观,也会带来不利影响,你将 再次承受承重墙的压力。在操作系统中,尽量不要去通过内核完成一些需求,内核的作用就是为全体进程服务而不是满足用户的个别需求,尽量在用户空间实现需 求,因为这才是需求的实现地,你在内核实现一个你自己进程的需求,如果别的进程不需要这个需求,那人家还是要承受你这个承重墙的压力,只有一个影响全系统 的需求才可以在内核实现,比如杀毒程序,比如防火墙。而khttpd仅仅是一个web加速服务,根本没有资格进入内核独占一地。 
在一篇叫做《内核比较:2.4和2.6上的Web服务》的文章中列举了2.6内核的几个新特性:1.超线程支持,多处理支持无论何时都是不错 的;2.NUMA支持;3.线程改进,在内核中增强了posix的线程支持,比如使用NPTL,撤销了管理线程;4.O(1)调度程序,这个就不多说 了;5.I/O的改进,主要是“2.4 中的全局 I/O 请求锁不再使用。在 2.6 中块 I/O 缓冲区(kiobuf)允许 I/O 请求可以比 PAGE_SIZE 大。”;6.异步I/O,这个也不说了;7.这个是比上述6点更高一层次的,就是splice和tee的加入,这俩系统调用可以在用户空间操作内核,其实 就是一个一个内核缓冲的handle。以上7点使khttpd黯然退却,没有必要继续生存。 
无论如何,我还是比较欣赏khttpd本身的设计的,很简单,它的代码框架就是:1.启动一些子内核线程在监听80端口(要看内核的khttpd是主 web服务器还是辅web服务器)的套接字上进行accept,并且实时跟踪子内核线程的数量,根据策略进行数量保持,也就是少了创建新的,多了就干 掉;2.子内核线程accept客户浏览器的连接,对于每一个连接进行处理;3.如果内核可以处理,那么直接将结果回写给客户端套接字;4.如果内核处理 不了,那么就呼叫用户端的套接字进行处理,其实就是交给了用户的web服务器。这些流程间涉及到一些技巧,还是看看代码吧: 
void NeedSpawn(struct socket *sock) 

{



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274021

相关文章
|
10天前
|
安全 Linux 测试技术
Intel Linux 内核测试套件-LKVS介绍 | 龙蜥大讲堂104期
《Intel Linux内核测试套件-LKVS介绍》(龙蜥大讲堂104期)主要介绍了LKVS的定义、使用方法、测试范围、典型案例及其优势。LKVS是轻量级、低耦合且高代码覆盖率的测试工具,涵盖20多个硬件和内核属性,已开源并集成到多个社区CICD系统中。课程详细讲解了如何使用LKVS进行CPU、电源管理和安全特性(如TDX、CET)的测试,并展示了其在实际应用中的价值。
|
9天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
23天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
72 15
|
26天前
|
运维 监控 Linux
推荐几个不错的 Linux 服务器管理工具
推荐几个不错的 Linux 服务器管理工具
123 6
|
1月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
1月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
1月前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
1月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
1月前
|
负载均衡 算法 Linux
深入探索Linux内核调度机制:公平与效率的平衡####
本文旨在剖析Linux操作系统内核中的进程调度机制,特别是其如何通过CFS(完全公平调度器)算法实现多任务环境下资源分配的公平性与系统响应速度之间的微妙平衡。不同于传统摘要的概览性质,本文摘要将直接聚焦于CFS的核心原理、设计目标及面临的挑战,为读者揭开Linux高效调度的秘密。 ####
46 3
|
1月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。