
Linux内核
文章平均质量分 70
majieyue
这个作者很懒,什么都没留下…
展开
-
vmware环境下的kgdb环境配置和模块调试示例 (2)
这一篇用一个简单的例子来说明调试kernel module的过程,例子是ldd3书上的hellp模块首先需要在目标机上编出hellop.ko出来,然后把 hello.ko 和 hellop.c 拷贝到开发机上。OK,下面在目标机上 insmod hellop.ko whom="dude" howmany=5这时候可以 echo g > /proc/sysrq-trigger,从而挂起ker原创 2011-11-15 03:31:18 · 1255 阅读 · 0 评论 -
linux通过tc控制网络QoS(2)
先来看下traffic control在内核里是如何实现的,首先内核在发送数据时,最终会调用到dev_queue_xmit, struct Qdisc *q if (q->enqueue) { rc = __dev_xmit_skb(skb, q, dev, txq); goto out; } 如果q->enqueue函原创 2013-01-01 15:22:07 · 6985 阅读 · 1 评论 -
转一篇文章,比较kmalloc/vmalloc/get_free_pages
对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。内核空间中,从3G到vmall转载 2013-02-20 22:53:23 · 6576 阅读 · 0 评论 -
LVS源码分析(1)
由于要做一个类似LVS的包转发模块,研究了LVS的架构和代码,下面这个系列会做一个总结。首先推荐下这个blog http://yfydz.cublog.cn 里面对LVS, IPSec的讲解非常不错几个重要的数据结构如下:ip_vs_conn:一个连接由N元组构成,包括 caddr (客户端地址cip), vaddr (服务虚拟地址vip), daddr (目的realserver地址di原创 2013-02-25 17:05:01 · 8601 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(3)
这篇主题是内核二层包的接受发送,先来看接收:首先关注下几个状态值__QUEUE_STATE_FROZEN:发送队列被锁__QUEUE_STATE_XOFF:发送队列发送功能关闭__LINK_STATE_START:设备是否开启__LINK_STATE_PRESENT:设备是否存在,如驱动未安装就不存在__LINK_STATE_NOCARRIER:设备是否接收到载波,原创 2012-08-07 22:42:09 · 9935 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(1)
这个系列内容会有点杂,会涉及tcp/ip, netfilter, lvs, 网卡驱动等各个方面。。下半年准备把内核网络这一块好好研究下。。好吧从第一篇开始这篇介绍内核网络中最重要的数据结构,大部分可以在understanding linux network internal里找到struct sockstruct sock首先包含一个struct sock_common结构,主原创 2012-07-16 15:27:17 · 6355 阅读 · 2 评论 -
netback再分析
以konrad的dom0 tree ( http://git.kernel.org/cgit/linux/kernel/git/konrad/xen.git/ ) 为base tree,分析下netback这两年的代码变化和相应patch首先一个比较大的变化在于netback不再依赖xen foreign page这个feature。我之前的文章 http://blog.youkuaiyun.com/ma原创 2013-09-17 17:51:33 · 4988 阅读 · 0 评论 -
linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试
TSO,全称是TCP Segmentation Offload,我们知道通常以太网的MTU是1500,除去TCP/IP的包头,TCP的MSS (Max Segment Size)大小是1460,通常情况下协议栈会对超过1460的TCP payload进行segmentation,保证生成的IP包不超过MTU的大小,但是对于支持TSO/GSO的网卡而言,就没这个必要了,我们可以把最多64K大小的TC原创 2012-09-02 21:23:24 · 32634 阅读 · 2 评论 -
GSO revisit
GSOGSO用来扩展之前的TSO,目前已经并入upstream内核。TSO只能支持tcp协议,而GSO可以支持tcpv4, tcpv6, udp等协议。在GSO之前,skb_shinfo(skb)有两个成员ufo_size, tso_size,分别表示udp fragmentation offloading支持的分片长度,以及tcp segmentation offloading支持的原创 2013-09-22 02:51:34 · 7303 阅读 · 1 评论 -
xen grant table机制分析
grant table是xen基于共享内存的,在不同domain之间进行通信的一种机制,grant table需要domain和xen共同配合才能进行 * Xen's grant tables provide a generic mechanism to memory sharing * between domains. This shared memory interface under原创 2014-03-29 21:26:54 · 5763 阅读 · 0 评论 -
xen网络前后端交互
RX的报文接收,首先由netfront发起原创 2014-04-25 15:35:12 · 4184 阅读 · 0 评论 -
top显示的内存各项参数解析
top观察进程数据时,会有如下几个内存参数(可以用f选择显示哪些参数):VIRT, RES, SHR, SWAP, CODE, DATAtop实际上是从/proc//statm文件中读取这些信息,/proc//smaps文件是进程虚拟内存映射的详细数据,我们知道内核的struct page结构有引用计数,如果>1,表示是shared page,否则是private page原创 2012-12-17 14:13:23 · 6142 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(6)
本篇讨论IP包的收发(暂不包括路由)先来看inet_init,首先是调用proto_register,注册了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各种slab_cache,后半部分把这些struct proto结构链到proto_list里其次调用sock_register,内核有一个全局的net_proto_fami原创 2012-09-24 21:40:25 · 5927 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(7)
本篇继续讨论IP包的收发ip_local_deliver:ip_local_deliver用来把数据包接收到本地,代码很短/* * Deliver IP Packets to the higher protocol layers. */ int ip_local_deliver(struct sk_buff *skb){ /* * R原创 2012-10-11 03:00:58 · 4121 阅读 · 0 评论 -
vmware环境下的kgdb环境配置和模块调试示例 (1)
linux下的模块开发,不可避免要用到kgdb来调试,kgdb的调试环境需要一台开发机,一台目标机,其中代码运行在目标机上,开发机通过串口来调试目标机上的模块代码。用vmware可以方便的使用管道来代替真正的串口,而且只用一台笔记本就可以玩起来,非常简单粗暴 1. 开发机和目标机通过vmware的命名管道建立串口设备,其中开发机作为管道的client,目标机作为管道的server,如图所示原创 2011-11-14 12:47:51 · 3439 阅读 · 0 评论 -
linux aio (1)
首先推荐这篇文章 http://hi.baidu.com/_kouu/blog/item/e225f67b337841f42f73b341.html准备分三部分来讲,内核的aio,glibc也就是用户空间的aio,内核aio如何通知用户空间内核的aio是通过用户态的libaio库开放出去的,libaio其实啥也没做,只是封装了一些系统调用,去调用aio.h/原创 2011-12-18 20:56:45 · 5177 阅读 · 0 评论 -
linux的qos机制 - cgroup篇 (3)
从这篇开始介绍cgroup的原理,这两篇文章很不错先放这里http://blog.youkuaiyun.com/ustc_dylan/article/details/4030824http://blog.youkuaiyun.com/ustc_dylan/article/details/4030831/* The default css_set - used by init and its c原创 2012-03-08 22:43:00 · 2154 阅读 · 0 评论 -
linux的qos机制 - cgroup篇 (4)
下面来看各个子系统对cgroup的支持,第一篇先研究blkio子系统blkio子系统支持三种类型的QoS控制:blkio.weight, blkio.weight_device:这些是基于设备权重值的控制方式blkio.throttle.read_bps_device,blkio.throttle.write_bps_device:这些是基于带宽的控制方式blkio.throttl原创 2012-04-24 17:31:26 · 3719 阅读 · 0 评论 -
linux的CFQ调度器解析(1)
CFQ调度器是四种IO Scheduler中最复杂的一个,redhat有个文档可以做为入门的文档先了解下 red-hat-enterprise-linux-5-io-tuning-guide.pdfThe cfq scheduler maintains a maximum of 64 internal request queues; each process running on th原创 2012-04-18 12:51:12 · 12717 阅读 · 0 评论 -
linux的CFQ调度器解析(2)
cfq_queue的属性中,包括workload priority:IDLE, BE, RT,包括workload type:ASYNC, SYNC_NOIDLE, SYNC。同时cfq_queue虽然基于CFQ调度器,但其内部的算法还是基于dead-line的cfq_group包含了多个红黑树service tree,对应不同workload priority, workload type原创 2012-04-18 12:51:52 · 10988 阅读 · 0 评论 -
linux的CFQ调度器解析(3)
static struct elevator_type iosched_cfq = {.ops = {.elevator_merge_fn = cfq_merge,.elevator_merged_fn =cfq_merged_request,.elevator_merge_req_fn =cfq_merged_requests,.elevator_allow_merge_原创 2012-04-18 12:52:12 · 2609 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(2)
这篇主要介绍net_device设备的注册,初始化等流程如今的网卡无论是千兆卡还是万兆卡,基本都是pci设备(万兆卡基本上都是pcie设备),我们首先来看下pci设备相关的操作struct pci_device_id { __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/ __u原创 2012-07-29 18:09:17 · 3956 阅读 · 0 评论 -
linux内核网络协议栈学习笔记(4)
本篇不关注交换机相关的如BPDU,STP之类的实现,如果可能后续会在研究ovs的文章中跟进这块,本文只关注linux内核中的bridge模块在数据包收发链中的角色我们知道内核的net_device的结构后面一般会跟一块内存作为私有数据,不同的网卡驱动会利用这块内存存放自己的私有结构,如intel驱动的ixgbe_q_vector。bridge驱动的私有结构为net_bridgestruct原创 2012-08-17 00:38:30 · 5234 阅读 · 0 评论 -
linux内核网络协议栈学习笔记:vlan
这篇是我临时加的,本来不打算放在整个内核协议栈分析的系列里的,但我现在觉得vlan还是蛮重要的,而且讨论vlan源码的文章很少,不知道我这篇算不算第一篇 :Dvlan的代码都在net/8021q/的内核目录下,首先我们来看8021q模块 (net/8021q/vlan.c)vlan_proto_init , vlan_cleanup_module 是模块的init/exit函数,我们来看v原创 2012-10-02 01:38:36 · 9086 阅读 · 0 评论 -
per_cpu变量用法
per_cpu的原理就是一个变量在所有CPU cache上都存一份原创 2014-06-18 17:26:28 · 10279 阅读 · 0 评论