pcie方法目录 - KPTest框架开放资料

Skip to content

# pcie方法目录

1. get_lspci_info
> 描述：

    1
    2
    3

    方法功能：获取当前OS下的lspci信息

    命令格式："lspci |grep -E "megaraid|adaptec|raid"

> 参数：

    1

    grep            (str) : 添加在grep后的参数，默认为空

> 返回值：

    1

    lspci_info_list (list) : 查询到lspci的信息回显

> 异常：

    1

    KPTestException("运行{}命令失败".format(cmd))

> 举例：

    1

    lspci_info = self.os_host.pci.get_lspci_info()

2. list_dev
> 描述：

    1
    2
    3

    方法功能：解析lspci输出所有pci设备信息

    命令格式：lspci

> 参数：

    1

    self        (obj) : 本PCIE对象

> 返回值：

    1

    dev_info    (dict): 查询到lspci的信息回显

> 异常：

    1

    None

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11

    dev_info = self.os_host.pci.list_dev()
    dev_info = {
    '40:00.0': {
    'desc': 'Huawei Technologies Co., Ltd. HiSilicon PCIe Root Port with Gen4 (rev 21)',
    'dev_type': PCI bridge,
    },
    '43:00.0': {
    'desc': 'Mellanox Technologies MT27800 Family [ConnectX-5]',
    'dev_type': 'Ethernet controller',
    },
    }

3. list_dev_tree
> 描述：

    1
    2
    3

    方法功能：解析lspci -tv输出为树形设备字典

    命令格式：lspci -tv

> 参数：

    1

    self        (obj) : 本PCIE对象

> 返回值：

    1

    dev_tree    (dict): 查询到lspci的信息回显

> 异常：

    1

    None

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13

    dev_tree = self.os_host.pci.list_dev_tree()
    dev_tree = {
    "bdf": {
    "desc": "设备描述",
    "children": [{"bdf": "子设备BDF", "desc": "子设备描述"}, ...]
    "parent_bdf": [p_bdf1, p_bdf2, ...]
    }
    }
    Remarks:
    设计思想：
    1、首先通过记录 +、\、---中间的-或----倒数第二个-的位置序列来标记bdf深度；
    2、根据bdf的规则解析每行所有的bdf并将他们写入栈中；
    3、每行虽然一定会出栈一个元素，但需要重点判断|和\的位置，以及\是否在+的前面等信息，这部分比较复杂请参考代码

4. get_dev_id
> 描述：

    1
    2
    3

    方法功能：获取当前OS下bdf号对应的设备的四元组及驱动模块信息

    命令格式：lspci -kns bd:00.0

> 参数：

    1

    bdf         (str) : 某设备的短格式bdf号，不能为空，也不能为root_bdf号

> 返回值：

    1
    2
    3

    id_tuple    (list): 查询到设备bdf号的信息回显
    driver      (str) : 当前设备使用的驱动名称
    dep_mods    (str) : 驱动依赖的模块

> 异常：

    1
    2
    3

    KPTestException('设备BDF号不能为空！')
    KPTestException('设备BDF号格式错误！')
    KPTestException('BDF号{bdf}对应的设备不存在！')

> 举例：

    1

    lspci_info = self.os_host.pci.get_dev_id('bd:00.0')

5. list_dev_detail
> 描述：

    1
    2
    3

    方法功能：根据lspci、lspci -tv、lspci -kns的返回值获取设备的详细信息

    命令格式：lspci & lspci -tv & lspci -kns <bdf>

> 参数：

    1

    self            (obj) : 本对象

> 返回值：

    1

    dev_info        (dict): pcie设备信息

> 异常：

    1

    None

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    dev_info = host.pcie.list_dev_detail()
    dev_info = {
    '0000:80:00.0': {
    'type': 'Ethernet controller',      # PCIE设备类型
    'desc': 'Device 8088:0107',         # PCIE设备描述
    'bdfs': [                       # PCIE设备端口的bdf
    {'bdf': '83:00.0', 'desc': 'Intel Corporation I350 Gigabit Network Connection'},
    {'bdf': '83:00.1', 'desc': 'Intel Corporation I350 Gigabit Network Connection'},
    {'bdf': '83:00.2', 'desc': 'Intel Corporation I350 Gigabit Network Connection'},
    {'bdf': '83:00.3', 'desc': 'Intel Corporation I350 Gigabit Network Connection'},
    ],
    'ids': ['0x8088', '0x0107', '0x8088', '0x0402'],            # PCIE设备的四元组，分别是VID, DID, SVID, SDID
    'driver': '',
    'dep_mods': '',
    },
    '0000:bc:00.0': {
    'type': 'PCI bridge',
    'desc': 'Huawei Technologies Co., Ltd. HiSilicon PCIe Root Port with Gen4',
    'bdfs': [],
    'ids': [],
    'driver': '',
    'dep_mods': '',
    },
    '0000:00:00.0': {
    'type': 'RAID bus controller',
    'desc': 'LSI Logic / Symbios Logic MegaRAID Tri-Mode SAS3508',
    'bdfs': [{'bdf': '01:00.0', 'desc': 'LSI Logic / Symbios Logic MegaRAID Tri-Mode SAS3508'}],
    'ids': ['0x1000', '0x0016', '0x19e5', '0xd215'],
    'driver': 'megaraid_sas',
    'dep_mods': 'megaraid_sas',
    }
    }

6. get_device_bdf_info
> 描述：

    1
    2
    3

    方法功能：获取当前OS下的PCIE卡的bdf号信息

    命令格式：lspci |grep -E -i "megaraid|adaptec|raid"

> 参数：

    1

    grep            (str) : 添加在grep后的参数，默认为空

> 返回值：

    1

    bdf_info_list   (list) : 查询到设备bdf号的信息回显

> 异常：

    1

    KPTestException('获取设备BDF号失败！')

> 举例：

    1

    lspci_info = self.os_host.pci.get_device_bdf_info

7. is_device_in_use
> 描述：

    1
    2
    3

    方法功能：在当前OS下查询特定bdf号设备是否正在使用

    命令格式："lspci -v -s <bdf> |grep "Kernel driver in use"

> 参数：

    1

    bdf             (str) : 设备的bdf号,不可为空

> 返回值：

    1

    result          (bool) : 查询到信息时为True,查询不到信息时为False

> 异常：

    1

    None

> 举例：

    1

    lspci_info = self.os_host.pci.is_device_in_use

8. get_device_detail_info
> 描述：

    1
    2
    3

    方法功能：在当前OS下查询特定bdf号设备的以冗余模式显示的最详细的信息

    命令格式：lspci -vvvs <bdf> |grep -E %s <grep>

> 参数：

    1
    2

    bdf             (str) : 设备的bdf号,不可为空
    grep            (str) : 添加在egrep后的参数，默认为空

> 返回值：

    1

    dev_info_list   (list) : 查询到的设备详细信息

> 异常：

    1

    KPTestException("lspci命令运行失败")

> 举例：

    1

    lspci_info = self.os_host.pci.get_device_detail_info()

9. check_pci_status
> 描述：

    1
    2
    3

    方法功能：

    命令格式："lspci -vvvs <bdf> | grep -E "LnkCap|LnkSta""

> 参数：

    1

    self    (obj) : 本对象

> 返回值：

    1

    result  (bool): PCIe卡速率带宽正常时返回True，否则返回False

> 异常：

    1

    None

> 举例：

    1

    pci_status = self.os_host.pci.check_pci_status

10. get_bdf_by_id
> 描述：

    1
    2
    3

    方法功能：检查对应BDF号的pcie卡的信息

    命令格式：lspci -vvvs <bdf>

> 参数：

    1

    bdf             (str) : 设备的bdf号,不可为空

> 返回值：

    1

    result          (bool) : pcie卡速率带宽正常时返回True,否则返回False

> 异常：

    1

    KPTestException(Run {} command failed!".format(cmd_str))

> 举例：

    1

    pci_status = self.os_host.pci.check_pci_status

11. get_bdf_by_vid_did
> 描述：

    1
    2
    3

    方法功能：通过vid与did获取bdf与设备描述信息

    命令格式：lspci -D -d vid:did

> 参数：

    1
    2

    vid          (str): 设备的vid，必传参数
    did          (str): 设备的did，当不传入时，获取所有vid等于传入的vid的设备

> 返回值：

    1
    2
    3
    4
    5

    pci_dict    (dict)：设备的pci信息
    {
    '0000:00:04.0': 'System peripheral: Intel Corporation Sky Lake-E CBDMA Registers (rev 04)',
    ...
    }

> 异常：

    1

    None

> 举例：

    1

    self.os_host.pci.get_bdf_by_vid_did('8086', '10fb')

12. parser_lspci
> 描述：

    1
    2
    3

    方法功能：解析lspci -vvvs获得的信息

    命令格式：lspci -vvvs <bdf>

> 参数：

    1

    raw_output      (list): 命令行回显

> 返回值：

    1
    2
    3
    4
    5
    6
    7
    8

    ret_list_all    (dict)：设备的pci信息
    {
    '04:00.0':  (dict):bdf号对应设备的pci信息
    {
    'Sbus_number':04:00.0,'dev_info':'Mellanox Technologies MT27800 Family [ConnectX-5]'
    ...
    }
    }

> 异常：

    1

    None

> 举例：

    1

    self.os_host.pci.parser_lspci('8086', '10fb')