![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
dpdk
文章平均质量分 71
dpdk原理及linux基础
growdu_real
人生,不必遗憾,若是美好,叫做精彩。若是糟糕,叫做经历。
展开
-
linux cache指北
linux cache指北cache是什么计算机中数据存取满足“二八定律”(局部性原理),为了以较低的成本大幅提高性能,现代cpu都有cache。cpu cache已经发展到了三级缓存结构,基本上现在买的个人电脑都是L3结构。其中L1和L2cache为每个核独有,L3则所有核共享。本文内容大量摘抄自飘舞的雪的博客,详情请参阅原文。cache bouncing为了保证所有的核看到正确的内存数据,一个核在写入自己的L1 cache后,CPU会执行Cache一致性算法把对应的cacheline(一般是原创 2022-01-27 15:36:05 · 351 阅读 · 0 评论 -
vpp buffer接口
vpp buffer接口buffer/** VLIB buffer representation. */typedef union { // 使用union方便在结构体和byte(内存)之间转换 struct { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); // 用来做cacheline对齐 /** signed offset in data[], pre_data[] that we are currently * pro原创 2022-01-25 11:15:35 · 1268 阅读 · 0 评论 -
ip分片指北
ip分片当IP数据报超过帧的MTU(最大传输单元)时,它将会被分片传输。**分片能发生在发送端或者中转路由器,且在传输过程中可能被多次分片。**在最后的目标机器上这些分片才会被内核的的IP模块重新组装。ipv4报文结构ipv4 ip报文分片在IPv4的头部信息中有3个字段专门为IP分片服务的。标识(16bit)此字段虽然没有改变,每个分片要复制这个字段的值。这个字段与源主机的IP唯一确定一个数据报。当目的主机收到所有分片后,可以根据这个标识重装数据报,因为目的主机认为标识号相同的是属于原创 2022-01-21 11:27:39 · 1862 阅读 · 0 评论 -
linux巨页内存编程
linux大页内存HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。概念Page Table: page table也就是一种用于内存管理的实现方式,用于物理地址到虚拟之间的映射。因此对于内存的访问,先是访问Page Table,然后根据Page Table 中的映射关系,隐式的转移到物理地址来存取数据。TLB: Translation Lookaside Buffer (TL原创 2021-12-29 16:31:20 · 1295 阅读 · 0 评论 -
linux内存管理指北
linux内存管理指北内存是一段连续的地址单元,linux内核接管内存管理后,会将内存划分为内核区和用户区。因而内存管理就分为两个层面:内核内存管理一般是kmalloc(小块内存)和vmalloc(大块内存)。用户内存管理一般是malloc(小块内存)和mmap(大块内存)。本文内容大量摘抄引用自Mortree的博客和CodingLabs博客,这里只是做了简单的整理。详细内容请阅读他们的博客。内存分类相对于进程来说,内存分为如下几个部分:堆栈数据段代码段bss段当原创 2022-01-13 10:04:14 · 108 阅读 · 0 评论 -
linux常用系统接口
linux常用系统接口mprotectmprotect()函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。#include <sys/mman.h>int mprotect(void *addr, size_t len, int prot);addr:修改保护属性区域的起始地址,addr必须是一个内存页的起始地址,简而言之为页大小(一般是 4KB == 4096字节)整数倍。len:被修改保护属性区域原创 2022-01-11 15:39:08 · 1094 阅读 · 0 评论 -
docker与宿主机共享内存通信
docker与宿主机共享内存通信docker中的进程要与宿主机使用共享内存通信,需要在启动容器的时候指定“–ipc=host”选项。然后再编写相应的共享内存的程序,一个跑在宿主机上,另一个跑在docker上面。宿主机程序准备shm_data.h#ifndef _SHMDATA_H_HEADER#define _SHMDATA_H_HEADER #define TEXT_SZ 2048 struct shared_use_st{ int written; // 作为一个标志,非原创 2023-10-27 14:22:14 · 6996 阅读 · 1 评论 -
linux锁指北
linux锁指北锁一般用于解决资源竞争,比如多进程或者多线程场景下。锁主要是为了保证同一个资源在同一时间只能被一名修改者修改。互斥锁(mutex)对于竞争资源来说,只要有一方获取了资源的锁,另一方就无法修改竞争资源,需要等待锁释放并获取到锁之后才能进行修改。有两种方式创建互斥锁:静态创建POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER 来静态初始化互斥锁,方法如下:pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;原创 2022-01-05 18:05:40 · 522 阅读 · 0 评论 -
linux下svn吐血指北
linux下svn吐血指北如非必要,请用git!如非必要,请用git!如非必要,请用git!安装apt install svn配置设置默认编辑器为vimecho "export SVN_EDITOR=vim" >> /etc/profilesource /etc/profile命令拉取仓库svn checkout path添加文件svn add filename注意:svn的文件只允许提交依次。当你第一次提交后,后面修改了直接commit。提交文件原创 2022-01-04 10:50:09 · 122 阅读 · 0 评论 -
gcc attribute指北
gcc attribute指北GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__语法格式为: __attribute__ ((attribute-list))其位置约束为: 放于声明的尾部“;”之前。alignalign属性不仅可以修饰变量,类型, 还可以修饰函原创 2021-12-31 15:05:12 · 629 阅读 · 0 评论 -
dpdk之kni使用
dpdk之kni使用什么是kniKni(Kernel NIC Interface)内核网卡接口,是DPDK允许用户态和内核态交换报文的解决方案,模拟了一个虚拟的网口,提供dpdk的应用程序和linux内核之间通讯。kni接口允许报文从用户态接收后转发到linu协议栈去。 为什么要弄一个kni接口,虽然dpdk的高速转发性能很出色,但是也有自己的一些缺点,比如没有协议栈就是其中一项缺陷,当然也可能当时设计时就将没有将协议栈考虑进去,毕竟协议栈需要将报文转发处理,可能会使处理报文的能力大大降低。当k原创 2021-12-31 09:58:32 · 6121 阅读 · 1 评论 -
linux ptp指北
linux ptp指北ptp是什么PTP(Precision Time Protocol)精确时间协议,由IEEE1588规定,用于同步网络中两台机器的时间。1558使用延时-请求测量机制达到主从时间同步。PTP协议相关时钟类型PTP按照时钟类型分为:OC普通时钟TC透明时钟BC边界时钟承载方式PTP报文支持多种报文承载方式:基于MAC基于UDP报文类型PTP报文分为事件报文和通用报文,其中事件报文包括:SyncDelay_ReqPDelay_R原创 2021-12-30 17:37:28 · 2373 阅读 · 0 评论 -
vpp与dpdk的关系
vpp与dpdk的关系dpdk作为vpp的一个插件,主要用来从网卡收发包。vpp使用如下命令参数初始化dpdk eal。EAL init args: -c a -n 1 --in-memory --huge-dir /mnt/hugepages --no-pci --proc-type primary --file-prefix vpp --master-lcore 1dpdk初始化流程读取配置dpdk_config初始化库dpdk_lib_init注册节点输入节点dpdk_原创 2021-12-29 16:29:11 · 5698 阅读 · 0 评论 -
dpdk常用接口指北
dpdk常用接口指北基于dpdk18.11版本,其他版本注意区别。一般用dpdk做网口管理、网口收发包、内存管理等操作。dpdk环境初始化int rte_eal_init(int argc, char **argv);通用参数配置-b blacklist-w whitelist-c coremask-l corelist-s service coremask-S service corelist-m size of memory-n force number of channel原创 2021-12-28 09:49:54 · 1458 阅读 · 0 评论 -
linux socket编程指北
linux socket编程指北以下server和client的c代码均拷贝自博客,详细内容请阅读原文。在其上添加了错误码打印,修改了服务端ip和端口,并增加了makefile脚本。server/*serve_tcp.c*/#include<stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<stdlib.h>#include<arpa/inet.h>#incl原创 2021-12-27 16:29:00 · 932 阅读 · 0 评论 -
linux内核模块之字符设备指北
linux字符设备指北混杂设备在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的混杂设备。设备描述Linux中使用struct miscdevice来描述一个混杂设备。struct miscdevice { int minor; /* 次设备号*/ const char *name; /* 设备名*/ const struct file_o原创 2021-12-27 13:58:46 · 172 阅读 · 0 评论 -
指北系列——vlan使用指北
vlan使用指北vlan详细内容请参考博客。VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。简单来说,同一个VLAN中的用户间通信就和在一个局域网内一样,同一个VLAN中的广播只有VLAN中的 成员才能听到,而不会传输到其他的VLAN中去,从而控制不必要的广播风暴的产生。同时, 若没有路由,不同VLAN之间不原创 2021-12-27 13:57:01 · 641 阅读 · 0 评论 -
指北——linux内核模块指北
linux内核模块指北linux内核提供在运行时可进行扩展的特性,这意味着当系统启动并运行时,我们可以向内核添加或移除部分功能。我们在运行时添加到内核中的代码就被成为动态可加载内核模块,我们简称为内核模块。可以将内核模块模块简单理解为linux内核的插件。内核模块基本操作内核模块编译后会生成.ko的文件,在linux系统中可以执行如下命令查看模块相关信息。#加载内核模块insmod#卸载内核模块rmmod#列出内核模块lsmod#查看模块信息modinfo modname编写内核模原创 2021-12-24 14:15:53 · 395 阅读 · 0 评论 -
指北系列——抓包指北
抓包原创 2021-12-24 13:47:01 · 289 阅读 · 0 评论