1 背景说明
运维工程师(Operations)是负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率、优化资源利用率提高整体的ROI的专业人员。他们的基本职责是负责服务的稳定性,确保服务可以7*24H不间断地为用户提供服务。
作为一名运维工程师,操作系统知识 怎么可以落下,我们需要深入理解Linux系统,包括其文件系统、进程管理、用户和权限管理等。今天就先讲讲如何查看计算机设备篇——PCI总线设备的信息。到了这里,实践得出真理,开始动手操作下吧。毕竟,这些基础的知识也是需要我们操作的熟练。从上面简介中,你已经猜测出来我此时说的这个系统自带的小工具叫什么名字吧?
2 环境检查
2.1 什么是PCI
【PCI】介绍
PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。
PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外 设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间传输数据时更好的性能;尽可能的平台无关;简化往系统中添加和 删除外设的工作。
【lspci】介绍
lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。
2.2 环境检查
在开展实践工作前,首先需要做的是熟悉环境。当我们需要了解我们的工作电脑当前的设备信息是如何分布的。比如说磁盘控制器、声卡、网卡等等。有时候我们需要知道设备的硬件ID或者设备的型号,这时候就可以借助lspci命令来查询。
首先,执行命令查看当前的操作系统。当前所有操作都是在Linux上执行,如果有差错或者版本不一致,请酌情参考。
代码语言:javascript复制[xxx@xxx ~]$ uname -a
Linux xxx 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[xxx@xxx ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
其次,我们需要检查下我们的机器是否有这个命令。
代码语言:javascript复制[xxx@xxx ~]$ lspci V
这里让你失望了,请参考下3
3 如何查看帮助命令
在Linux环境中,有很多约定俗成的命令,可以帮助我们很快的投入到工作中,例如--help / ?/ -h / -V / --version 等等等。不过这个lspci的命令比较特殊一些,可以使用lspci V,如果使用使用其他命令也没有错误,只是会提示你不可用。
代码语言:javascript复制[xxx@xxx ~]$ lspci V
Usage: lspci [<switches>]
Basic display modes:
-mm Produce machine-readable output (single -m for an obsolete format)
-t Show bus tree
Display options:
-v Be verbose (-vv for very verbose)
-k Show kernel drivers handling each device
-x Show hex-dump of the standard part of the config space
-xxx Show hex-dump of the whole config space (dangerous; root only)
-xxxx Show hex-dump of the 4096-byte extended config space (root only)
-b Bus-centric view (addresses and IRQ's as seen by the bus)
-D Always show domain numbers
Resolving of device ID's to names:
-n Show numeric ID's
-nn Show both textual and numeric ID's (names & numbers)
-q Query the PCI ID database for unknown ID's via DNS
-qq As above, but re-query locally cached entries
-Q Query the PCI ID database for all ID's via DNS
Selection of devices:
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]] Show only devices in selected slots
-d [<vendor>]:[<device>][:<class>] Show only devices with specified ID's
Other options:
-i <file> Use specified ID database instead of /usr/share/hwdata/pci.ids
-p <file> Look up kernel modules in a given file instead of default modules.pcimap
-M Enable `bus mapping' mode (dangerous; root only)
PCI access options:
-A <method> Use the specified PCI access method (see `-A help' for a list)
-O <par>=<val> Set PCI access parameter (see `-O help' for a list)
-G Enable PCI access debugging
-H <mode> Use direct hardware access (<mode> = 1 or 2)
-F <file> Read PCI configuration dump from a given file
当我们阅读了很多的帮助文档后,就可以开始动手实践一下啦。
备注:当前执行命令是CentOS 7.6 开源版本。
4 实践先行
4.1 显示所有设备详细信息
代码语言:javascript复制lspci -v
代码语言:javascript复制[xxx@xxx ~]$ lspci -v
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
Subsystem: VMware Virtual Machine Chipset
Flags: bus master, medium devsel, latency 0
Kernel driver in use: agpgart-intel
……此处省略其他设备信息
4.2显示所有设备更多详细信息
代码语言:javascript复制lspci -vv
代码语言:javascript复制[xxx@xxx ~]$ lspci -vv
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
Subsystem: VMware Virtual Machine Chipset
Control: I/O- Mem BusMaster SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Kernel driver in use: agpgart-intel
……此处省略其他设备信息
4.3显示所有设备更多更详细信息
这个命令基本上是ALL IN
代码语言:javascript复制lspci -vvv
代码语言:javascript复制[xxx@xxx ~]$ lspci -vvv
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
Subsystem: VMware Virtual Machine Chipset
Control: I/O- Mem BusMaster SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Kernel driver in use: agpgart-intel
……此处省略其他设备信息
4.4显示设备的vendor id 和device id
代码语言:javascript复制lspci -n
代码语言:javascript复制[xxx@xxx ~]$ lspci -n
00:00.0 0600: 8086:7190 (rev 01)
00:01.0 0604: 8086:7191 (rev 01)
00:07.0 0601: 8086:7110 (rev 08)
00:07.1 0101: 8086:7111 (rev 01)
00:07.3 0680: 8086:7113 (rev 08)
00:07.7 0880: 15ad:0740 (rev 10)
……此处省略其他设备
4.5显示设备配置空间的标准部分
代码语言:javascript复制lspci -x
4.6 显示设备上pcie设备的配置空间的所有内容
代码语言:javascript复制lspci -xxx
4.7 显示 PCI-X 2.0 和 PCI Express 总线上可用的扩展(4096 字节)PCI 配置空间内容
代码语言:javascript复制lspci -xxxx
4.8 显示说有pcie设备的总线地址
代码语言:javascript复制$ lspci -b
4.9 以树形结构显示pcie设备
能展示设备上所以pcie总线、桥、pcie设备之间的连接关系
代码语言:javascript复制$ lspci -t
5 附录
5.1 查阅pci.ids
可以通过查阅/usr/share/hwdata/pci.ids来查看所有的内容信息。
/proc/bus/pci:linux 2.1.82 之后版本核心提供的 PCI 总线配置空间的接口。包含每个总线 (per-bus) 的子目录以及每个设备卡 (per-card) 的配置空间档案,还有一个 devices 档案,包含所有PCI设备的列表。
6 问答
作为一名运维工程师需要了解掌握很多技能,比如说操作系统、开源组件、监控相关、编程知识、网络知识、数据库知识、自动化技能和日志分析能力。当然也不能缺少一些软技能,例如沟通、抗压等,要和同事、领导以及客户保持良好的沟通,理解需求,提供有效的解决方案,需要应对高强度的工作压力,保持冷静,快速解决问题。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!