[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 ...
随机推荐
- Laravel: 基础篇
一.安装 1)采用一键安装包 http://laravelacademy.org/resources-download 2)Mac 上安装 ----------在Mac上安装composer----- ...
- Python之关于量化投资实现代码--根据策略提出的代码--还未完善
# 根据缺口的模式选股买股票 ''' -------------------------------------------- 1.总体回测前要做的事情 initialize(context) 1.1 ...
- linux ls命令教程,ls命令怎么用,全部招数都教你
linux ls命令的用法大全 学习linux这么久了,最常用的命令莫属 ls命令了,今天就总结下ls命令的用法与经验技巧. ls命令按文件大小查看文件 a.降序:ls -lsh moudae ...
- 【原创 Hadoop&Spark 动手实践 1】Hadoop2.7.3 安装部署实践
目录: 第一部分:操作系统准备工作: 1. 安装部署CentOS7.3 1611 2. CentOS7软件安装(net-tools, wget, vim等) 3. 更新CentOS7的Yum源,更新软 ...
- Git忽略规则.gitignore忽略node_modules文件夹
在项目文件夹里添加.gitignore的文件 打开文件,在里面添加 /node_modules
- idea系列ide给git增加push按钮
第一步 打开设置 Appearance & Behavior -- Menus and ToolBars,选中VscNavBarToolBarActios,然后点击"+"添 ...
- [Java并发编程(五)] Java volatile 的实现原理
[Java并发编程(五)] Java volatile 的实现原理 简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 sync ...
- 解剖 Elasticsearch 集群 - 之二
解剖 Elasticsearch 集群 - 之二 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论 Elasticsearch 是如何处理 3C ...
- Altium Designer学习---如何进行SI仿真
Altium designer 如何进行SI仿真. 1.仿真电路中需要至少一块集成电路: 2.器件的IBIS模型: 3.在规则中必须设定电源网络和地网络: 4.建立SI规则约束: 5.层堆栈必须设置正 ...
- 【转】WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要有三种实现方式: 简单忙碌状态控件BusyBox: Win8/win10效果忙 ...