Linux
zhenghuaduo
这个作者很懒,什么都没留下…
展开
-
Linux free显示内存计算
free源码库:procps1、介绍 本文主要介绍Linux环境下free工具显示的used内存数据计算方式;2、计算方法从以上free的源码里看出,used内存的计算公式为:mem_used = kb_main_total - kb_main_free - kb_main_cached - kb_main_buffers;其中:kb_main_cached = kb_page_cache + kb_slab_reclaimable;kb_main_buffers= Buffe..原创 2020-12-06 11:05:42 · 999 阅读 · 0 评论 -
Linux systetmtap使用
1、安装kernel debug包,(kernel-debuginfo、 kernel-debuginfo-common、kernel-devel http://debuginfo.centos.org/7/x86_64/)2、安装systemtap yum install systemtap3、检查systemtap是否安装成功 stap -ve 'probe kernel.function("do_fork") { print("hello world\n") exit() }' ...原创 2020-11-29 19:13:17 · 410 阅读 · 0 评论 -
crash使用
1、安装kdump、crash2、安装kernel-debuginfo-3.10.0-327.28.3.el7.x86_64.rpm、kernel-debuginfo-common-x86_64-3.10.0-327.28.3.el7.x86_64.rpm(版本与使用系统内核一致)3、vim /etc/kdump.conf 修改path /var/crash设置core存放目录;4、crash /usr/lib/debug/lib/modules/3.10.0-327.28.3.el7.x86.原创 2020-11-29 19:09:25 · 906 阅读 · 0 评论 -
rprobe、kretprobe使用例子
背景: Linux协议栈处理发送流程时,在发送驱动函数前会通过__netdev_pick_tx选择一个发送队列,当选择好一个发送队列后,协议栈会将其设置到sk->sk_tx_queue_mapping,这样后续的发送流程就不需要再去选择。static u16 __netdev_pick_tx(struct net_device *dev, struct sk_buff *skb){ struct sock *sk = skb->sk; int queue_index = s..原创 2020-10-06 22:19:05 · 569 阅读 · 0 评论 -
Linux epoll机制
1、epoll是通过创建一个代理线程去监听多个socket fd的I/O多路复用方案,主要的使用方法如下: #define MAX_EVENTS 10 struct epoll_event ev, events[MAX_EVENTS]; int listen_sock, conn_sock, nfds, epollfd; //创建一个server端的socket对象,并处于listen状态 /原创 2020-06-13 22:28:46 · 480 阅读 · 0 评论 -
Linux 调度基本流程
本文主要描述主动调度过程,如用户态代码调用sched_yield。 1:通过系统调用,进入内核态,在内核系统调用处理入口(entry_SYSCALL_64),先保存部分寄存器信息到当前进程对应的内核栈上(task_struct->thread.sp)pushq $__USER_DS /*pt_regs->ss */push原创 2017-10-31 09:25:22 · 975 阅读 · 0 评论 -
thread_info
Linux通过task_struct来描述一个进程/线程的信息,包括内存映射、打开的文件描述符、进程/线程状态等等,整个的数据结构也非常大;如下图所示:struct task_struct {#ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), thi原创 2017-11-10 11:30:24 · 2039 阅读 · 0 评论 -
Linux 中断上下文为什么不允许睡眠?
1:Linux的调度是针对线程级别的,中断上下文不与某个线程关联,没有上下文,不需要睡眠调度;2:由于中断上下文没有与之关联的进程上下文,如果因为睡眠被调度走了,那就没有办法调度回来。(schedule里pick_next_task的时候,只能选中下一个task,但中断上下文不是一个task)原创 2017-11-03 15:25:49 · 852 阅读 · 0 评论 -
块存储、文件存储、对象存储
作者:繁星亮与鲍包包链接:https://www.zhihu.com/question/21536660/answer/33279921来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。【块存储】典型设备:磁盘阵列,硬盘块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以转载 2017-11-20 20:58:00 · 243 阅读 · 0 评论 -
内核页表、进程页表
FROM: http://blog.chinaunix.net/uid-14528823-id-4334619.html初学内核时,经常被“内核页表”和“进程页表”搞晕,不知道这到底是个啥东东,跟我们平时理解的页表有和关系。。内核页表:即书上说的主内核页表,在内核中其实就是一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直转载 2018-01-03 21:10:40 · 1984 阅读 · 0 评论 -
Linux 内存管理
在32机器,一个进程可访问的地址范围为0-4G,其中0-3G为用户地址空间,3-4G为内核地址空间;不同的进程拥有自己独立的用户空间(TASK_SIZE),共享同一个内核地址空间。 在用户空间只能访问3G(对应物理地址范围是1G-4G),内核地址空间可以访问所有的物理内存。 在内核地址空间的前3G-3G+896M,与物理地址0-896M为直接线性映射关系,那么内核是如果做到可以原创 2017-10-31 09:19:52 · 248 阅读 · 0 评论