当前位置: 技术问答>linux和unix
内核还是用户空间?高性能网络服务程序开发
来源: 互联网 发布时间:2016-05-21
本文导语: 这个程序用于输出以下两种数据: 1、磁盘文件输出。文件大小为几K到几百K,从磁盘读取后输出。最好是运行在内核模式。 2、缓存的数据,每个输出单位大小为几十字节到几十K,一共占用10GB内存。这些数据来源于...
这个程序用于输出以下两种数据:
1、磁盘文件输出。文件大小为几K到几百K,从磁盘读取后输出。最好是运行在内核模式。
2、缓存的数据,每个输出单位大小为几十字节到几十K,一共占用10GB内存。这些数据来源于数据库,而数据库运行在用户空间。
重要:小于512字节的数据输出占80%以上。
对于性能,假设每次输出大小为512字节,希望在2个CPU一共16个核心的系统上每秒能输出10万次,网卡流量100-500M。
应该作为内核模块还是用户空间程序,应该使用epoll实现还是基于底层协议实现,暂时没有头绪。现在想到的问题有这些:
1、对于输出磁盘文件,程序最好运行于内核空间,减少内核/用户空间复制和转换成本。
2、缓存的数据,需要考虑数据生成和数据输出。数据生成要从用户空间的数据库读取。
3、这个程序能不能作为内核模块实现。其中,程序需要使用10GB内存用于缓存数据。要读取用户空间的数据库。
4、如果在用户空间实现,要达到每秒10万次输出,会不会有困难。
5、如果分别开发一个内核模块和一个用户空间程序配合实现相关功能,这是解决了问题还是带来了问题。
6、主要性能瓶颈在哪里。
1、磁盘文件输出。文件大小为几K到几百K,从磁盘读取后输出。最好是运行在内核模式。
2、缓存的数据,每个输出单位大小为几十字节到几十K,一共占用10GB内存。这些数据来源于数据库,而数据库运行在用户空间。
重要:小于512字节的数据输出占80%以上。
对于性能,假设每次输出大小为512字节,希望在2个CPU一共16个核心的系统上每秒能输出10万次,网卡流量100-500M。
应该作为内核模块还是用户空间程序,应该使用epoll实现还是基于底层协议实现,暂时没有头绪。现在想到的问题有这些:
1、对于输出磁盘文件,程序最好运行于内核空间,减少内核/用户空间复制和转换成本。
2、缓存的数据,需要考虑数据生成和数据输出。数据生成要从用户空间的数据库读取。
3、这个程序能不能作为内核模块实现。其中,程序需要使用10GB内存用于缓存数据。要读取用户空间的数据库。
4、如果在用户空间实现,要达到每秒10万次输出,会不会有困难。
5、如果分别开发一个内核模块和一个用户空间程序配合实现相关功能,这是解决了问题还是带来了问题。
6、主要性能瓶颈在哪里。
|
你要是真的像把这东西做出来,建议你用点成熟的架构来做吧..
有钱的话,搞个网络处理器来做,里面的内核模块专门应对包的处理.
有钱的话,搞个网络处理器来做,里面的内核模块专门应对包的处理.