[dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备
〇 需求
在DPDK程序运行时,希望能够实时的操纵PCI 网卡设备的驱动绑定与解绑。
本文的目的是为了调查满足以上需求的,kernel提供的,标准的API都有几种,分别是什么。以确定实施方案。
一 背景
我们已知有三个方法:
1. dpdk_devbind.py
2. driverctl [administrator][driver] driverctl 是如何在udev上层管理设备驱动的
3. sysfs
[knowledge][linux][sysfs] sysfs文件系统
[dpdk] 读官方文档(2) 这里有个bind/unbind章节。
二 分析
分析driverctl的源码
driverctl 是一个bash脚本,也是用sysfs实现的。原理如下:
# 加载
> echo pci-stub > /sys/bus/pci/devices/::00.0/driver_override
> echo ::00.0 > /sys/bus/pci/devices/::00.0/driver/unbind
> echo ::00.0 > /sys/bus/pci/drivers_probe
>
# 卸载
> echo > /sys/bus/pci/devices/::00.0/preferred_driver
> echo ::00.0 > /sys/bus/pci/devices/::00.0/driver/unbind
> echo ::00.0 > /sys/bus/pci/drivers_probe
>
分析dpdk_devbind.py的源码
用lspci配合sysfs实现。
但是在dpdk-devbind中,做个了一个判断,同时支持新旧两种方式。
新的方式与 driverctl 的实现相同。
旧的方式与先前我们在sysfs下的做法一样,用new_id来操作, 如下:
[root@T9 usertools]# echo ::04.0 > /sys/bus/pci/drivers/igb_uio/unbind
[root@T9 usertools]# echo "1af4 1000" > /sys/bus/pci/drivers/virtio-pci/new_id
或
[root@T9 usertools]# echo "0000:00:04.0" > /sys/bus/pci/drivers/virtio-pci/bind
根据dpdk-devbind中的注释和邮件列表的patch邮件信息: 新的driver_override方式是kernel version >= 3.15才支持。但是实际调试过程中,我当前在redhat kernel version 3.10的环境里,便已经支持了新的方式了。
patch: https://patches.linaro.org/patch/27588/
三 结论
1. 以上三种方式是同一套接口,都是通过文件系统对sysfs进行读写操作来实现的。
2. 具体的sysfs操作方法有前文提到的两种。 推荐较新的一种,即通过driver_override.
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-platform
[dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备的更多相关文章
- 【DPDK】谈谈DPDK如何实现bypass内核的原理 其一 PCI设备与UIO驱动
[前言] 随着网络的高速发展,对网络的性能要求也越来越高,DPDK框架是目前的一种加速网络IO的解决方案之一,也是最为流行的一套方案.DPDK通过bypass内核协议栈与内核驱动,将驱动的工作从内核态 ...
- [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理
[中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理 Introduction to DPDK: ...
- VMware上配置DPDK环境并运行实例程序
1. 在虚拟机VMware上配置环境 VMware安装:http://www.zdfans.com/html/5928.html Ubuntu:https://www.ubuntu.com/downl ...
- 错误内存【读书笔记】C程序中常见的内存操作有关的典型编程错误
题记:写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 对C/C++程序员来讲,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的 ...
- winform程序中界面的跳转问题
首先是我们进行窗口间的跳转,尤其注意的是winform程序里面的空间都是中线程安全的.但是注意的是如果你在一个线程中操纵另外的控件,这时候会提示你一个错误,这个错误的解决方法准备单独的在另一篇文章中来 ...
- 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等
在上篇随笔<基于微信小程序的系统开发准备工作>介绍了开发微信小程序的一些前期的架构设计.技术路线 .工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及 ...
- 《Windows核心编程系列》十三谈谈在应用程序中使用虚拟内存
在应用程序中使用虚拟内存 Windows提供了以下三种机制对内存进行操控: 一:虚拟内存.最适合来管理大型对象数据或大型结构数组. 二:内存映射文件.最适合用来管理大型数据流,以及在同一机 器上运行的 ...
- 利用 gnuplot_i 在你的 c 程序中调用 GNUPLOT
这是一篇非常早曾经写的小文章,最初发表于我的搜狐博客(2008-09-23 22:55).由于自从转移到这里后,sohu 博客就不再维护了,所以把这篇文章也一起挪了过来. GNUPLOT 是一款功能强 ...
- 微信小程序中获取高度及设备的方法
由于js中可以采用操纵dom的方法来获取页面元素的高度,可是在微信小程序中不能操纵dom,经过查找之后发现仅仅只有以下几个方法可以获取到高度 wx.getSystemInfoSync().window ...
随机推荐
- golang编译库文件方式
// as c-shared library $ go build -buildmode=c-shared -o nautilus.a nautilus.go // as c-archive $ go ...
- 行为链分析zipkin
行为链分析zipkin - 跑zipkin python例子 https://github.com/openzipkin/pyramid_zipkin-example # get the latest ...
- Linux好用的工具命令 - rz/sz
Linux系统中将本地的文件上传到服务器或者从服务器上下载文件到本地可以通过安装lrzsz工具来简单便利的完成. >>RZ :将本地的文件上传到服务器 >>SZ:从服务器上下载 ...
- Asp.Net MVC上传图片
mvc上传图片 [HttpPost] public JsonResult Upload() { ) { ) { HttpPostedFileBase file = Request.Files[]; ) ...
- 【Git】git pull和git pull --rebase的使用
git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git merge和git rebase ...
- Js 动态添加的数据,监听事件监听不到
在开发中遇到这种问题,就是有些数据,比如按钮是动态添加进去的,结果添加事件监听无效,直接写死在页面上是可以的. 这就是很明显的加载先后顺序的问题了. 解决的方法: $(document).ready( ...
- 交换上的FLAPPING事件 (zhuan)
今天在学校的一个三层交换上看到持续的日志信息: Host 00:E0:FC:09:BC:F9is flapping between fa0/x and fa0/y. 思科对此官方的解释是: Error ...
- 第四百一十四节,python常用算法学习
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
- WinForm中一个窗体调用另一个窗体
[转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...
- linux下用php将doc、ppt转图片
解决方案分成两步: (1)调用unoconv命令将 doc.ppt 转 pdf (2)使用 imagemagick将 pdf 转图片 步骤 1.安装unoconv sudo apt-get insta ...