- 博客(37)
- 收藏
- 关注
原创 DPDK 网络驱动 之 UIO
UIO 是一种允许在用户空间进行 I/O 操作的机制,它为开发者提供了在用户空间直接访问硬件设备的能力,而无需编写复杂的内核驱动。通过 UIO,开发者可以更灵活、高效地开发与硬件交互的应用程序。
2025-07-07 21:19:43
943
原创 DPDK 网卡驱动 之 VFIO
关于 VFIO 我遇到很多问题,也了解很多内容,所以想单独写一篇。VFIO 依赖于vfio_pci 模块,通常情况下,所有主流操作系统发行版默认都已包含 VFIO 内核模块。通常需要自己检查一下,如果没有安装的话就手动 insmod 一下。
2025-07-07 00:35:15
630
原创 DPDK 网卡驱动
DPDK 里的 PMDs 负责处理网络数据包与内存之间的数据交互。而接下来提到的 UIO 和 VFIO 是两种不同的驱动方式,允许 DPDK 绕过内核网络栈,直接在用户空间高效地访问硬件设备。这部分内容会围绕使用这两种驱动的 PMDs 展开,可能会涉及到它们的配置、使用场景、性能特点等方面。
2025-07-05 23:45:48
696
原创 DPDK 交叉编译
摘要:本文详细介绍了在Ubuntu系统上安装两种ARM架构交叉编译工具链的方法(aarch64-none-linux-gnu和arm-linux-gnueabihf),包括通过包管理器自动安装和手动下载配置两种途径。同时提供了NUMA库的编译安装方法、Meson构建系统的配置说明,以及针对不同ARM SoC的编译选项设置。特别强调应避免在Windows/Linux共享目录进行编译操作,建议在虚拟机系统内部目录完成编译工作。文中还包含环境变量配置、工具链验证等实用操作指南,为ARM架构的交叉编译开发提供了完整
2025-07-05 16:15:14
741
原创 GO 语言学习 之 结构体
Go语言中的结构体(struct)是一种复合数据类型,允许组合不同类型的数据成员。结构体定义使用type和struct关键字,支持成员函数、嵌套结构和指针操作。与C语言不同,Go中指针变量和普通变量都用"."访问成员。结构体常用于数据建模,如学生信息管理示例所示,包含学号、姓名等字段,并定义了打印方法。创建方式包括直接初始化、指针引用(new)和匿名结构体。通过结构体指针可修改原始数据,适用于JSON/YAML解析等场景。
2025-07-04 23:30:30
358
原创 DPDK开发环境配置(补充内容)
上一篇文章我们简单介绍了编译的过程,在这里不出一点关于配置的内容。meson build 的结果是在当前目录创建一个 build 目录,后续的编译过程,在build 目录里面进行,编译结果安装到 /usr/local/ 目录下面。在你执行 install后,就会在 /usr/local/includ/ 下面找到 以 rte_ 开头的头文件, /usr/local/lib/x86_64-linux-gnu/ 目录下就是 DPDK 编译安装的库文件。其实,如果你仔细看了编译安装的提示信息,你早就发现了。
2025-07-04 21:30:19
989
原创 DPDK开发环境配置
1. Vmware虚拟机2. Ubuntu 20.04 64位系统 (Kernel version >= 4.19)(uname -r)3. 系统安装(4核8G 看配置情况吧)这句话告诉我们选择的版本应该问题不大。5. HugePage配置 (我的虚拟机配置)/etc/fstab# 添加 hugepage。
2025-07-03 23:31:54
902
1
原创 GO 语言学习 之 Map
var m1 map[int]string // 创建一个 mapm2 := make(map[int]string) // 创建一个 mapm3 := make(map[int]string, 10) // 创建一个长度为 10 的 mapm4 := map[int]string {1:"1111", 2:"2222", 3:"3333"} // 创建并初始化 mapif ok {} else {fmt.Println("m1 的内容 :", key, value)
2025-06-30 22:58:49
210
原创 GO 语言学习 之 数组和切片
摘要:本文介绍了Go语言中数组和切片的基本概念与用法。数组是固定长度的数据集合,定义时需要指定大小和类型,长度不可变且为值类型。切片则是对数组的引用,具有动态增长特性,包含指针、长度和容量三要素。切片可通过直接定义、make函数或数组切片操作创建,支持append追加、copy拷贝等操作。文章通过代码示例展示了数组和切片的声明、初始化、修改、遍历等常见用法,特别强调了切片的动态扩容机制及其与数组的本质区别。切片因其灵活性在实际开发中应用更为广泛。
2025-06-29 23:49:29
256
原创 GO 语言学习 之 变量和常量
var <变量名> <变量类型><变量名> := <变量值>const <常量名> = <常量值>const (<常量名1>, <常量名2>. ...)
2025-06-27 20:03:03
470
原创 GO 语言学习 之 运算符号
本文介绍了Go语言中的各类运算符及其用法:1. 算术运算符包括二元运算符(加减乘除和取模)和一元运算符(自增自减);2. 关系运算符用于比较操作数并返回布尔值;3. 逻辑运算符操作布尔表达式;4. 位运算符对数值进行二进制位运算;5. 赋值运算符用于修改变量值,可结合算术、逻辑和位运算符使用。文中通过代码示例详细演示了每种运算符的具体应用场景。
2025-06-25 23:02:11
436
原创 多线程编程 之 为每一个CPU核绑定变量副本
在 C 语言中,要为每个 CPU 核心分配独立的全局变量副本,可使用方法实现。通过__thread关键字或实现每个线程独立的变量副本。若每个线程绑定到固定 CPU 核,则间接实现核级独立变量。
2025-06-25 12:01:09
307
原创 GO 语言学习 之 代码风格
是 Go 语言提供的一个命令行工具,用于格式化 Go 语言代码。它能自动对 Go 源文件进行排版,使其符合 Go 语言社区普遍认可的风格规范,大大提高代码的可读性和一致性。
2025-06-23 23:07:38
277
原创 GO 语言学习 之 helloWorld
摘要:本文介绍了Go语言的基础入门知识,通过分析Hello World示例程序,讲解了Go代码的执行过程、依赖处理和基本结构。重点包括:1)main函数的特殊规则;2)import语句的使用方法;3)Go语言的可见性规则(大写字母开头为公开,小写为私有);4)代码编译与运行的两种方式(go build和go run)。文章还解释了Go这种命名可见性设计的原因,包括简化访问控制、强制模块化等优点。
2025-06-22 21:10:21
329
原创 NotePad++ 怎么没有找到插件管理?
今天想使用NotePad++阅读markdown文档,却发现未安装插件,本想通过插件管理安装一下,结果没有插件管理!将插件里面的 dll 文件拷贝到 plugins 目录。我发现帮助菜单里面有一个入口。可惜的是网页无法打开。重新打开就可以使用了。只能自己下载插件了。
2025-06-22 12:59:00
302
原创 安装oVirt环境
注意:所选 CPU 必须支持 Intel® 64 或 AMD64 CPU 扩展,并启用 AMD-V™ 或 Intel VT® 硬件虚拟化扩展。4 GB 的可用系统 RAM(如果未安装 Data Warehouse 且现有进程未占用内存)。一个四核 x86_64 CPU 或多个双核 x86_64 CPU。1 个带宽至少为 1 Gbps 的网络接口卡 (NIC)。1 个带宽至少为 1 Gbps 的网络接口卡 (NIC)。25 GB 本地可访问的可写磁盘空间。50 GB 本地可访问的可写磁盘空间。
2025-03-12 23:19:49
398
原创 定位 iptables 拒绝建立链接
这里主要是看你的数据包走了那些规则,详细信息里有每条规则匹配了多少个数据包,你发一次对比的观察一下,就差不多能发现都匹配了那些规则。实在是不行还可以开启日志,但是开启日志一定要有条件,不加条件会导致系统特别慢。而且日志特别多看起来还是挺麻烦的。然后,可以尝试删除或者禁用这些规则的方式看是否可以正常通信。到这里基本就能找到是那条规则影响了。如果开了多个就关闭他们只开一个。这里就使用iptables。检查其他防火墙软件的状态避免有干扰。
2025-03-07 00:30:39
218
原创 Mysql limit 关于-1的问题
听人说过可以用-1作为最大值,尝试了上网查一下,结果失败了。具体原因在下面https://bugs.mysql.com/bug.php?id=2037
2017-08-23 09:34:57
7756
原创 安装RPM包包错总结
1)在CentOS6.4 64位系统上安装RPM包,报错:error: Failed dependencies:libc.so.6 is needed by RDV-5.2.0-20170109.x86_64libc.so.6(GLIBC_2.0) is needed by RDV-5.2.0-20170109.x86_64libc.so.6(GLIBC_2.1) is neede
2017-01-09 12:25:35
359
原创 编译错误error: invalid storage class
这个问题排查了,好一段时间,无果。百度一下,发现遇到这个问题的人还挺多的。大家的解决方案都是括号不匹配,应该是多了或少了吧。我就仔细检查了一下代码。由于编辑器自带了检查括号是否配对功能。所以,咋一看,没问题。最后,发现是一处,调用系统的宏定义的毛病。这个宏定义包含了左括号 “{”,而我在使用的时候,我又添加了一个左括号。去掉后,编译通过。
2016-12-20 09:58:50
4643
原创 net_device——type字段
struct net_device { ... unsigned short type; ...}这个字段标识了设备所述的类型:Ethernet等。定义在 include/uapi/linux/if_arp.h中: 28 /* ARP protocol HARDWARE identifiers. */ 29 #define ARPHRD_NETROM 0
2016-12-15 11:48:15
1545
原创 Linux内核——遍历 net_device 结构
linux内核版本 : 2.6.32extern struct net *init_net; /* 存放net_device的全局变量 */extern rwlock_t dev_base_lock; /* Device list lock *//*这些是我们遍历 net_device 结构的循环 */#defin
2016-12-14 17:35:57
6836
原创 ubuntu 14.04安装live555并支持MP4格式播放安装过程
安装live555:下载源码解压:tar -zxvf live555-latest.tar.gz编译:cd live./genMakefile ===========>linux / othersmake到此时,你可以使用源码自带的live服务器了:支持MP4格式:从网上查到有人做过类似的事情,想直接拿过来用。但是,不容易呀,搞
2016-03-03 14:33:23
2878
1
原创 Erlang 的 spawn() 使用时,值得注意的一点
spawn() 在使用的过程中遇到一个有趣的事儿,描述如下:A: spawn(fun() -> io:format("hello world~n", []) end),B: spawn(out_put()).以上两种方式的处理方式不同。区别在于: A 直接返回 进程ID 而B 知道 out_put()结束才返回进程ID。实例:情况A:-modu
2015-03-19 21:23:08
911
原创 Erlang Process
ProcessErlang 设计用于高并发。Erlang 进程是轻量级进程,支持内存伸缩的低内存映射,快速创建、终止和调度都是很低的切换。Process Creation创建一个进程通过调用 spawnI(), 例如: spawn(Module, Name, Args) -> pid() Module = Name = atom()
2015-01-21 15:11:15
579
NotePad++插件MarkdownViewer
2025-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人