自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龙瑜的博客

我写的不是技术是情怀

  • 博客(448)
  • 资源 (3)
  • 收藏
  • 关注

原创 以变化的角度看待 dpdk 中向量收发包函数的限制

本文从描述 dpdk 支持的多种收发包函数的核心区别开始,想说明不同版本向量收发包函数使用的限制仅仅是【软件实现】的限制,这些限制随着技术的演进会被逐渐被打破。但长期维护某个特定版本很容易让维护者形成“不能”的固定思维,很容易得出“不支持”的结论。以成长的思维来看,这个结论今天能够成立,明天却不一定能成立。我相信技术发展的方向应该是以更小的限制同时集成多个技术的优点,这点也不仅限于 IT 领域,其它领域也有类似的过程。

2022-10-01 13:34:30 710

原创 linux 内核模块中引用符号是如何链接的?

Relocation section '.rela.init.text' at offset 0x2cb38 contains 5 entries: Offset Info Type Sym. Value Sym. Name + Addend000000000001 002800000004 R_X86_64_PLT32 0000000000000000 __fentry__ - 4000000000009 000d00000

2021-11-13 20:26:24 1800 1

原创 在不支持 sse3 及其以后的 x86_64 向量指令的环境中运行 dpdk 程序的修改思路

在不支持 sse3 及其以后的 x86_64 向量指令的环境中运行 dpdk 程序的修改思路

2024-03-29 15:42:12 995

原创 dpdk secondary 进程与 primary 进程同步失败问题分析

dpdk secondary 进程与 primary 进程同步失败问题分析

2024-03-27 08:00:00 844

原创 dpdk secondary 进程 fd 不足问题分析

dpdk 缺省以大页的单位做内存映射创建大页内存文件的方式会随着映射文件数目的增多,使用更多的 fd,当系统对 dpdk 进程的 open file max 限制很低时就容易出现 fd 不足的问题。这时候使用 single-file-segments 参数能够很好地解决该问题,甚至于可以缺省配置该参数,从根源上解决此类问题。

2024-03-24 08:00:00 369

原创 dpdk 对网卡 lsc 中断的支持与配置及其隐含的问题

dpdk 对网卡 lsc 中断的支持与配置及其隐含的问题

2024-03-23 12:23:44 950

原创 vmovdqu 指令运行触发指令异常问题分析

dpdk 中有许多向量指令的使用场景,收发包函数优化就是一个很典型的示例,一般来说一个网卡都有几套收发包函数,根据向量指令划分,有支持 sse、avx、avx512 这几个版本,实际应用中编译环境一般只有一套,运行环境却可能存在多套,这样就存在不兼容的问题。

2024-03-21 08:00:00 666

原创 dpdk-19.11 对向量指令的使用情况分析

dpdk-19.11 对向量指令的使用情况分析

2024-03-15 08:00:00 902

原创 如何在安装 UOS 桌面版的笔记本电脑中实现光盘自动挂载?

UOS 自动挂载光盘

2024-03-07 08:00:00 685

原创 如何构建第三方 snap core 包并在其它组件中引用?

执行 unsquashfs 解压现有 core 包到指定目录删除解压出来的 rootfs 中的旧目录,保留部分必要的空目录,然后复制新的 rootfs 目录(需要去掉所有使用 suid 执行的程序)执行重新生成 snap 包将新生成的 snap 包替换到 /var/lib/snapd/snaps/ 目录中重启系统,重新挂载 snap 包,此时新的 core 包生效备注:cp 执行后,suid 权限自动丢失,没有再额外处理权限问题。执行上述操作后,测试验证可以正常使用。

2024-02-27 07:00:00 913

原创 如何本地构建一个 dpdk l2fwd snap 包?

基于 dpdk-19.11 l2fwd 程序及其依赖库本地构建一个 snap 包,能够在 ubuntu 20.04 桌面环境中安装并测试运行。

2024-02-26 22:00:00 306

原创 dpdk 程序如何配置网卡收发包队列描述符配置?

网卡收发包队列描述符配置看似是一个小的配置,其背后也有诸多细节。如何确定一个最优的配置常常不是一个容易的问题,需要对现有的实现跟底层原理有相对清晰的了解,既知道哪种配置是最优的,也知道为啥它是最优的,这点就相对有些难度了。

2023-11-06 21:00:00 892

原创 linux 发行版中在容器内访问热插拔 U 盘的分区内容

在UOS 如何实现自动将 U 盘挂载到指定目录中?这篇文章中,我描述了 UOS 自动挂载 U 盘到指定目录的方式,现有的发行版处理逻辑大致相同。当挂载位置确定后,容器内的业务逻辑要访问 U 盘分区中的内容,看上去只需要映射宿主机目录到容器内就万事大吉了,实际测试却发现这种方式存在一个严重的问题,最后使用了 docker volume 来实现此需求,在本文中记录一下。对某些技术原理的欠缺容易造成错误的判断,误认为它应该是怎么样,实际测试却发现它不是那样。

2023-08-30 22:16:51 1230

原创 UOS 如何实现自动将 U 盘挂载到指定目录中?

项目功能开发需要支持自动将 U 盘挂载到某个业务文件夹中进行访问,不能使用缺省方式。

2023-05-13 09:15:53 1908 1

原创 从 seccomp filter 学习内核 bpf 自定义 hook 点的设计实现

本文从概览的角度整理了几个内核实现自定义 bpf hook 点的核心逻辑,从实现层面看还是有一定的复杂度,在后面的文章中可以探讨下 bpf hook 点如何与内核已有的探针机制——tracepoint 结合起来,实现更为灵活的功能。

2023-05-11 19:03:38 1058 3

原创 未设置 cpumask 时 dpdk 程序使用的 cpu 核

dpdk 内部逻辑核线程的创建按照使能的逻辑核掩码进行,dpdk 程序可以通过设定 -c、-l 参数来配置需要使能的逻辑核掩码。在公司内部项目开发时遇到了未指定这两个参数的情况,通过 top 观测到此时 dpdk 程序在每个逻辑核上都创建了线程,于是研究了下这种场景下 dpdk 内部的处理过程,在本文中记录一下。

2023-02-01 18:10:33 715

原创 dpdk 程序适配麦洛斯 mlx5 网卡

使用 dpdk-16.04 版本的数通引擎需要适配 Mellanox 网卡,需要支持 dpdk secondary 进程正常收发包。

2023-01-08 10:00:00 4133

原创 dpdk-19.11 i40e 驱动在 c236 机器上未使用 avx 收发包函数问题分析

在 c236 机器下,dpdk-19.11 程序使用 x710 网卡时,默认配置下收包模式一直为 Vector SSE,不能使用 AVX2 收包函数。

2022-12-13 20:00:00 940

原创 海光 cpu kvm 虚拟机中 dpdk virtio 网卡 MMIO 方式访问网卡 resource bar 空间卡住问题分析

海光 cpu kvm 虚拟机中 dpdk virtio 网卡 MMIO 方式访问网卡 resource bar 空间卡住问题分析

2022-12-11 18:58:19 2589 2

原创 VPP plugin so 的封装与解耦

根据上文的描述,每个 plugin 封装了独立的功能模块,不同的 plugin 之间不应该相互依赖,但是在一些场景中可能存在需要在一个 plugin 中调用另外一个 plugin 中提供的函数的情况,这时候可能只是简单的使用某个、某几个接口,为这几个接口单独开发一套 interface 类显得有点小题大做,为此 vpp 提供了 vlib_get_plugin_symbol 函数,用于在一个 plugin 中获取其它 plugin 中的接口直接使用。

2022-12-11 17:33:51 864

原创 UNPV2 学习:Posix Message Queues Exercise 解答记录

未从 sysconf 中找到获取该项目的类型。只能收到第一条消息,第二条消息无法处理。mq_notify 注册的消息通知事件在被通知一次后会自动移除,在信号处理函数中不重新注册则无法捕获后续的事件。同时第二条消息还在队列中也不会触发通知事件,进程将一直空转。只能收到一个 SIGUSR1 信号,由于不从队列中接收,只在投递第一条消息的时候会触发通知,后续消息由于队列不为空,尽管在信号处理程序中注册了 mq_notify,内核不会发送通知。debian11 中 SIGRTMIN 与 SIGRTMAX 宏定义如

2022-12-06 08:59:19 169

原创 UNPV2 学习:POSIX 实时信号

信号可以被分为两组:实时信号的工作特点:实时信号由下列 Posix.1 特性产生 ,它们由包含在传递给信号处理程序的 siginfo_t 结构中的 si_code 值标识。linux 中可以使用 sigaction 函数注册实时信号的处理函数,非实时的信号处理函数也可以使用此函数注册并携带更多的信息,其原型如下:signum 为待设定的信号值,act 为信号处理函数属性的封装结构,oldact 用于返回旧的配置。

2022-12-05 09:10:51 427

原创 UNPV2 学习:Posix Message Queues

Posix 消息队列内部维护了一个引用计数,当引用计数大于 0 的时候目标消息队列能够从系统中移除,但是队列的释放仅在最后一次 mq_close 发生时才会触发。mq_notify 函数为 Posix 消息队列提供了一种异步通知机制,当消息被放到队列中时通知消费者进程, System V 消息队列就不具备这样的能力。在调用 msgrcv 函数从 System V 消息队列中接收消息时进程可以挂起等待消息,但是在挂起期间不能执行任何其他任务。如果指定 NONBLOCK 标志调用 msgrcv 函数,进程不再阻

2022-12-04 06:31:14 798

原创 linux 中 mq_notify 创建线程监控消息队列实现原理

在 UNPV2 学习:Posix Message Queues 这篇文章中,我描述了 mq_notify 的不同处理机制,写博客的同时我也使用原书的附录代码在我本地 linux 环境中进行了测试。在本文中我将从 strace 跟踪新建线程监控队列消息示例 demo 开始,完整描述 mq_notify 工作的原理。此进程首先创建了一个 Posix 消息队列,然后获取消息队列的属性得到消息大小 8192,此后的逻辑看上去与示例代码并无关系,它执行了如下过程:分析示例代码不难猜到上述过程大概率是 mq_noti

2022-12-04 06:29:16 1001

原创 UNPV2 学习:Pipes and FIFOs 学习记录

linux 中 mkfifo 函数并不是一个系统调用而是一个 C 库函数,mkfifo 函数最终会调用 mknode 系统调用创建 fifo。打开一个 fifo 来读时,内核会判断此 fifo 上是否有写者,如果没有则调用 wait_for_partner 函数挂起当前进程等待对端就绪。相关代码如下:上述代码首先递增 pipe 内部计数器 r_counter,当 readers 计数递增前值为 0 时调用 wake_up_partner 尝试唤醒阻塞在以 WRITE 模式调用 open 系统调用阻塞的进程

2022-12-04 06:11:52 550

原创 UNPV2 学习:System V IPC 章节学习问题记录

OS:debian11kernel:linux kernel 5.15linux 上 System V IPC 实现的一些特点查看 System V IPC 占用率可以使用 lspic 来查询 System V IPC 状态信息,示例如下:缺省的限制为 32000,lspic 能够显示消息队列的使用情况,在上面的实例中,有 10 个消息队列被使用,占用率约为 0.03%。创建 System V IPC 的进程退出时内核不会回收 ipc,除非主动调用释放函数。ipc id 泄露完了后,再次尝试创建会

2022-12-03 12:13:14 682

原创 macOS 使用 X11 运行远端 linux 中的 x11 client 图形程序

此时仍旧设置了 DISPLAY 后 connect 6000 端口成功,随后 connect ip+6010 地址会失败,而 X11.bin 并不会监听 6010 端口,这个 6010 端口网上搜索到可能与 sshd 配置中的 X11DisplayOffset 10 配置有关,暂且打住。此条连接建立后,xclock 通过此条通道走已经建立的 ssh 隧道转发 X11 图形界面数据到 MacOS,MacOS 中会自动打开 xquartz,弹出 xclock 的图形界面。

2022-11-29 08:46:34 2223

原创 dpdk-16.11 virtio 驱动初始化卡住问题定位

dpdk 驱动对 virtio modern 设备会先尝试使用 modern pci ops 的方法读写网卡寄存器,当尝试失败后再继续尝试 legacy pci ops,这个顺序并不能调整,如果将 legacy pci ops 尝试放到前面,那一些 virtio modern 网卡就不能使用 modern pci ops 来读写网卡寄存器,性能会下降。,毕竟 qemu 并不区分虚拟机中的内核与用户态程序,而且其实内核与用户态程序只是分时执行代码,qemu 侧不应该有这个区别。

2022-11-28 09:00:00 838

原创 virtio_net 与 virtio-pci 驱动关联浅析

virtio-pci 驱动可以看做是一个 virtio bus 底层的驱动,它对接 pci 总线,并创建新的 virtio 设备注入到 virtio 总线中,根据设备的类型 match 不同的 virtio 上层驱动以提供某一类服务。

2022-11-27 16:10:38 1433

原创 如何理解 dlopen 的 RTLD_LOCAL flag?

本文通过一个 demo 程序来理解 dlopen 的 RTLD_LOCAL flag

2022-11-15 09:00:00 1339

原创 理解 dlopen manual

本文翻译了 debian11 上 man dlopen 的内容,旨在通过翻译来学习 dlopen 支持的功能。

2022-11-14 09:00:00 1135

原创 如何快速定位 dpdk memzone 内存泄露问题?

许多问题的复杂性不在于问题本身,而是难以获取到足够根因闭环的信息。这些信息的缺失一部分来源于框架自身实现与信息收集工具的缺失,另一部分来自于维护者对框架的理解的不足。对这两点不足进行反思并持续改进,当维护者对框架实现了然于胸,可用的工具也一抓一大把时,许多看似困难的问题将会迎刃而解。

2022-11-13 09:00:00 859

原创 etcd 数据库连接报错:grpc: Conn.transportMonitor exits due to: grpc: timed out trying to connect

根本原因是用于消息通信的 key 没有删除,在持续更新,etcd 记录了所有版本变化到数据库,持续频繁通信导致 etcd 数据库大小不断增大,最终导致磁盘空间被占满,etcd 异常退出。表面原因是本地磁盘空间较小,etcd 数据库持续扩展在一定时间后将本地磁盘空间占满,无法存储数据后异常退出,故而不能再提供服务,连接 etcd 数据库报超时。查看磁盘占用情况,发现 /var/ 所在的分区已经占满。用于通信的 etcd key 在通信完成后即从 etcd 数据库中删除,避免 etcd 数据库大小持续扩展。

2022-11-12 15:57:40 573

原创 dpdk 基于 rte_tailq_head 在多进程间共享内存的原理

在 rte_mem_config 的 tailq_head 数组中为每一个注册的 rte_tailq_elem 结构分配一个 rte_tailq_head 链表头,并将 rte_tailq_elem 中的 name 字段拷贝到分配出的 rte_tailq_head 结构的 name 字段中,然后更新 rte_tailq_elem 的 head 字段为分配的 rte_tailq_head 地址。

2022-11-05 15:11:27 695

原创 dpdk 多进程共享内存描述信息的机制

dpdk 多进程模型以共享大页内存为基础,实际实现中仅仅共享大页内存还不够,还需要共享内存分配的一些描述文件,这就是 rte_config 等结构的由来。使用这些结构,dpdk 能够灵活的在某个进程中找到在另外一个进程中分配的内存来使用,表面看上去好像不符合每个进程虚拟地址独立的特点,其实不过是因为这些虚拟地址指向的物理地址完全一致而已。

2022-11-04 09:00:00 1238

原创 dpdk legacy memory 模型浅析

开篇中概括了 dpdk legacy memory 架构,描述了此架构的一些特点,从工作流程中能够看出这种架构实现复杂且不优雅,使用中也有诸多限制。18.5+ 版本后新的内存框架引入,解决了 legacy memory 框架存在的几个关键问题,实现更简单,支持的场景更多,在后续的文章中我将进行分析。

2022-11-04 09:00:00 934

原创 dpdk 多进程模型对 pmd 驱动实现的要求

dpdk 多进程模型支持在多个进程间共享网卡硬件资源,一般会在 primary 进程中进行网卡初始化, secondary 进程中不再进行初始化,仅仅执行必要的本地化逻辑。实现这一功能的基础是基于大页内存的数据共享以及不同类型进程的不同初始化逻辑。实际测试发现不同的 pmd 驱动多多进程模型的支持情况不太一样,有些能够正常工作,有些却不能正常工作。这些不能正常工作的驱动,存在的主要问题是访问共享数据中的本地内容。

2022-11-03 09:00:00 788 3

原创 arm 架构下内核打印的 oops 信息中的 Code 字段解析

在定位某个内核 oops 问题中,对 arm 架构 oops 信息中的 Code 字段输出信息的内容不太明白,查看内核 Documentation 文档得到如下信息:“Code” 之后的十六进制字节可能(在某些架构上)有一些当前指令之前的指令以及当前指令和之后的指令上述解释并不容易理解,于是阅读了下代码并编写了一个内核模块进行验证,在本文中记录一下。

2022-11-02 09:00:00 307

原创 能否在 vpp 外部释放 vpp 创建的 vlib buffer?

基于 vpp 引流,vpp 负责将流量外发到其它 dpdk secondary 进程中进行处理,当外部的 dpdk secondary 进程异常退出后,需要回收这部分报文,避免 buffer 泄露。

2022-11-01 09:00:00 315

原创 kpatch 内核热补丁几个使用问题记录

本文记录了 kpatch 热补丁技术的几个常见使用问题。

2022-10-31 09:30:00 488

config-ligth

个人裁剪的 debian10 4.19 内核 config 文件,主要针对 desktop 版本进行了裁剪,裁掉不使用的内核模块,便于编译替换与测试

2020-09-30

Linux操作实验报告

Linux基础命令

2016-06-30

Installing TeX fonts

Installing TeX fonts

2016-03-20

空空如也

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

TA关注的人

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