自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 【DPDK学习路径】九、学习分支

DPDK 作为数据处理平面,功能主要集中在 pkt_process 部分,大致就是各层网络功能的具体实现,当然,就如同内核努力通过钩子向上层提供可配置的处理内容一样,DPDK 也需要提供配置接口,以便即时的策略修改,否则为何不使用硬件转发呢?但对于一个正常的项目来说,这并不是最优解,因为这会导致代码来回改动,因此后续我将先论述一下简单的软件架构,再添加一部分功能,最后继续深入学习DPDK,了解接口的实现,论述性能调优。最后,不断提高对DPDK的理解,不断优化系统性能。

2024-06-13 17:19:27 247

原创 【DPDK学习路径】八、轮询

下面直接给出一个实例,此实例使用核心1及核心2创建了两个线程用于报文处理,其中在核心1上运行的线程接收网卡0的消息,而在核心2上运行的线程接收网卡1的消息。在这里,从网卡上获取报文的方式为轮询,具体的接口为 rte_eth_rx_burst,而所谓的报文处理,就是简单地打印报文消息。前面我们已经了解了如何使用DPDK创建线程并绑定核心,以及如何申请内存池并创建 RX/TX 队列。接下来我们将了解DPDK的核心内容之一:以轮询的方式从网卡中收取报文。

2024-06-13 16:41:32 289

原创 【DPDK学习路径】七、创建RX/TX队列

在这里,我们仅为每个网卡开启一个RX队列及一个TX队列,因此都设置为1。在 DPDK 中提供了 rte_eth_rx_queue_setup 及 rte_eth_tx_queue_setup 这两个接口用于接收/发送队列的创建。对于每个网卡,首先配置,然后创建RX队列,然后创建TX队列,最后启动网卡,并开启混杂模式。上一节我们讲述了如何申请内存池缓冲区以便接下来创建 RX 队列,这一节我们将给出具体如何创建 RX/TX 队列。现在,我们已经成功为所有绑定在DPDK上的网卡创建了相应的 RX/TX 队列。

2024-06-13 15:59:02 384

原创 【DPDK学习路径】六、申请缓冲区内存池

队列的组织依赖于存储数据报文的结构体,在内核协议栈中,这一结构体是sk_buff,而在DPDK中,这一结构体是 mbuf。简单来说,内核使用 sk_buff 保存接收/发送的报文,通过多个 sk_buff 组合成为接收/发送队列,而在 DPDK 中,使用 mbuf替代 sk_buff。Linux 内核协议栈与网卡之间的工作是非常经典的生产者-消费者模型,在接收报文的情况下,网卡总是生产者,而协议栈总是消费者,发送的时候则是相反的。下一节我们将讲述如何使用内存池缓冲区创建网卡的 接收/发送队列。

2024-06-13 15:22:18 302

原创 【DPDK学习路径】五、线程创建及核心绑定

因此,最终的结果是,此函数会在核心1上运行,并且每间隔1s输出一次核心id及线程id,而运行在核心2、3上的线程迅速结束,核心0则等待核心1上运行线程结束返回。如下所示,该函数含有三个参数,第一个参数是线程处理函数指针,第二个参数是处理函数的入参,第三个参数用于甄别是否使用主核心创建线程,有效值为SKIP_MASTER 及 CALL_MASTER,前者表示使用除了主核心以外的全部核心创建线程,后者表示使用全部核心创建线程,以四核系统为例,前者创建3个线程,后者创建4线程。

2024-06-12 23:16:09 256

原创 【DPDK学习路径】四、输出hello world!

前面的打印展示了一些底层初始化的细节,包括核心数量和NUMA节点数量,数量为1表示我的机器实际不支持NUMA,另外,它还提示我操作系统不支持大页,并且有许多的网卡绑定错误NUMA socket的提示,不过无妨,NUMA及大页的支持并不是DPDK程序运行所必须的,因此rte_eal_init最终没有报错,程序也正常地打印出来了 “hello world!好吧,它实际上也就是个简单的c程序。展示它是为了说明,在引入dpdk库之前,它就是一个普通的c程序,因此调用dpdk库就如同调用stdio库一样便捷。

2024-06-12 18:17:21 146

原创 【DPDK学习路径】三、DPDK 环境搭建

此时应该有ethernet0、ethernet1及ethernet2,挑选你需要用于dpdk的两个网卡修改为vmxnet3类型即可。设置内存页,包括non-NUMA及NUMA,均输入512即可,代表设置为512*2MB,即1G大页。之后选择 x86_64-native-linux-gcc,进行编译。编译完成后,插入UIO、VFIO、KNI模块。绑定网卡到IGB UIO模式,此模式最通用。1、在VMware中安装ubuntu 18.04。2、为虚拟机添加两个网卡,设置网卡类型为桥接。3、设置虚拟机网卡类型。

2024-06-12 17:33:51 251

原创 【DPDK学习路径】二、DPDK简介

基于软件的解决方案也有不少,比较著名的如tc、xdp、dpdk,tc、xdp主要用于流量控制,它们类似于netfilter框架中的钩子,可以在比较靠前的位置处理报文,在面对DDoS攻击的情况下,二者可以通过丢包的方式避免报文进入内核,因此提高了DDoS防御能力,此外XDP可以通过选择性地让报文跳过部分内核处理,因此提高报文的处理效率。除此之外,I/O效率、内存访问效率,也是性能限制因素。使用DPDK构建自己的数据平面,必须依赖于DPDK提供的这些库,当然,对于不同的DPDK程序,所需要的库也是不同的。

2024-06-12 17:08:24 825

原创 【DPDK学习路径】一、前言及目录

虽然目前网络上已经有很多关于DPDK的帖子,DPDK官网也有自己的说明文档,但是这些现存的资料,要么不够系统、全面,要么入门门槛很高,需要非常精通操作系统及网络报文处理,甚至于要你本身已经对DPDK十分了解才能读懂。基于上述情况,我认为有必要写一系列文章,由浅至深,系统地介绍DPDK框架,辅以具体的DPDK应用程序说明,既方便初学者入门,也有利于对DPDK更深入地学习。此外,本系列文章正在撰写过程中,因此目录中的内容将随时间逐一展示,并且随着内容架构调整,一些内容可能被修改/增加/删除,盼理解。

2024-06-12 15:56:49 142

原创 Linux网络详解:网络层-IPv4

而对于需要转发的报文,则进入 ip_mkroute_input 处理,之后返回。可以看到,在收包(IN or FORWARD)逻辑中,连接跟踪注册点位于NF_INET_PRE_ROUTING,在发包过程则位于 NF_INET_LOCAL_OUT ,在这两种情况下,连接跟踪都位于 raw 表与 mangle 表之间。对于UDP,则是通过 udp_sendmsg 发送 IPv4 报文,它主要是调用了 udp_send_skb,之后 udp_send_skb 进一步调用 ip_send_skb 进行处理。

2024-04-18 23:07:32 750

原创 Linux网络详解:链路层

内核协议栈中链路层的处理主要位于linux内核中的./net/bridge/中。数据包在链路层的流转如下图所示:在进行时间戳处理之后,紧接着就是RPS(Receive Packet Steering)的处理,它主要用于从网卡收上协议栈的包交由指定的CPU处理,可以充分利用多核性能。

2024-04-09 22:09:44 993

原创 【DPDK】DPDK实现NAT

我编写了一个十分简单的DPDK用户程序以实现NAT功能,它工作的环境略显苛刻,但正因此此程序足够简单明了,可以足够清晰地展示dpdk中是如何一层层剥开数据报文,并根据需求修改各个字段的值。

2024-04-07 20:34:27 921

原创 Ubuntu修改命令行提示符

本文描述了ubuntu中命令行提示符的构成,以及修改命令行提示符的方法,对背景不感兴趣的同学可以直接跳到第三节~

2024-02-19 16:20:57 539

原创 C语言产生随机数

c语言可以使用rand函数创建随机数,其头文件为stdlib.h,具体实例如下:...许多博客都提到,rand产生的随机数是伪随机数,其产生原理是一种简单的映射关系,映射,也即函数关系,其表明某一个特定的输入将产生特定的输出,这里的输入,也就是所谓的随机数种子。此外,作者们还提到,随机数种子是计算机启动时也就确定了的,也就是说如果不手动改变随机数种子,程序产生的随机数总是确定的,这与我们第一节得到的结论相悖。但是,随机数种子确实是存在的,以下实例将会证明这一观点:

2024-02-18 22:59:30 967

原创 Chrome启动时自动打开360导航的解决方法

最近可能不小心点到了什么脏东西,导致每次谷歌浏览器启动总会自动打开一个360导航的页面,一连两天都被恶心坏了。赶忙去百度,到处都是复制粘贴的内容,给出的解决方案是:打开Chrome,进入“设置”—“启动时”,选择“打开特定网页或一组网页”,输入你需要打开的网站,之后每次打开就是这个网页了。很明显,都是一些**营销号,因为选择这个选项会让你每次打开chrome时都不会恢复原先浏览的网页,虽然可以自己去浏览记录中恢复,但很明显,大家更想要选择“继续浏览上次打开的网页”,除非经常浏览一些少儿不宜的东西。

2023-12-27 21:35:40 3694 4

原创 【Openwrt编译错误】fseterr编译错误

我的环境中使用了方法1就正常了,故没有实践方法2。

2023-11-21 15:28:22 504

原创 【samba】Windows映射网络驱动服务器提示“拒绝访问”

windows上这两个莫名其妙的提示让人很头疼,特别是再加上奇葩的缓存方式,没错,windows把你的samba凭证缓存下来了.......但是因为没有正常完成映射,所以你的“此电脑”下不会看到新的网络驱动器......总结下来就是windows坑爹,跟samba服务端没啥关系。想使用samba服务愉快地访问文件,但是小白可能会误操作,比如路径填错了,这个时候,即使把路径改回来,windows也会不断地提醒你“拒绝连接”,去找samba服务管理员一问,发现就你有这个问题。我先试试别人的账号!

2023-10-24 14:58:09 4152

原创 谷歌浏览器Chrome清除单个网页缓存

因为网页开发者功底不行,遇到了以下情况:登录页面可以正常访问,输入账号密码后开始404。之前是通过清理缓存的方法解决的,但是现在chrome已经使用了一段时间,不能暴力地清理所有网站的缓存,需要精准地删除该网站的缓存。百度上都是复制粘贴的机器人和营销号,都只会告诉你删除所有缓存,包括chatgpt也一样,因此有必要记录一下最终的解决方法。2、进入“隐私和安全”—“第三方cookie”4、搜索想要清空缓存的网站,点击删除缓存。3、进入“查看所有网站数据和权限”

2023-10-23 15:57:34 441

原创 SVN基本操作

5、回退已经提交的修改。4、回退未提交的修改。

2023-08-02 15:23:55 57

原创 Centos上修改默认路由以解决网络不通问题

对于网络工程师来说,比较常见的一种情况是使用有线网卡用来做局域网测试,而使用无线网卡用于上网冲浪,或者反过来。此时经常会发生无法访问互联网的情况,大概率是因为默认路由配置有误导致。

2023-07-26 14:05:07 1551

原创 网络流量低至2Mbitps,远低于网卡线速度

2、使用iperf3打流测试,基于TCP打流,速率与文件传输的速率接近;基于UDP打流,速率正常,接近网卡线速率。3、源机器上抓取文件传输数据包,发现巨帧,帧长约为8000字节,并且巨帧不断重传。6、由步骤1~3的现象可以确定速率问题由TCP重传机制导致,推测是巨帧被网关丢弃。4、中间交换机上抓取文件传输数据包,发现巨帧已经被分片,但是帧头没有分片标识。1、基于TCP的文件传输协议速率很低,约为2Mbitps,远低于网卡线速度。5、网关上抓取文件传输数据包,未发现巨帧,也即巨帧丢失。

2023-06-06 11:06:44 167

原创 【编译错误】multiple definition of `yylloc`

使用gcc-9或更早版本。

2023-05-31 13:29:09 2698

原创 【Openwrt编译错误】checking whether compiler driver understands Ada...

出现以下提示,之后编译的shell自动关闭。这是因为没有Ada语言编译环境。安装Ada语言编译环境。

2023-05-31 13:18:18 93

原创 【gmp编译错误】checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin

【代码】【gmp编译错误】checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin。

2023-05-31 11:02:41 1800

原创 【Openwrt编译错误】clang: error: linker command failed with exit code 1 (use -v to see invocation)make[5]

链接错误,提示一些内容重复定义。

2023-05-23 09:30:14 817

原创 【Openwrt编译错误】ISO C++17 does not allow dynamic exception specifications

【代码】【Openwrt编译错误】

2023-05-22 17:34:57 2928

原创 【Openwrt编译错误】m4编译错误

【代码】【Openwrt编译错误】m4编译错误。

2023-05-22 17:04:16 801

原创 Git建立本地仓库并关联远程仓库

4、创建README文件(可选)1、创建本地仓库文件夹。2、初始化新的本地仓库。

2023-05-18 11:25:56 881

原创 如何创建Git远程仓库并实现管理

5、复制秘钥到authorized_keys,authorized_keys需要放到本地用户的.ssh目录下。1、创建用户git-server。6、本地仓库免密ssh测试。7、安装远程git仓库。4、生成免密登录秘钥。

2023-05-18 10:14:42 66

原创 Ubuntu安装Samba服务

3、配置防火墙允许samba报文传输。6、创建共享目录并设置目录的用户组。1、更新软件包并安装samba。9、修改samba配置文件。2、查看samba状态。7、创建用户及用户组。

2023-05-15 17:14:08 278

原创 Ubuntu安装软件包时提示“更换介质***“

2、找到与“deb cdrom:[Ubuntu 22.04.2 LTS _Jammy Jellyfish_ - Release amd64 (20230223)]/ jammy main restricted”相似的行。在安装clang时提示“3、使用#注释掉这行。

2023-05-10 11:34:05 1616

原创 VMware安装Ubuntu不能全屏的超详细解决方法

解决VMware中Ubuntu系统不能全屏的超详细解决方案!!!

2023-05-10 10:22:39 9136

空空如也

空空如也

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

TA关注的人

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