searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用crash工具分析virtio net驱动信息

2025-03-28 06:19:26
0
0

导入virtio_net符号,方便访问virtio-net模块定义的结构

mod -s virtio_net /lib/modules/6.6.0-27.0.0.31.ctl4.x86_64/kernel/drivers/net/virtio_net.ko

研究net device

找到virtnet_info架构

struct virtnet_info ff1100208d0c2a40 -o

可以看到目前的队列有16个,也就是有16个rx和16个tx

网络信息

lshw -c net -businfo
ls -l /sys/bus/pci/devices/0000\:12\:00.0/driver

找到virtqueue的初始信息

首先,找到send_queue地址,可以得到其初始化的virtqueue地址

virtqueue信息

可以看出,其callback是skb_xmit_done函数,vdev就是指的是virtio_device结构,其index为1

网卡初始化tx和rx

可以看到网卡对于tx和rx的顺序是rx、tx的顺序依次初始化的。

vring_virtqueue地址

可以看到,vring_virtqueue结构体的第一个成员为virtqueue,其地址和virtqueue一样。

vring_virtqueue_split信息

以第一个rx为例

struct vring_virtqueue 0xff110020887a3f00 | grep vq
p ((struct receive_queue*) 0xff110020a2c98000)[0].vq
struct vring_virtqueue 0xff110020887a3f00 -o

struct vring_virtqueue_split ff110020887a3f58

队列使用的不是packed ring,而是split ring,也就是最原始的split ring,地址为 ff110020887a3f58

vring信息

vring_virtqueue_split结构体中,可以看到vring,desc,avail_idx等信息。可以通过vring,看到avail、used地址,num为1024。

config信息——struct virtio_pci_device

struct virtio_pci_device 0xff1100208883a800 -o

pci_dev 地址为0xff1100208a418000

中断信息

pci_device信息

is_legacy为false,说明结构体为modern_device

virtio_pci_modern_device信息

通过modern_device可以看到config的信息,notify、common、device、isr等。

struct virtio_pci_modern_device 0xff1100208883abb0

Vendor id 、device id(命令+crash寻找)

可以看到,virtio_pci_modern_device的vendor、device为0x1、0x1bd4;

pci device vendor、device为0x1af4、0x1041

lspci -nn -s 0000:12:00.0
cat /sys/class/net/enp18s0/device/device

Common config

看不了

devices/driver

通过virtio_device找到device,

通过device可以找到device_driver,可以看到是virtio_net

通过device_driver找到virtio_driver

features

feature不对应

0x14014200C2000000

driver features

【有道云笔记】跟踪流程运行期间各个函数耗时情况
https://note.youdao.com/s/6gUEBcMD
【有道云笔记】trace-cmd跟踪进程和打印函数的调用栈
https://note.youdao.com/s/adNnucPI
【有道云笔记】trace-cmd跟踪指定命令在内核的函数调用情况--SG和DMA
https://note.youdao.com/s/4JVNmxeP

【有道云笔记】crash自动输入命令和重定向输出
https://note.youdao.com/s/LMVD4MO9
【有道云笔记】crash分析guest内核core文件-crash打印virtio_blk信息
https://note.youdao.com/s/F4yMbKnT
【有道云笔记】crash打印virtio_net设备信息
https://note.youdao.com/s/Aes1RCp1
0条评论
0 / 1000
hao-kwills
3文章数
0粉丝数
hao-kwills
3 文章 | 0 粉丝
原创

使用crash工具分析virtio net驱动信息

2025-03-28 06:19:26
0
0

导入virtio_net符号,方便访问virtio-net模块定义的结构

mod -s virtio_net /lib/modules/6.6.0-27.0.0.31.ctl4.x86_64/kernel/drivers/net/virtio_net.ko

研究net device

找到virtnet_info架构

struct virtnet_info ff1100208d0c2a40 -o

可以看到目前的队列有16个,也就是有16个rx和16个tx

网络信息

lshw -c net -businfo
ls -l /sys/bus/pci/devices/0000\:12\:00.0/driver

找到virtqueue的初始信息

首先,找到send_queue地址,可以得到其初始化的virtqueue地址

virtqueue信息

可以看出,其callback是skb_xmit_done函数,vdev就是指的是virtio_device结构,其index为1

网卡初始化tx和rx

可以看到网卡对于tx和rx的顺序是rx、tx的顺序依次初始化的。

vring_virtqueue地址

可以看到,vring_virtqueue结构体的第一个成员为virtqueue,其地址和virtqueue一样。

vring_virtqueue_split信息

以第一个rx为例

struct vring_virtqueue 0xff110020887a3f00 | grep vq
p ((struct receive_queue*) 0xff110020a2c98000)[0].vq
struct vring_virtqueue 0xff110020887a3f00 -o

struct vring_virtqueue_split ff110020887a3f58

队列使用的不是packed ring,而是split ring,也就是最原始的split ring,地址为 ff110020887a3f58

vring信息

vring_virtqueue_split结构体中,可以看到vring,desc,avail_idx等信息。可以通过vring,看到avail、used地址,num为1024。

config信息——struct virtio_pci_device

struct virtio_pci_device 0xff1100208883a800 -o

pci_dev 地址为0xff1100208a418000

中断信息

pci_device信息

is_legacy为false,说明结构体为modern_device

virtio_pci_modern_device信息

通过modern_device可以看到config的信息,notify、common、device、isr等。

struct virtio_pci_modern_device 0xff1100208883abb0

Vendor id 、device id(命令+crash寻找)

可以看到,virtio_pci_modern_device的vendor、device为0x1、0x1bd4;

pci device vendor、device为0x1af4、0x1041

lspci -nn -s 0000:12:00.0
cat /sys/class/net/enp18s0/device/device

Common config

看不了

devices/driver

通过virtio_device找到device,

通过device可以找到device_driver,可以看到是virtio_net

通过device_driver找到virtio_driver

features

feature不对应

0x14014200C2000000

driver features

【有道云笔记】跟踪流程运行期间各个函数耗时情况
https://note.youdao.com/s/6gUEBcMD
【有道云笔记】trace-cmd跟踪进程和打印函数的调用栈
https://note.youdao.com/s/adNnucPI
【有道云笔记】trace-cmd跟踪指定命令在内核的函数调用情况--SG和DMA
https://note.youdao.com/s/4JVNmxeP

【有道云笔记】crash自动输入命令和重定向输出
https://note.youdao.com/s/LMVD4MO9
【有道云笔记】crash分析guest内核core文件-crash打印virtio_blk信息
https://note.youdao.com/s/F4yMbKnT
【有道云笔记】crash打印virtio_net设备信息
https://note.youdao.com/s/Aes1RCp1
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0