ko的--strip-debug

平时我们通过strip来strip应用程序中无用的信息来减少size,但是对于ko的话,由于ko中符号链表等,不能strip调其他信息,只能strip到debug段,目前kernel 根目录中的makefile也是strip调debug段来减少ko的size ifdef INSTALL_MOD_...

2019-01-19 16:04:59

阅读数:5

评论数:0

网口bond的时候如何选择slave

在网口bond的时候如何选择slave呢? 这可以从下面的函数看出 static struct slave *bond_find_best_slave(struct bonding *bond) { struct slave *slave, *bestslave = NULL; struct...

2019-01-17 19:13:04

阅读数:28

评论数:0

xarray的简单使用

xarray的实现在./lib/xarray.c中 xarray 的解释如下: The XArray is an abstract data type which behaves like a very large array of pointers. It meets many of the...

2018-12-21 16:16:58

阅读数:224

评论数:0

roce在kernel的调用栈

在infiniband/core/uverbs_main.c 中的ib_uverbs_init是整个roce 像libverbs提供接口的入口函数.在ib_uverbs_init 中会调用 ret = ib_register_client(&uverbs_client)...

2018-12-21 15:52:53

阅读数:35

评论数:0

subreaper进程

当用户态通过prctl(PR_SET_CHILD_SUBREAPER,1)的时候就是让当前进程像init进程一样来收养孤儿进程,称为subreaper进程,具体在os中的实现如下 case PR_SET_CHILD_SUBREAPER: me->signal-&...

2018-12-19 18:35:08

阅读数:47

评论数:0

hash addresses printed with %p

目前kernel中直接用%p打印地址的话会被显示成ptrval,kernel 应该用用%pK来打印地址,这样就可以用kptr_restrict 这个sysctl来控制%pK是显示地址还是ptrval 这个kernel的patch在https://lwn.net/Articles/740249/ ...

2018-12-19 16:22:06

阅读数:52

评论数:0

kcore 文件

/proc/kcore 提供了整个机器的内存镜像,这样可以通过gdb vmlinux /proc/kcore 来debug kernel. kcore的实现在fs/proc/kcore.c中。 为什么说kcore代表整个机器的内存镜像呀,这点从kcore的初始化函数就可以看到 static i...

2018-12-05 19:39:42

阅读数:95

评论数:0

USER_HZ

内核定义了USER_HZ来待敌用户空间看到的HZ值,可以看到如果HZ等于100的话,那user_hz就等于hz # define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define USER_HZ 100 /* some ...

2018-12-03 11:03:02

阅读数:24

评论数:0

kthread worker

kthread worker 起始就是kernel 帮用户开创建内核线程,简化复杂度。 主要的函数有三个,其使用举例如下: 创建一个worker: pool->worker = kthread_create_worker(0, "ib_fmr(%s)&am...

2018-12-01 16:43:52

阅读数:47

评论数:0

包含零长度数组的结构体申请内存

下面的结构体中包含了一个零长度的数组 struct ib_pkey_cache { int table_len; u16 table[0]; }; 那如果要定义一个这个结构体的指针的话,申请的空间改怎么计算呢? 可以参看下面的code stru...

2018-11-24 17:27:36

阅读数:24

评论数:0

timerfd机制

timerfd是linux为用户提供的基于文件描述符的定时器接口,主要的系统调用有三个。分别如下: timerfd_create -- 新建一个fd timerfd_settime -- 设置fd的超时时间 timerfd_gettime -- 获得fd的超时时间 一般用户设置fd的超时时间后就...

2018-11-24 14:49:25

阅读数:28

评论数:0

eventfd机制

eventfd 主要用于实现线程间通讯,可以用于用户态和内核通讯.主要涉及两个系统调用 SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags) { return do_eventfd(count, flags); } SYSCAL...

2018-11-21 19:29:27

阅读数:48

评论数:0

Asynchronous function calls for boot performance

Asynchronous function calls for boot performance 个人理解主要是通过函数异步调用还减少启动时间,即将没有依赖且没有严格串行 的程序可以异步执行来减少启动时间。 异步函数调用的具体实现在kernel/async.c中。我们举例说明async的用法. ...

2018-11-21 10:14:29

阅读数:32

评论数:0

kernel space 中调用系统调用对地址空间检查

在内核中调用系统调用,需要使用get_fs,set_fs来对其保护,因为这些函数会检查参数地址是不是 用户空间的,但是很显然,我们是在内核空间中调用这些系统调用。 #define get_ds() (KERNEL_DS) 可以看到这里的get_fs 直接返回的是当前进程的地址限制,用户进程和内核...

2018-10-29 19:35:50

阅读数:53

评论数:0

argument list too long

但使用基本的ls/rm 命令时,参数不能超过范围,如果超过范围就会提示argument list too long 每个os支持的参数大小可能有所不能,具体可以通过下面的命令查询 [root@157 ~]# getconf ARG_MAX 2097152 [root@157 ~]# 这个值是在i...

2018-10-26 10:02:33

阅读数:41

评论数:0

tun/tap 设备

tun/tap是一个虚拟网卡驱动,为用户态程序提供网络数据包的发送和接收能力,tun/tap 包含一个字符设备驱动和一个网卡驱动,利用网卡驱动接收来自tcp/ip协议栈的网络分包并发送或者将接收到的网络分包传给协议栈处理。 用户可以通过ip tuntao add veth1 mode tap的方...

2018-10-04 18:00:58

阅读数:133

评论数:0

判断盘是HDD还是SSD

在block/blk-sysfs.c 中定义了一个rotational 的sysctl变量可以判断当前盘是ssd和hdd static struct queue_sysfs_entry queue_nonrot_entry = { .attr = {.name = "rota...

2018-09-30 17:29:19

阅读数:141

评论数:0

roce是网卡的一部分

roce分为软件实现的roce和硬件实现的roce,硬件roce就是在普通网卡中添加一个模块,其中pf和vf 都可以使用roce 由于roce是网卡的一部分,因此roce在初始化的时候是包含在网卡初始化中的过程中,例如下面这个roce就会注册 自己的初始化函数到网卡驱动中 static cons...

2018-09-22 16:30:12

阅读数:428

评论数:0

ASID

为了提高TLB的性能,将TLB分成Global和process-specific。global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个进程独有的地址空间,当发生进程切换的时候,这部分tlb可以被刷出 为了支持process-specific...

2018-09-18 13:58:17

阅读数:290

评论数:0

vhe

vhe的全称是Virtualization Host Extension support。是armv8.1的新特性,其最终要就是支持type-2的hypervisors 这种扩展让kernel直接跑在el2上,这样可以减少host和guest之间share的寄存器,并减少overhead of ...

2018-09-11 08:42:30

阅读数:107

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭