内核
文章平均质量分 92
DPDK技术员
这个作者很懒,什么都没留下…
展开
-
DPDK网卡多队列
网卡多队列,顾名思义,也就是传统网卡的DMA队列有多个,网卡有基于多个DMA队列的分配机制。多队列网卡已经是当前高速率网卡的主流。Linux内核中,RPS(Receive Packet Steering)在接收端提供了这样的机制。...原创 2022-08-27 14:43:23 · 877 阅读 · 0 评论 -
DPDK vhost-user详解
在软件实现的网络I/O半虚拟化中,vhost-user在性能、灵活性和兼容性等方面达到了近乎完美的权衡。虽然它的提出已经过了四年多,也已经有了越来越多的新特性加入,但是万变不离其宗,那么今天就从整个vhost-user数据通路的建立过程,以及数据包传输流程等方面详细介绍下vhost-user架构,本文基于DPDK 17.11分析。vhost-user的最好实现在DPDK的vhost库里,该库包含了完整的virtio后端逻辑,可以直接在虚拟交换机中抽象成一个端口使用。...原创 2022-08-27 14:11:15 · 1179 阅读 · 0 评论 -
从SPDK Blobstore到 Blob FS
前言SPDK通过绕过内核(kernel bypass)的方案,构筑了用户态驱动,并利用异步轮询、无锁机制等,极大地提升了I/O性能。然而,正因为采用了kernel bypass的设计,使得原本内核中的文件系统不能使用。因此,SPDK提供了Blobstore用来支持上层存储服务,并基于此封装了Blob FS(Blob Filesystem)文件系统。当前Blob FS实现了对RocksDB的集成测试(对RocksDB的集成可参考[1]),由于前文[2]已经对Blobstore和Blob FS做过一些介绍,本文原创 2022-08-22 15:37:33 · 174 阅读 · 0 评论 -
用户态虚拟化IO通道实现概览及实践(上)
自虚拟化技术诞生起,提升虚拟化场景中IO设备性能和驱动的兼容性、可扩展性一直是备受关注和追求的目标。随着半虚拟化技术的出现,virtio设备及驱动也很快流行并逐步变成了虚拟化应用中的主要IO通道形态。例如,virtio现已支持实现的设备涵盖了网络设备(virtio-net)、块设备(virtio-blk)、串口设备在(virtio-console)等等。其后,通过DPDK/SPDK技术加持,virtio技术全用户态化的实现也如火如荼地落地并广泛应用。不仅如此,沿着虚拟IO全用户态化的思路,vfio-user原创 2022-08-22 15:28:49 · 586 阅读 · 0 评论 -
SPDK NVMe-oF多路径结合Delay Bdev使用场景
如果NVMe bdev具有多个命名空间,则NVMe bdev的I/O通道会有一系列的多条I/O路径。SPDK通过相同的NVMe bdev设备名称多次调用bdev_nvme_attach_controller RPC,用户可以在多个不同路径上建立连接到NVMe bdev的同一个NVMe-oF子系统的连接。bdev_nvme_get_io_paths的结果如下所示,结果显示有两条路径,每条路径包含如下信息:bdev_name、cntlid、current、connected和accessible。原创 2022-08-20 14:42:54 · 508 阅读 · 0 评论 -
再探SPDK----使用方法及基础机制概览
再探SPDK----使用方法及基础机制概览 一直以来SPDK作为用户态的存储应用框架,受到了广泛的关注和跟进。本文在之前《初识SPDK》(点击斜体文字,阅读往期文章)的基础上,更进一步从使用、代码目录结构、基础机制和初始化流程的角度对SPDK做了简要的介绍,希望能给大家提供参考。编译依赖的子模块当使用git clone命令从github代码仓库中下载SPDK版本时,可以看到在下载的代码目录下会有一些名如“dpdk”、“isa-l”、“ocf”等的空白目录。无须奇怪,这些目录是SPDK工程所依赖原创 2022-08-20 14:38:23 · 1119 阅读 · 0 评论 -
谈谈 Linux 内核驱动的编码风格
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的队 伍里,我并不是孤独的。......原创 2022-08-18 14:11:13 · 122 阅读 · 0 评论 -
内核驱动mmap Handler利用技术(二)
到此我们理解了如何去实现一个可以获取任意内存地址(通常是内核内存)访问权的mmap handler。现在的问题是:我们如何用现有的知识来获取root权限?我们考虑两种基本情景:我们知道物理内存布局(通常通过/proc/iomem)黑盒模型 - 我们只是有一个非常大的mmap当我们了解了物理内存布局后,我们可以轻易地查看我们映射了内存的那个区域,也可以试图去把想要的内存区域与虚拟地址进行关联。这允许我们对信令(creds)/函数指针执行精准的覆写。更有意思的在于完成黑盒模型的情景。...原创 2022-08-17 19:35:00 · 238 阅读 · 0 评论 -
SDN系统方法 | 8. 网络虚拟化
如上所述,虚拟网络的概念可以追溯到很久以前。例如,VLAN允许多个LAN段在一个物理LAN上共存,有点类似于虚拟内存允许进程共享物理内存的方式。然而,正如Nicira团队在NSDI论文中所阐述的那样,虚拟网络的愿景更接近于虚拟机。虚拟机忠实再现了物理服务器的特性,包括处理器、内存、外设等,一个未经修改的操作系统可以在虚拟机上运行,就像运行在物理机器上一样。通过类比,虚拟网络必须再现物理网络的全部特性集。这意味着虚拟网络包括路由、交换、寻址以及NAT、防火墙和负载均衡等更高层特性。............原创 2022-08-17 16:48:38 · 844 阅读 · 0 评论 -
利用IoDriverObjectType控制内核驱动加载
在edr或者其他类型的安全软件我们通常要监测当前系统的内核驱动的加载通常使用的方法是PsSetLoadImageNotifyRoutine设置模块加载回调例程来监控ring3模块以及ring0模块的加载,回调函数 eLoadImageNotifyRoutine 的第二个参数判断,如果 PID是0 ,则表示加载驱动,如果PID非零,则表示加载DLL。缺点当然也就是函数太底层,第二就是方法太通用几乎做过进程、线程监控的搞安全内核开发的人基本都晓得,也很容易被发现而且也会被摘链,而失效。...原创 2022-08-17 15:30:42 · 411 阅读 · 0 评论