kernel
文章平均质量分 79
与时俱进2014
这个作者很懒,什么都没留下…
展开
-
linux poll机制
POLL操作1、POLL运行过程:poll是一个系统调用,其内核入口函数为sys_poll,sys_poll差点儿不做不论什么处理直接调用do_sys_poll,do_sys_poll的运行过程能够分为三个部分: 1,将用户传入的pollfd数组复制到内核空间,由于拷贝操作和数组长度相关。时间上这是一个O(n)操作,这一步的代码在do_sys_poll中包含从函数開始到调用do转载 2017-08-31 22:13:21 · 558 阅读 · 0 评论 -
NAPI
前言:NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据,(类似于底半(bottom-half)处理模式);从我们在实验中所得到的数据来看,在随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用转载 2014-11-20 11:13:29 · 1005 阅读 · 0 评论 -
linux RFS
随着单核CPU速度已经达到极限,CPU向多核方向发展,要持续提高网络处理带宽,传统的提升硬件设备、智能处理(如GSO、TSO、UFO)处理办法已不足够。如何充分利用多核优势来进行并行处理提高网络处理速度就是RPS解决的课题。以一个具有8核CPU和一个NIC的,连接在网络中的主机来说,对于由该主机产生并通过NIC发送到网络中的数据,CPU核的并行性是自热而然的事情: 问题主转载 2014-11-20 09:32:02 · 1382 阅读 · 3 评论 -
linux proc
Seq_file File System针对proc文件的不足而诞生了Seq_file。Seq_file的实现基于proc文件。使用Seq_file,用户必须抽象出一个链接对象,然后可以依次遍历这个链接对象。这个链接对象可以是链表,数组,哈希表等等。编程接口Seq_file必须实现四个操作函数:start(), next(), show(), stop()。struct seq转载 2014-11-19 12:28:29 · 944 阅读 · 0 评论 -
关于netfiler中比较详细的解释
http://bbs.chinaunix.net/thread-4082396-1-1.html转载 2014-10-13 17:36:03 · 937 阅读 · 0 评论 -
xt_limit
转载▼标签: iptables limit limit-burst it分类: linux系统从iptables指南上看出limit和limit-burst最初不是拿来限速的。是拿来限制日志记录的次数的(iptables的logging功能),比如一秒1w个包,通过iptables的匹配了l转载 2014-11-12 10:07:46 · 960 阅读 · 0 评论 -
内核网络数据结构
struct sk_buff { /* These two members must be first. */ struct sk_buff *next; struct sk_buff *prev; struct sock *sk; ktime_t tstamp; str原创 2014-09-21 23:21:13 · 692 阅读 · 0 评论 -
linux中断处理浅析
最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~第一阶段--获取中断号每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序.在进入中断服务程序时, CPU已经自动禁止了本CPU上的中断响应, 因为CPU不能假定中断服务程序是转载 2013-12-26 14:08:21 · 623 阅读 · 0 评论 -
ptype_base/ptype_all(内核2.6.32)
在数据包接收过程的那篇笔记中可以知道,在数据包的处理函数netif_receive_skb中,会先看ptype_all中是否有注册的协议,如果有,则调用相应的处理函数,然后再到ptype_base中,找到合适的协议,将skb发送到相关协议的处理函数.比如ip协议(ip_rcv)或者arp(arp_rcv)等等.此篇笔记讲的是有关ptype_all和ptype_base的相关知识点.ptyp转载 2013-12-25 16:47:27 · 1499 阅读 · 0 评论 -
netfilter位于内核的那一层
Netfilter 概述 Netfilter/IPTables 是 Linux2.4.x 之后新一代的 Linux 防火墙机制,是linux内核的一个子系统。 Netfilter 采用模块化设计,具有良好的可扩充性。其重要工具模块 IPTables 从用户态的 iptables 连接 到内核态的 Netfilter 的架构中 , Netfilter 与 IP 协议栈是无缝契合转载 2013-12-19 09:44:30 · 4101 阅读 · 0 评论 -
yield , sleep, wait
从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。或者当前正在被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。sleep方法不推荐使用,可用wait。线程退出最好自己实现,在运行状态转载 2013-12-19 09:13:19 · 570 阅读 · 0 评论 -
watchdog
Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备,就会导致在内核中启动一个 1分钟的定时器,此后,用户空间程序需要保证在 1分钟之内向这个转载 2013-11-15 09:15:04 · 1042 阅读 · 0 评论 -
内核内存检测
Linux 内核内存检测工具 - Kmemcheck本文是 Linux 内核内存检测工具系列中的一篇,主要分析了 Kmemcheck 的原理,配置以及它的典型应用。读者在阅读完本文之后,能轻松地学会怎样利用 Kmemcheck 来对内核程序进行检测,同时也能从 Kmemcheck 的设计原理中得到一些启发。前言访问非法的内存地址(如访问未初始化的内存,访问已经释放的内存转载 2013-11-14 11:19:09 · 1043 阅读 · 0 评论 -
QoS技术中令牌桶算法实现方式比较
[摘要] 令牌桶算法是目前IP QoS中最常采用的一种流量测量方法,广泛应用于约定访问速率技术、通用流量整形技术以及物理接口总速率限制等技术中。IETF RFC 建议规范了单速率三色标记和双速率三色标记两种令牌桶算法,在桶的构成、令牌添加和报文处理流程方面前者较后者简单,成为目前业界比较常用的流量标记方式。在实际应用中,应针对不同的流量特征选择恰当的标记方式。[关键词] 令牌桶;单速率转载 2014-11-20 12:26:18 · 12718 阅读 · 1 评论 -
Linux的NAPI方法收包
NAPI和传统收包方法的区别是:NAPI可以进一次中断收很多次的包,但是传统方法进一次中断后将包放到local cpu的softnet_data的input_queue,之后就退出中断。 一、传统方法 进入处理程序后,首先从物理设备中将数据分组拷贝到内存中,然后分组是否合法,之后分配一个skb组包,然后调用netif_rx(skb)将包放入到softnet_data的i转载 2015-01-21 12:03:53 · 1104 阅读 · 0 评论 -
initcall的执行顺序
Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序 #define pure_initcall(fn) __define_initcall("0",fn,0)#define core_initcall(fn) __define_initcall("1",fn,1)#define core_initc转载 2015-11-18 14:56:02 · 957 阅读 · 0 评论 -
比较kmalloc/vmalloc/get_free_pages
对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。内核空间中,从3G到vmall转载 2015-11-18 16:24:49 · 549 阅读 · 0 评论 -
linux rcu
linux内核 RCU机制详解分类: Linux2013-11-11 10:04 2585人阅读 评论(0) 收藏 举报目录(?)[-] 宽限期 订阅发布机制 数据读取的完整性 小结 简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发转载 2015-09-22 14:34:12 · 1061 阅读 · 0 评论 -
内存屏障
摘要:本文主要讲述linux如何处理ARM cortex A9多核处理器的内核同步部分。主要包括其中的内存屏障、原子变量、每CPU变量。自旋锁、信号量、complete、读写自旋锁、读写信号量、顺序锁、RCU放在后文介绍。法律声明:《LINUX3.0内核源代码分析》系列文章由谢宝友(scxby@163.com)发表于http://xiebaoyou.blog.chinaunix.net,文转载 2015-08-01 12:16:14 · 2928 阅读 · 0 评论 -
网桥
原文地址:(zz)Linux-网桥原理分析(一) 作者:yinguochun1234目 录1..... 前言2 网桥的原理2.1 桥接的概念2.2 linux的桥接实现2.3 网桥的功能3 网桥的配置4 网桥的实现4.1转载 2015-07-17 15:35:50 · 900 阅读 · 0 评论 -
VLAN
VLAn?VLAN(Virtual LAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。在此让我们先复习一下广播域的概念。广播域,指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能够直接通信的范围。严格地说,并不仅仅是广播帧,多播帧(Mul转载 2015-07-14 17:11:21 · 580 阅读 · 0 评论 -
msleep,mdelay/udela
经常要用到延迟函数:msleep,mdelay/udelay.虽然msleep和mdelay都有延迟的作用,但他们是有区别的.1.)对于模块本身mdelay是忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间.msleep是休眠函数,它不涉及忙等待.你如果是msleep(10),那实际上延迟的时间,大部分时候是要转载 2015-05-20 10:18:39 · 794 阅读 · 0 评论 -
Linux-网桥原理分析 http://biancheng.dnbcw.info/linux/244269.html
目 录1..... 前言... 62 网桥的原理... 72.1 桥接的概念... 72.2 linux的桥接实现... 82.3 网桥的功能... 93 网桥的配置... 104 网桥的实现... 104.1转载 2015-05-07 09:44:13 · 1084 阅读 · 0 评论 -
等待队列
本文转自 reille博客: http://velep.com/archives/815.html等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结转载 2015-05-12 09:17:23 · 843 阅读 · 0 评论 -
内核定时器
1.基本概念在某些场景下,我们需要在特定的时间后做某些动作,但是又不想一直等待而浪费CPU,这个时候定时器是非常合适的机制。定时器用于在将来的某个时间点执行某个函数以完成特定的任务。内核定时器告诉内核在指定的时间点使用特定的参数来调用特定的函数。定时器是异步运行于其注册者的,定时器运行时,注册该定时器的任务可能在休眠也可能在其它处理器上运行,甚至可能已经退出。linux中内核定时器是基转载 2015-03-30 16:02:27 · 1098 阅读 · 0 评论 -
netfilter NAT
内核版本:2.6.121.链接跟踪 conntrack1.1.netfilter框架5个链:NF_IP_PRE_ROUTING:数据包进入路由表之前NF_IP_LOCAL_IN:通过路由表后目的地为本机NF_IP_FORWARD:通过路由表后,目的地不为本机NF_IP+LOCAL_OUT:由本机产生,向外转发NF_IP_POST_ROUTIN转载 2015-03-26 15:26:50 · 968 阅读 · 0 评论 -
linux ALIGN
#define ALIGN(x,a) (((x)+(a)-1)&~(a-1)) 就是以a为上界对齐的意思。举个例子4k页面边界的例子,即a=4096:如果x = 3888;那么以上界对齐,执行结果就是4096。如果x = 4096;结果是4096. 如果x = 4222; 则结果为8192. 另外还有一种以下界对齐的方式 #define ALIGN(x,a)转载 2015-03-25 11:12:19 · 1775 阅读 · 0 评论 -
jiffies
全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。 系统运行时间以秒为单位,等于jiffies/Hz。注意,jiffies类型为无符号长整型(unsigned long),其他任何类型存放它都不正确。将以秒为转载 2013-11-07 10:10:43 · 5334 阅读 · 0 评论 -
常见的Linux内核中内存分配
1.原理说明 Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示四级页表分别为: * 页全局目录(Page Global Directory) * 页上级目录(Page Upper Directory) * 页中间目录(Pag转载 2013-10-30 13:54:22 · 6340 阅读 · 0 评论 -
create_proc_read_entry(), create_proc_entry() | 创建 /proc 文件
reate_proc_read_entry(), create_proc_entry() | 创建 /proc 文件说明:name : 要创建的文件名;mode : 文件掩码,为 0 则按照系统默认的掩码创建文件。base : 指定该文件所在的目录,如果为 NULL,则文件被创建在 /proc 根目录下。read_proc : 实现该文件的 read转载 2013-09-03 11:19:21 · 1016 阅读 · 0 评论 -
自旋锁
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yunsongice/archive/2010/05/18/5605264.aspx加锁(locking)是一种广泛应用的同步技术。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把“锁”。由锁机制保护的资源非常类似于限制于房间内的资源,当某人进入房间时,就把门锁上。如果内核控制路径希望访问资源转载 2013-09-03 22:37:34 · 649 阅读 · 0 评论 -
rcu
众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,也就说获得锁的开销转载 2013-09-03 22:28:02 · 767 阅读 · 0 评论 -
netfilter内核态与用户态 通信 之 sockopt
用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单.缺点就是使用 copy_from_user()/copy_to_user()完成内核和用户的通信, 效率其实不高, 多用在传递控制 选项 信息,不适合做大量的数据传输用户态函数:发送:int setsockopt ( int sockfd, int proto, int cmd, void *da转载 2013-09-08 23:14:44 · 1009 阅读 · 0 评论 -
Netfilter 连接跟踪与状态检测的实现
Netfilter 连接跟踪与状态检测的实现 作者:九贱 www.skynet.org.cn 内核版本:2.6.12 本文只是一部份,详细分析了连接跟踪的基本实现,对于ALG部份,还没有写,在整理笔记,欢迎大家提意见,批评指正。 [size=4][color=Red]1.什么是连接跟踪[/col转载 2013-09-08 23:09:33 · 1136 阅读 · 0 评论 -
kernel time
linux内核是通过定时器中断来跟踪时间流;使用"HZ"宏表示1秒的时钟中断次数;并使用"jiffies"及"jiffies_64"变量来记录时钟中断次数,在系统引导时计数器初始化为0。 示例4_1#include linux/jiffies.h>unsigned long stamp;stamp = jiffies + HZ; /* 之后1秒 */转载 2013-09-09 09:41:03 · 1201 阅读 · 0 评论 -
Linux 内存的布局
n[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存转载 2013-09-08 11:11:42 · 827 阅读 · 0 评论 -
do_div
【问题】编译Linux下面的代码,经常会遇到这种错误:undefined reference to `__udivdi3'【解决过程】之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):(1)当a为32位,Linux 内核中,常用uint转载 2013-09-06 17:40:51 · 7213 阅读 · 0 评论 -
man kernel
在学linux设备驱动的时候,有好多函数的查看都比较麻烦,必须要进入到内核目录中去看函数的定义,个人还是比较习惯使用man命令查看。 有困难找男人(man),这是一个很高效的方法,由于平时所使用的man命令都只是支持应用层的一些函数,因为内核每一次升级对内核函数库,都会有点影响,所以才没有添加支持man把(自己粗解)。 要先把男人先装好,才能找他,步骤如下(我用的是Ub转载 2013-09-06 14:16:27 · 727 阅读 · 0 评论 -
netfilter1
注: 当用户态进程发送数据时,调用sendmsg实现,其调用内核netlink_sendmsg函数完成,新建了sk_buff,然后给其cb私有缓存中保存了源地址信息,然后把数据拷贝到sk_buff中[nlmsghdr头部已经附在数据部分前面,作为数据部分了]然后利用netlink_unicast发送出去 而当内核态发送时,新建了一个sk_buff,头部填写了nlmsghd转载 2013-09-06 13:52:21 · 871 阅读 · 0 评论 -
netfilter sock
开发和维护内核是一件很繁杂的工作,因此,只有那些最重要或者与系统性能息息相关的代码才将其安排在内核中。其它程序,比如GUI,管理以及控制部分的代码,一般都会作为用户态程序。在linux系统中,把系统的某个特性分割成在内核中和在用户空间中分别实现一部分的做法是很常见的(比如linux系统的防火墙就分成了内核态的Netfilter和用户态的iptables)。然而,内核程序与用户态的程序又是怎样行通讯转载 2013-09-06 11:39:15 · 1142 阅读 · 0 评论