Linux TCP/IP协议栈的通用编码模式
转自:http://blog.chinaunix.net/u/26185/showart_475934.html
和其他内核功能一样,每个网络功能都是内核成员中的一个。因此,它必须合理且公平的使用内存,
CPU和其他共享资源。绝大多数功能并非内核中一段独立的程序,而是根据该功能而或多或少的与内核中其他部分相互影响。因此它们总是试图,尽可能的,使用
类似的体系结构来实现类似的功能。
对许多内核组件来说有些需求是通用的,比如为同一数据结构分配好几个实例,或者跟踪一个数据结构的参考以避免不安全的内存重分配,等等。下面我们来看linux解决这些需求的一些通用的方法。我们也会谈到在查看内核编码时可能遇到的通用的编码技巧。
1.缓存
内核使用kmalloc和kfree来分配和释放内存。这两个函数的使用方法和用户空间的函数 malloc 和free的使用方法类似.
一个内核组件通常需要分配一个数据结构的多个实例。如果分配和释放频繁发生,相关内核组件的初始化函数(比如路由子系统中的fib_hash_init函数)通常会分配一个特殊的内存缓存以加速内存分配。当一个内存块释放时,它会被返回给与分配时相同的内存缓存。
以下是一些需要内核来维护内存缓存的网络数据结构:
Socket buffer descriptors
这个缓存,由net/core/sk_buff.c中的skb_init分配,它用于分配sk_buff结构。sk_buff结构可能是网络子系统中分配和释放频率最高的数据结构。
Neighboring protocol mappings
邻居协议使用内存缓存来分配neighbour结构,这个结构保存L3到L2的地址映射关系。
Routing tables
路由代码使用两个内存缓存来分配两种数据结构,这两种数据结构定义了路由表。
以下是使用内存缓存时会用到的一些函数:
kmem_cache_create
kmem_cache_destroy
建立或销毁缓存 .
kmem_cache_alloc
kmem_cache_free
从内存缓存中分配或释放一个对象。它们通常会在一个包装函数中被调用,这个包装函数在更高的层次上处理分配和释放的请
求。比如:kfree_skb函数处理释放sk_buff的请求,但是只有在所有对此结构的引用释放之后并且相关的子系统(比如,防火墙)已执行了清除操
作之后,才调用kmem_cache_free释放这个sk_buff。
从一个给定的内存缓存中能够分配多少个实例的数量限制通常在kmem_cache_alloc的包装函数中指定,但是有时也可以通过/proc文件系统中的参数来调整。
2. 缓存和哈希表
使用缓存来提升性能的技巧很常见。在网络代码中,有L3到L2映射的缓存(比如IPV4中的ARP缓存),路由表缓存,等
相关文档:
MYSQL安装
//解压编译安装
# tar xzvf mysql-5.0.27.tar.gz
# cd mysql-5.0.27
# ./configure -prefix=/home/redadmin/mysql
# make
# make install
# cd /home/redadmin/mysql/
# cp share/mysql/my-medium.cnf ./
# mv my-medium.cnf my.cnf
// my.conf文件修改
# vi my.cnf
修改前:
port &nb ......
It's actually an application named <em><strong>recordmydesktop</strong></em>, which can be installed by <strong>sudo apt-get install recordmydesktop</strong>.
There are various kinds of purpose to use, but for me, I would like to present or show some mock-up to o ......
1.添加rpm fusion源
rpm -ivh
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
2.导入rpm fusion仓库的密钥
rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms
3.修改密钥文件
......
ssh常用命令
目录:
1. Basic Instructions /基本指令
2. wget /下载工具
3. Crontab /定时任务
4. tar/tar.gz /压缩文件
5. vi /编辑器
1. Basic Instructions基本操作命令
通常来说,使用"$[Instructions] --help"可以获得以下各个命令[instructions]的帮助,包含其参数列表的定义。
-ls 列出当前文件夹 ......