linux
文章平均质量分 78
菜鸟别浪
联系方式:hzj_smile@126.com
展开
-
Linux 系统调用的实现(x86_64)
系统调用从用户态到内核全流程解析原创 2023-01-15 20:32:20 · 2021 阅读 · 1 评论 -
内核同步机制-自旋锁(spin_lock)
内核同步机制-自旋锁的实现原创 2022-11-27 22:00:56 · 2193 阅读 · 0 评论 -
对象释放函数kmem_cache_free核心函数slab_free的实现详解
1.kmem_cache_free函数void kmem_cache_free(struct kmem_cache *s, void *x)//X是要释放的对象{ s = cache_from_obj(s, x);//virt_to_head_page通过对象x找到该对象所在的slab的首个page,再通过page找到所属的slab缓存 if (!s) return; slab_...原创 2020-02-15 14:23:34 · 1273 阅读 · 0 评论 -
网络丢包排查思路
网络丢包排查思路1.防火墙确认:看防火墙是否配置了DROP特定端口范围的可能性方法:查看iptables filter表,确认是否有相应规则会导致此丢包行为,命令:sudoiptables-save-tfilter2.连接跟踪表溢出除了防火墙本身配置DROP规则外,与防火墙有关的还有连接跟踪表nf_conntrack,Linux为每个经过内核网络栈的数据包,生成一个新的连接记录项,...原创 2020-03-18 18:28:56 · 7270 阅读 · 1 评论 -
网络收包流程-网络层处理流程ip_rcv(五)
报文提交给内核协议栈处理后,最终会调用到__netif_receive_skb_core函数,如果报文没有被网桥处理函数rx_handler消费掉,最终会交给ptype_base中注册的协议处理,包括内核注册的协议,也包括raw socket等创建的协议处理。本文将分析普通ipv4 报文的处理过程,处理入口函数为ip_rcv函数。主要调用流程:ip_rcv-->ip_...原创 2020-03-18 18:25:54 · 3424 阅读 · 1 评论 -
网路收包流程-网桥的处理流程(br网桥)(四)
目录1.网桥收发报文模型2.网桥的初始化和相关数据结构关系 1)通过br_init函数注册和初始化网桥功能 2) 添加一个桥设备-br_add_bridge 3)给网桥添加端口-br_add_if 4)数据结构3.网桥收包处理流程-br_handle_frame函数1)br_handle_frame函数2)br_han...原创 2020-02-15 15:07:33 · 5622 阅读 · 0 评论 -
网路收报流程-网桥的处理流程(br网桥)(四)
1.网桥收发报文模型 linux内核是通过一个虚拟的网桥设备来实现桥接的。这个虚拟设备可以绑定若干个以太网接口设备,从而将它们桥接起来。其网桥收发包模型如下所示:网络收发报文的二种方式:1)网桥转发给具体端口处理:网桥设备br0绑定了eth0和eth1。对于网络协议栈的上层来说,只看得到br0,因为桥接是在数据链路层实现的,上层不需要关心桥接的细节。于是协议栈上层需要发送...原创 2020-02-15 14:57:22 · 3499 阅读 · 0 评论 -
网络收包流程-收包函数__netif_receive_skb的核心函数__netif_receive_skb_core(三)
调用关系:netif_receive_skb-->netif_receive_skb-->netif_receive_skb_internal(->__netif_receive_skb)-->__netif_receive_skb_core1.netif_receive_skb_internal的实现static int netif_receive_skb_int...原创 2020-02-15 14:39:57 · 5837 阅读 · 1 评论 -
mac头和ip头部详解
报文封装整体结构mac帧头定义 /*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress[6]; //目的mac地址 char m_cSrcMacAddress[6]; //源mac地址 short m_cType; //上一层协议类型,如0x0...原创 2019-08-18 14:26:03 · 9347 阅读 · 0 评论 -
Hard lockup occurs due to an infinite loop encountered in distribute_cfs_runtime()
Hard lockup occurs due to an infinite loop encountered in distribute_cfs_runtime()SOLUTION 已验证 - 已更新 2018年一月29日08:14 - English环境Red Hat Enterprise Linux 7.3 (kernel-3.10.0-514.el7.x86_64)问题Hard...原创 2019-08-24 12:19:18 · 447 阅读 · 0 评论 -
systemtap打印accept的进程pid和对应的socket套接字(嵌入c的使用)
#probe kernel.function("unix_accept")%{#include <net/sock.h>#include <net/af_unix.h>%}function _unix_path:long(sock:long)%{ struct socket *sock = (struct socket *)(long) ST...原创 2019-08-23 17:46:33 · 681 阅读 · 0 评论 -
softlockup/hardlockup原理详细介绍
主体涉及到了3个机制:kernel watchodog线程,高精度定时器(时钟中断),基于PMU硬件perf event的NMI(不可屏蔽中断)。基本思想: 1.)(soft lockup):抢占被长时间关闭而导致其余进程无法调度 2.)(hard lockup):中断被长时间关闭而导致softlockup基本原理: 1)SoftLockup 检测首先需...原创 2019-08-24 17:01:15 · 2669 阅读 · 0 评论 -
systemtap监控所有进程的收发包情况(数组的使用)
global recv, xmit probe begin { printf("Starting network capture...Press ^C to terminate\n") } probe netdev.receive { recv[dev_name, pid(), execnam...原创 2019-08-23 17:44:41 · 513 阅读 · 0 评论 -
systemtap打点方法
CentOS/RedHat发行版使用yum安装下列rpm包即可:systemtap:SystemTap包gcc:c语言编译器elfutils:提供库函数来分析调试信息kernel-devel:编译内核模块所需的内核头文件及模块配置信息kernel-debuginfo:提供所需的内核调试信息来定位内核函数和变量的位置使用一些例子SystemTap的简单例...原创 2019-08-23 17:43:19 · 738 阅读 · 0 评论 -
VSZ、RSS、Pss的区别和含义
ps aux命令的VSZ和RSS项:VSZ:指的是进程内存空间的大小,并不代表进程真正用到的内存,因为有些空间会仅在页表中挂个名,也就是说只是虚拟存在着,只有真正用到的时候内核才会把虚拟页面和真正的物理页面映射起来。比如,(malloc或mmap的调用),由于程序中并没有用到这些内存,没有物理内存被分配,也就不应算到进程的帐上。RSS:(resident set size)表示常驻内存的大小,但是...原创 2019-08-23 17:39:23 · 13265 阅读 · 0 评论 -
统计系统所有进程总共占用多少内存
常见误解: ps aux 命令显示的 RSS 列来统计全部进程总共占用的物理内存大小,这是不合理的。RSS(resident set size)表示常驻内存的大小,但是由于不同的进程之间会共享内存,所以把所有进程RSS进行累加的方法会重复计算共享内存,得到的结果是偏大的。正确的方法: 累加 /proc/[1-9]*/smaps 中的 Pss 。/proc/&l...原创 2019-08-23 17:38:08 · 1599 阅读 · 0 评论 -
ipv4反向路由配置
反向路由rp_filter - INTEGER0 - 表示不进行源地址反向路由验证1 - 表示对收到的包进行反向路由验证,如果路由得到的接口不是,报文收到的接口,将把包丢掉,这是种比较严格的检查。参考RFC37042 - 表示一种宽松的检查模式,如果收上来的包的源IP地址进行反向路由后,找不到出口,这是源地址路由才失败,将包丢掉。系统推荐使用使用严格模式检查,这种检查方式可以防止DD...原创 2019-08-24 17:17:20 · 1633 阅读 · 0 评论 -
主机串口配置
grub 加上,console=ttyS0,115200 console=tty0(或者修改/etc/grub2.cfg)好像需要重启生效;调试机器上用minicom或者串口工具;原创 2019-08-19 19:32:56 · 481 阅读 · 0 评论 -
linux下用户态程序coredump生成方法
总结:1.打开coredump开关 登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile(1024 限制产生的 core 文件的大小不能超过 1024kb,可以使用参数unlimited,取消该限制) 退出 LINUX 重新登陆 LINUX 键入 ulimit -c,如果显示 10...原创 2019-08-19 19:30:21 · 908 阅读 · 0 评论 -
好文汇总(不断更新)
好文收集网络 路由:https://blog.csdn.net/lickylin/article/details/38326719内存 英文电子书:https://www.kernel.org/doc/gorman/html/understand/index.html 内存源码:https://www.cnblogs.com/tolimit/ 内存、中断、时钟、...原创 2019-08-19 18:54:27 · 291 阅读 · 1 评论 -
perf内核调优
在内核方面,人们的兴趣五花八门,有些内核开发人员热衷于寻找整个内核中的热点代码;另一些则只关注某一个主题,比如 slab分配器,对于其余部分则不感兴趣。对这些人而言,perf 的一些奇怪用法更受欢迎。当然,诸如perf top,perf stat, perf record 等也是内核调优的基本手段,但用法和一样,无需重述。2.使用 tracepoint 当 per...原创 2019-08-19 19:13:49 · 1925 阅读 · 0 评论 -
perf-应用程序的调优与使用
Perf 是用来进行软件性能分析的工具。 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。 使用 perf,您可以分析程序运行期间发生的硬件事件,比如 instruc...原创 2019-08-19 19:05:14 · 742 阅读 · 0 评论 -
ipv4网络配置方法
1.打开配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eth0 (2)添加内容至配置文件 IPADDR=192.168.100.X(分配) NETMASK=255.255.255.0(定值) GATEWAY=192.168.100.0...原创 2019-08-19 19:02:43 · 7411 阅读 · 0 评论 -
tcpdump和wireshark抓包方法介绍
1.tcpdump工具的使用:用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 语法: tcpdu...原创 2019-08-19 18:58:16 · 351 阅读 · 0 评论 -
linux日志级别的正确使用(printk)
1.内核有严格的日志级别控制,他实际控制的是printk的输出以及对应内核驱动模块还有dev_dbg,dev_printk等函数的输出;我们可以通过proc接口来进行控制台输出我们需要的debug信息;内核日志级别有以下0-7共8级,数字越低级别越高: EMERG 0 ALERT 1 CRIT 2 ERR 3 WARNING 4 NOTICE 5 INFO 6 DEBUG 72...原创 2019-08-15 19:23:18 · 1374 阅读 · 0 评论 -
进程管理的基础
一.进程管理的基本概念 1.进程四要素: 有一段可执行的代码,代码不一定时进程专有,可以与其他进程共享; 有起码的私有财产,就是系统专有的系统堆栈空间; 有户口,就是内核中的task_struct数据结构,称为"进程控制块",这个结构是进程的"财产登记卡",记录着进程所占有的各项资源; 有独立的存储空间,就是拥有专有的用户空间,进一步意味着除了有前述...原创 2019-08-15 19:38:04 · 389 阅读 · 1 评论 -
调度的基本概念
一.调度的基本概念1.时间片:进程在被抢占前预先设置好占用处理器的时间段。默认时间片时间为10ms,linux的CFS(完全公平调度算法)并没有直接使用时间片分配给进程,它是将处理器的使用比划分给进程。2.多任务操作系统分为抢占式和非抢占式。抢占式会被强制挂起,非抢占式只能自己主动停止,否则一直执行。linux系统是抢占式是系统。二.调度程序设计的基础1.i/o消耗性进程:大部分时...原创 2019-08-15 19:39:31 · 6171 阅读 · 1 评论 -
网络收包流程-软中断中process_backlog和poll方式处理流程(二)
在硬中断中触发了软中断后,最终会调用软中断处理函数 net_rx_action,注意:硬中断流程触发软中断后退出中断上下文,但是并不会立刻进入软中断,具体的实现需要了解软中断处理流程。1.软中断处理函数net_rx_action具体实现详解:static void net_rx_action(struct softirq_action *h){ struct ...原创 2019-09-10 18:51:24 · 2497 阅读 · 0 评论 -
Docker 网络模型之 macvlan 详解,图解,实验完整
上一篇文章我们详细介绍了 macvlan 这种技术,macvlan 详解,由于它高效易配置的特性,被用在了 Docker 的网络方案设计中,这篇文章就来说说这个。01 macvlan 用于 Docker 网络#在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动(driver)启用(-d 参数指定),Docker macvlan...转载 2019-09-01 16:07:51 · 1288 阅读 · 0 评论 -
macvlan 详解
01 macvlan 简介前面的文章讲过了几种 Linux 虚拟网络设备:tap/tun、veth-pair、bridge,它们本质上是 Linux 系统 提供的网络虚拟化解决方案,今天要讲的 macvlan 也是其中的一种,准确说这是一种网卡虚拟化的解决方案。因为 macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡 ,相当于物理网卡施展了 多重影分身之术 ,由一个变多个。02 m...转载 2019-09-01 13:51:57 · 23148 阅读 · 0 评论 -
图解Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
原 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN ...原创 2019-09-01 13:05:44 · 1483 阅读 · 0 评论 -
Linux--start_kernel()函数分析
Linux--start_kernel()函数分析原创 2019-08-29 11:19:21 · 523 阅读 · 0 评论 -
虚机串口的配置
虚机串口的二种配置方式:1.虚机xml文件配置:2种方法 1)配置pty串口,可以通过virsh console 虚机ID 访问<serial type='pty'> <source path='/dev/pts/1'/> <target port='0'/> <alias name='s...原创 2019-08-28 19:37:25 · 683 阅读 · 0 评论 -
网络收包流程-报文从网卡驱动到网络层(或者网桥)的流程(非NAPI、NAPI)(一)
1.上图(网上的没我这个详细,哈哈):2.具体说明NAPI和非NAPI的区别:(1) 支持NAPI的网卡驱动必须提供轮询方法poll()。(2) 非NAPI的内核接口为netif_rx(),NAPI的内核接口为napi_schedule()。(3) 非NAPI使用共享的CPU队列softnet_data->input_pkt_queue,NAPI使用设备内存(或者设备驱动程序的...原创 2019-08-26 20:23:05 · 1563 阅读 · 0 评论 -
is there a way to find the list of slab aliases for a given kmem_cache
IntroductionThe kmem subsystem in RHEL7 has changed to include cache aliases, which can be confusing. This article covers a bit of the internals of the slab aliases and which should give some pointe...原创 2019-08-18 13:26:13 · 723 阅读 · 0 评论 -
vmcore分析和实战
经典案例收集:1.解析结构体成员变量:http://blog.chinaunix.net/uid-14528823-id-4432077.html2.解析链表:https://access.redhat.com/solutions/27865913.Crash工具实战-结构体解析(skb相关解析)1.基础知识 1)工具:crash、vmcore、kernel对应版本的ke...原创 2019-08-18 13:05:34 · 13013 阅读 · 0 评论 -
配置vmcore通过ssh转储到其他主机的方法
1.配置/etc/kdump.conf修改以下二项: 1)ssh root@xx.xx.xx.xx (vmcore会被scp到目的端的/var/crash目录) 2)core_collector 增加 -F 选项,否则,kdump无法启动(具体为:core_collector makedumpfile -l -F --message-level 1 -d 31)2.执行kdum...原创 2019-08-22 14:06:54 · 371 阅读 · 0 评论 -
linux内核开发常用站点
转载:https://github.com/hduffddybz/Linux_websites在这里整理下 Linux 开发中常用的站点1、国外站点kernel.orgLinux 内核的官方网站,在这个站点可以下载到不同版本的内核,也可以找到 kernel.org 下的各种项目 Embedded Linux wiki这个站点有嵌入式 Linux 的各种资料 lwn.net这个...原创 2019-08-25 16:04:56 · 276 阅读 · 0 评论 -
TCP/IP源码分析
struct s_mbuf与struct sk_buffstruct sk_buff与socket内核中的UDP socket流程(1)内核中的UDP socket流程(2)——API “sys_socket”内核中的UDP socket流程(3)——sock_create内核中的UDP socket流程(4)——sock_create内核中的UDP socket流程(...原创 2019-08-25 15:42:14 · 2030 阅读 · 0 评论 -
vmcore经典案例(hardlockup、softlockup、读写锁、hung、oom)
一次spinlock死锁故障的定位中断上下文使用spin_lock使导致死锁案例分析用crash工具分析Linux内核死锁的一次实战linux 3.10 一次softlock排查linux 2.6.32.220的一个crash记录linux 一个读写锁的使用异常导致的故障linux 3.10 的又一次hung一个rcu回调导致的简单死锁一个未完成的2.6.32-2...原创 2019-08-25 15:24:32 · 915 阅读 · 0 评论