当前位置: 首页 > news >正文

阿坝州建设局网站刘志彬wordpress 修改目录权限设置

阿坝州建设局网站刘志彬,wordpress 修改目录权限设置,外包优化网站,wordpress+qq微信登陆介绍在Linux下有两种启用用户态驱动的子系统#xff1a;一个是UIO#xff0c;另一个是VFIO#xff0c;ixy这两种都支持。 UIO通过虚拟文件系统sysfs下的内存映射文件来暴露所有必要的接口以完成用户态的驱动。这些基于文件的系统调用接口给了我们充足的权限来获取设备资源而…介绍 在Linux下有两种启用用户态驱动的子系统一个是UIO另一个是VFIOixy这两种都支持。 UIO通过虚拟文件系统sysfs下的内存映射文件来暴露所有必要的接口以完成用户态的驱动。这些基于文件的系统调用接口给了我们充足的权限来获取设备资源而不需要写任何内核代码。ixy要卸载到所给PCI设备的任何内核驱动以避免冲突比如当ixy正在运行时NIC的任何驱动都不会被加载。 VFIO提供了更多的特性IOMMU和中断且这些只能由VFIO提供。然而这些特性会带来额外的复杂度开销它要求PCIe设备和通用的vfio-pci驱动绑定然后它会在指定的文件上通过ioclt系统调用提供API。 第一个需要理解的是用户态驱动如何与设备打交道的也就是理解驱动是如何写在用户态的。驱动能够与PCIe设备通信的两种途径驱动能初始化到设备BAR的访问通道或设备能初始化DMA通道映射到任何的主存储区。BARs是由设备暴露配置信息给驱动并给驱动来控制寄存器。这些寄存器可以通过内存映射IO方式(MMIO)获得也可以通过依赖于设备的X86 独立IO获得后者在PCIE设备上不推荐使用。操作设备寄存器 MMIO将设备IO与内存空间映射起来比如从这块内存区域读取或写入来完成向设备的接收或发送操作。UIO用虚拟文件系统暴露所有的BARs这样有权限的程序就可以简单地把BARs映射到它自己的地址空间。VFIO提供了一个ioctl返回映射到这片区域的内存地址。设备通过这个接口暴露出它的配置寄存器这样用户就可以用读写的方式来访问寄存器了。例如ixgbe网卡设备通过BAR0地址空间暴露出所有的配置寄存器状态寄存器和调试寄存器。这些映射的实现是在pci.c文件的pci_map_resource()函数和在libixy-vfio.c文件的vfio_map_region()函数里。不幸的是VirtIO在我们的实现与VirtualBox的兼容版本中是基于PCI而不是在 PCIe 其 BAR 是一个 IO 端口资源必须使用古老的 IN 和 OUT x86 指令进行访问这些指令需要IO 权限。 Linux能通过ioperm授予进程必要的权限,DPDK为他们的VirtIO驱动使用这样的通道。我们发现这种初始化工作太复杂因为它需要解析 PCIe 配置空间或 procfs 和 sysfs 中的文本文件来初始化。Linux uio 通过sysfs的文件暴露出BAR空间但与 MMIO 对应项不同这些文件无法进行 mmap。这些文件能被打开并通过通用的读写调用来访问然后由内核转换为相应的 IO 端口命令。我们发现这样做更便于使用和理解但由于所要求的系统调用而变得更慢。实现代码可见pci.c文件内的pci_open_resource()函数device.h文件内的read/write_ioX()函数。 一个潜在的陷阱是读取和写入的确切大小很重要例如访问单个 32 位寄存器用 2 个 16 位读取通常会失败并且用一次大的读取来尝试读取多个小单位的寄存器通常是不支持的。确切的语义取决于设备Intel的ixgbe NIC仅公开支持部分读取的 32 位寄存器除了读取时清除寄存器但不是部分写入。VirtIO 使用不同的寄存器大小特别是任何访问宽度应该是可以在我们正在使用的模式下工作的事实上对齐且大小正确的访问可以可靠地工作的。用户态的DMA DMA是由PCIe设备初始化的并允许它读写任意的物理地址。这被用来在驱动和网卡之间传输数据包和存放在DMA上的数据包描述符指向数据包。DMA需要在设备的PCI配置空间里显示地使能我们在pci.c的enable_dma()函数里实现了这个使能同样在libixy-vfio.c的vfio_enable_dma()函数为VFIO同样实现了这个使能。 DMA的内存分配在UIO和VFIO之间是不同的。UIO的DMA内存分配 用于DMA的内存空间必须是常驻于物理内存区域。mlock(2)能用来禁用swapping。然后这仅能保障页被内存保持支持并不保障分配的内存物理地址保持始终一样。Linux的页迁移机制能在任何时间改变用户空间分配的任何页的物理地址比如来实现传输巨页和NUMA选项等。Linux 没有实现显式分配的大页(x86 上的 2 MiB 或1 GiB 页面的页面迁移。因而ixy使用巨页来简单地分配连续的大的物理内存。在用户空间分配巨页被所有的用户态驱动采用但他们经常是作为性能提升来使用尽管可靠的DMA内存分配也至关重要。因为用户态驱动也需要能讲它的虚拟地址转换为物理地址这可以通过procfs文件/proc/self/pagemap来实现这种传输逻辑在memory.c文件的virt_to_phys()函数里实现。VFIO的DMA内存分配 之前的DMA内存分配机制是X86平台上的Linux的特殊机制而不是可移植的。VFIO的特点是它是可移植的他内部调用dma_alloc_coherent()函数来分配内存就像其他的内核态驱动那样做。这个系统调用简化了所有的复杂细节并在我们的驱动里以libixy-vfio.c文件的vfio_map_dma()函数来实现。它需要一个IOMMU并配置必要的映射来为物理设备使用虚拟地址。DMA和缓存一致性 这两种实现都要求我们的CPU架构满足缓存一致的DMA访问。老式的CPU可能不支持这个功能并要求在DMA数据能被设备读到之前把缓存上的数据同步到内存。现代的CPU没有这个问题。实际上为实现高速数据IO的一个主流技术是DMA访问并不真的到内存而是到新CPU架构的缓存上。用户态的中断 VFIO的特点是对中断全支持具体设置函数为libixy-vfio.c文件内的vfio_setup_interrupt()函数为VFIO使能一个指定的中断并将它与一个eventfd的文件描述符绑定。ixgbe.c里的enbale_msiz_interrupt()函数为设备上的一个队列配置中断。中断被映射到一个文件描述符上被系统调用如epoll检测一般进入睡眠状态直到中断发生请见libixy-vfio.c文件内的vfio_epoll_wait()函数。
http://www.dnsts.com.cn/news/245314.html

相关文章:

  • 简单详细搭建网站教程视频教程wordpress 去掉主题版权
  • 网站如何做查询表单网站备案 材料
  • 微网站方案福建省住房和城乡建设部网站
  • 定西市网站建设企业成都百度seo推广
  • 重庆网站首页制作wordpress更新后图片不显示图片
  • 网站网页制作公司建设网站服务器怎么弄
  • 邯郸做网站找哪家好公司网站流程
  • 只知道网站后台怎么做301如何开发软件app
  • 如何做网站本地服务器吗工业设计公司怎么接活
  • 开发app和网站的公司做爰全过程免费网站的视频
  • 佛山建站专简述网站设计要遵循哪些原则
  • 开发一个棋牌app需要多少钱网站优化软件下载
  • 制作网站监控推荐建站网站和维护需要会什么区别
  • 百度网站推广关键词怎么查wordpress引用
  • 河南省住房和城乡建设厅人教处网站zzcms网站开发
  • 在线做海报的网站上海百度嘉定公司网页设计
  • 免费网页制作代码上海关键词优化按天计费
  • 视频做网站邢台网站建设最新报价
  • 自助建子站国内出色的网站建设公司
  • 什么网站可以免费做会计初级哪个网站有建设需要等文件
  • 学习网站建设软件叫什么网站分类页标题加长
  • 爱站长尾词工程网站开发
  • 工作室网站源码html5个人网页完整代码
  • 有口碑的常州网站优化花都高端网站建设
  • 建站公司网站模板论坛wordpress企业主题二次开发下载
  • 晋中企业网站建设公司桂林技术交流站
  • 建设银行温州分行网站做视频上什么网站找创意
  • 网站建设自查自评crm客户管理系统
  • 专门做调查的网站seo整站优化外包哪家好
  • 南通建设局网站查询东莞外贸公司建网站