自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 大页内存hugetlbfs学习记录

在介绍 HugePages 之前,我们先来回顾一下 Linux 下 虚拟内存 与 物理内存 之间的关系。:也就是安装在计算机中的内存条,比如安装了 2GB 大小的内存条,那么物理内存地址的范围就是 0 ~ 2GB。:虚拟的内存地址。由于 CPU 只能使用物理内存地址,所以需要将虚拟内存地址转换为物理内存地址才能被 CPU 使用,这个转换过程由 MMU(Memory Management Unit,内存管理单元) 来完成。在 32 位的操作系统中,虚拟内存空间大小为 0 ~ 4GB。

2025-03-06 13:55:51 1093

原创 网络端口协商

对于电口来说,自协商位于OSI七层协议中物理层PMD(物理介质相关子层),电口的自协商发生在链路信号传输之前,可以协商速率(10/1001000M),双工方式、流控等信息。双工模式分为全双工和半双工。全双工就是发生和接收可以同时进行,半双工就是同一时间只能接收或者发送。接口速率就是传输速率的带宽,比如10Mbps,100Mbps, 1000Mbps等,如果不同速率的接口对接在一起,数据会出现先异常,工作速率一定要保持一致。FLP,快速连接脉冲。

2025-03-05 17:13:07 429

原创 dpdk-vdev总线设备

dpdk支持的总线类型如下:dpaafslmcifpgapcivdevvmbus其中pci总线和vdev总线设备是我们经常使用的,本文主要介绍vdev类型设备。目录:dpdk/drivers/bus。

2025-02-20 17:44:24 339

原创 linux工具 trace

root]#echo [pid] /funtion> /debug/tracing/set_ftrace_pid //设置要追踪的进程或函数。[root]#echo [pid]/函数 > /debug/tracing/set_ftrace_filter //设置要追踪的进程。[root]#echo 1 > /debug/tracing/tracing_on //开启追踪。[root]#echo 0 > /debug/tracing/tracing_on //关闭追踪。

2025-01-13 14:56:07 251

原创 【虚拟机网络拓扑记录】

图中D处将主机虚拟适配器连接至此网络:这里设置实体机上的虚拟网卡VMware Virtual Ethernet Adapter for VMnet8,如果取消勾选,实体机上虚拟网卡8会删除,这样实体机就没有办法和虚拟机进行通信了,但是不影响虚拟机通过实体机网卡,访问外部网络。②、虚拟机向外部网络发送的请求数据包,会交由虚拟NAT设备加上“特殊标记”并以实体机的名义转发出去,外部网络返回的响应数据包,也是先由实体机接收,然后交虚拟NAT设备根据”特殊标记”进行识别,并转发给对应的虚拟机。

2024-12-27 17:51:01 1176

原创 【linux 查看网卡设备信息命令记录】

gmac 属于CPU资源的一部分,属于平台设备。下面以FT2004 的CPU为例,自带GMAC0和GMAC1。2820c000.eth 属于GAMC0, 28210000.eth属于GMAC1。还可以通过phy的驱动查看。1、查看网卡是否扫描到。1、通过平台设备查看。2、通过总线方式查看。

2024-12-06 14:44:03 1211

原创 【linux 获取时间】

我们在开发调试过程中,可能遇到一些和调用时序相关的问题,为了查看哪个步骤先调用,哪个步骤后调用,我们可以使用函数打印或者主动trace堆栈…但是有的时候我们需要排查2个接口调用的时间间隔,我们可以使用记录接口调用时间点的方式来查看接口见调用的时间间隔(比如网卡的power power 和 power down之间必须要有一定的时间间隔,才能正常的power down成功)。1、系统时间获取接口。

2024-09-20 15:12:02 641

原创 debugfs使用记录

【代码】debugfs使用记录。

2024-07-22 13:59:47 211 1

原创 【pci设备mmap】

pci在扫描到pci设备的时候,会去文件系统里面创建pci设备的信息sys/bus/pci/devices/aaaa:aa:aa.a/resource 里记录了bar0-bar5的信息,内容有7行,每一行对应一个bar,第一列表示起始地址,第二列表示长度,第三列表示内存属性(flag)bar0 还对应文件 sys/bus/pci/devices/aaaa:aa:aa.a/resource0。bar1 还对应文件 sys/bus/pci/devices/aaaa:aa:aa.a/resource1。

2024-05-13 15:13:45 405

原创 dpdk架构学习-pci设备与驱动

2、如果有uio_dev,需要讲设备内存空间mmap到用户态来(pci_map_device)里面的设备有白名单和黑名单之分,暂不研究。1、设备与驱动进行匹配。

2024-04-28 22:16:56 315

原创 内核线程创建

**

2024-03-29 17:57:50 223

原创 phy link检测机制记录

phy link 检测

2023-08-29 16:07:36 1086

原创 flexE记录

flexe 是OIF制定的技术标准,通过在IEEE802.3基础上引入FlexE Shim 层实现了MAC和PHY层的解耦,从而实现了灵活的速率匹配。灵活以太网基于Client和Group架构,可以支持任意多个不同的client 在任意一组PHY(FlexE Group)上映射和传输,从而实现捆绑、通道化、子速率功能。

2023-08-02 20:24:16 405

原创 mdio总线扫描phy设备和phy驱动注册

mdio总线扫描phy设备,和phy设备驱动注册流程

2023-06-29 10:38:44 1268

转载 kvm与qemu关系记录

KVM(Kernel-based Virtual Machine)包含一个为处理器提供底层虚拟化、可加载的核心 模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层 控制工具。

2023-06-14 10:52:38 218

原创 pcie简介

每个PCIE设备都有自己的独立的一段配置空间,该部分空间属于是这个设备的(可能是一段e2prom),设备在出厂时,配置空间是有默认初始值的。如上图所示,pci的配置空间是256字节,其中64字节是标准配置空间header,后面的192字节是Capability结构,展示pci能提供的能力。CPU发出一个物理地址,RC检查该地址,如果发现该内存空间地址是某个PCIe设备空间的映射,就会触发其产生TLP,去访问对应的PCIe设备,读取或者写入PCIe设备)一颗典型的PCI总线树如图。

2023-05-15 16:42:03 6436

原创 kgdb调试

echo g > /proc/sysrq-trigger" 这个指令是触发kgdb运行的,输入该指令后,内核就会停下,等待远端gdb连接。ttymxc0是所需使用的串口设备名,115200代表波特率,kgdbwait 是一个启动参数,也可以选择不添加该选项。所以需要给它传递一些参数。到这里已经可以调试内核和编入内核的驱动了,问题是我们更多的工作是调试动态加载的驱动,kgdb调试,在该方式下一共需要两台设备,其中一台为本地的被调试设备,gdb停下来了,剩下的工作就是一个普通的gdb了,你可以给内核下断点,

2023-05-06 16:14:39 529 2

原创 DPDK kni源码阅读笔记

应用层通过调用ioctrl系统调用接口, 来为网卡在内核里面创建一个虚拟的netdev设备, 主要是将用户态里面的记录报文的队列信息数据结构 传到 内核里面来,这样用户态和用户态就可以同时来操作这个队列,实现报文到内核传输的方式。DPDK 实现了驱动用户态化, 即用户层可以直接读写网卡的寄存器,网卡接收到报文以后,直接将报文写入用户态的申请的内存中。那为什么又要将用户态的报文发往内核呢?因为dpdk没有协议栈,而有的报文需要协议栈处理,所以kni就出来了,他解决了用户态的报文和内核交互的过程。

2023-03-30 17:14:45 377

原创 debugfs记录

【代码】debugfs记录。

2023-03-23 16:36:14 131

原创 异步处理方式

应用层通过poll,陷入内核,在poll里面poll_wait, 然后在中断里面wake_up_interruptible。应用层OPen这个uio设备,然后通过poll的方式陷入内核,进入uio的poll驱动,使线程挂起,3、通过创建uio设备的方式,创建uio设备,uio设备还可以方便mmap设备资源。2、通过open普通文件(提供poll函数), 在内核创建等待队列的方式。然后在设备的中断处理函数里面去uio_event_notify.1、通过open普通文件,在内核里面使用信号量的方式。

2023-03-20 20:10:48 320

原创 mempool地使用

【代码】mempool地使用。

2023-03-17 17:03:12 418

原创 kernel内存分配图

内存分配图

2023-02-24 11:17:48 152

原创 gdb笔记

GDB调试方法有3种:直接调试:gdb [exec file],用于直接仿真一个执行程序附属调试:gdb attach pid,用于直接调试一个已运行的程序(ubuntu注意权限问题)核心转存调试:gdb [exec file] [core-dump file],用于调试core-dump文件

2022-11-17 20:11:28 935

转载 uboot驱动框架

全文耗时一周,精心汇总20000余字,希望对大家有所帮助,感觉可以的点赞,关注,不迷路,后续还有更多干货!看文章前,答应我,静下心来,慢慢品!

2022-11-09 19:53:55 809

原创 GDB调试命令

GDB常见命令

2022-10-28 15:53:14 457

原创 linux下core dump【总结】

core dump

2022-10-26 19:47:41 242

原创 【Cache】

在处理器速度不断增加的形势下,处理器处理数据的能力也得到了大大的提升,但是数据是储存在内存中的,虽然随着DDR2\DDR3\DDR4的技术不断推出,内存的吞吐率得到了大大提升,但是对于处理器来讲,仍然很慢。一般来讲,处理器要从内存中直接读取数据要花大概几百个时钟周期,在这几百个时钟周期内,处理器除了等待,什么也不能做。在这种情况下,才提出了cache的概念,其目的是为了匹配处理器和内存之间存在的巨大的速度鸿沟。一般来讲,Cache由三级组成,一级(L1)最快,但是容量最小,三级(LLC,last level

2022-06-27 16:28:16 2522

原创 【Linux 伙伴系统】

伙伴系统(buddy system) 是操作系统中最常用的一种动态内存存储管理方法,在用户提出申请时,分配一块大小合适的内存块给用户,反之在用户释放内存块时回收。在伙伴系统中,内存块是2的order次幂,Linux内核中order的最大值用MAX_ORDER 来表示,通常是11,也就是把所有的空闲页面分组成11个内存块链表,每个内存块链表分别包括1、2、4、8、16、32、…、1024个连续的页面。1024个页面对应着4MB大小的连续物理内存。物理内存在linux内核中分出几个zone来管理,总额根据内核的

2022-06-22 15:22:47 656

转载 linux HZ

Linux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。 HZ可在编译核心时设定,其中HZ可设定100、250、300或1000。以小弟的核心版本预设值为250。具体可以使用 make menuconfig ->Kernel Features ->Timer

2022-06-21 16:57:52 720

原创 【操作命令记录】

1、显示匹配进程ps -aux | grep XXX2、显示匹配进程XXX下面的AA线程pstree -p PID(XXX) | grep AA3、显示内核打印信息dmesg4、看一个进程与核的亲和性cat /proc/PID/status/* cpus_allowed:表示可以被几个核调度 // cpus_allowed_list表示可调度的cpu掩码 */...

2022-06-21 11:08:07 73

原创 内存管理-理论

内存管理理论

2022-06-04 20:41:43 120

原创 【Linux 中断管理机制】

2022-06-03 15:44:46 1403

原创 NAPI 流程

napi 流程记录1、初始化一个napi_struct。此时 NAPI的状态为 NAPI_STATE_SCHED状态。。void netif_napi_add(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct *, int), int weight){ INIT_LIST_HEAD(&napi->poll_list); hrtimer_init(&nap

2022-05-25 15:44:55 670

原创 【POLL 机制简单例子】

POLL 实现简单举例内核下面需要做的事情实现一个字符设备内核下面需要做的事情实现一个字符设备首先需要实现file_operations 。static const struct file_operations xxx_fops = { .owner = THIS_MODULE, .open = xxx_open, .release = xxx_release, .read = xxx_read, .write = xxx_write, .mmap = xxx_mmap, .

2022-05-25 10:28:40 196

原创 linux poll机制窥探

linux poll机制窥探内核框架sys_poll 源码驱动程序UIO框架里面的poll实现内核框架对于系统调用poll或select,它们对应的内核函数都是sys_poll,文件位于fs/select.csys_poll 源码SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout_msecs){ struct timespec64 end_time, *to = NULL;

2022-05-24 15:43:37 293

原创 dpdk大页内存

dpdk大页内存大页内存使用设置大页个数//设置256个大页,每个大页2M,则将256写入下面这个文件中 echo 256 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages挂载大页设置完大页后,为了让大页生效,需要挂载大页文件系统。例如将hugetlbfs挂载到/mnt/huge。刚挂载完时/mnt/huge目录是空的,里面没有一个文件,直到有进程使用共享内存方式使用了这个大页系统为止,才会在这个目录下创建大页文件。

2022-05-08 19:56:59 962

转载 DPDK之PMD原理

转载

2022-05-08 18:36:37 208

转载 DPDK之PMD原理

转载文章:转载

2022-05-08 17:57:53 150

原创 DPDK中断管理

DPDK中断机制浅析DPDK中断管理igb_uio的创建linux中uio设备的创建内核事件通知DPDK的中断任务线程创建 epoll网卡注册的中断回调DPDK中断管理DPDK中的网卡都是PCI设备,多数中断都属于PCI_MSIX类型的中断。igb_uio的创建下面是igb_uio创建过程部分代码。static intigbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id){ /* 省略代码 */

2022-05-08 17:01:51 970

原创 【 boot下面的配置开关】

boot下的配置项boot下面的配置开关问题由来boot下面的配置开关在boot下面有多个文件配置开关,以FT2000C举例。bootloader/configs/FT2004C_defconfig 默认配置文件和 bootloader/include/autoconf.mk这两个文件分别在 bootloader/ft20040-pld.sh 和 bootloader/Makefile中被用到。bootloader/ft20040-pld.sh:make /FT2004C_defconfig

2022-04-19 16:10:56 303

有关RDMA相关内容有关RDMA相关内容

有关RDMA相关内容

2023-05-15

网卡相关和gdb调试网卡相关和gdb调试

网卡相关和gdb调试

2023-05-15

用户态与内核态的交互实现

用户态与内核态的交互实现

2023-05-08

igb-uio源码,igb-uio源码,igb-uio源码

igb_uio源码

2023-03-23

mmap实验源文件源文件实现

mmap实验源文件

2021-11-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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