标签列表

everest33

自制力

导航

Linux 硬件相关_pcie_cpu_io_mem_gpu

※,pcie 的 BDF 详细介绍,及用法实例、linux 查看pci设备信息命令详解

此文中貌似有一处错误,即BDF的格式,参考另一篇博客中:在 Linux 中,PCI 设备的设备名称(Device Name)通常以 "domain:bus:slot:function" 的形式来表示(这里的slot应该就是device),其中冒号分隔开的各个数字具有以下含义:

  • domain:表示 PCI 设备所在的 PCI 域(Domain),通常为一个 16 位的十六进制数,用于区分不同的 PCI 域。在大多数情况下,这个值为 0000。
  • bus:表示 PCI 设备所在的总线(Bus),通常为一个 8 位的十六进制数,用于区分不同的总线。一个系统可以具有多个总线。
  • slot:表示 PCI 设备所在的插槽(Slot),通常为一个 5 位的十六进制数,用于区分不同的插槽。一个总线上可以有多个插槽。
  • function:表示 PCI 设备的功能(Function),通常为一个 3 位的十六进制数,用于区分同一插槽上的不同功能。一个插槽上可以有多个功能。

通过这种编号方式,可以唯一标识一个 PCI 设备的位置信息。在上述示例中,"0000:03:00.0" 表示该设备位于 PCI 域 0000,总线 03,插槽 00,功能 0。请注意,这些数字可能会因系统配置而有所不同,具体取决于你的系统和相应的 PCI 设备。

※,lspci命令详解:lspci 命令用于显示 Linux 系统上的设备和驱动程序, 可以显示连接到 PCI 总线的所有设备。该命令由 pciutils 包提供,可用于各种基于 Linux 和 BSD 的操作系统。常见的选项如下

  • lspci -h //查看帮助
  • lspci 直接运行命令会列出 PCI 总线及其连接的设备。
  • -v 选项会显示每个设备的详细信息,你可以使用 -vv 或 -vvv 来获取更多的设备细节
  • -nn显示设备上所有pcie设备的vendor id 和device id 以及文字描述。设备名称后的方括号内有用冒号分隔的数字,即供应商(10de)和设备ID(2208)。输出表明 Nvidia Corporation 制造的设备的供应商 ID 为 10de
    • lspci -nn |grep -i nvidia
      3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] [10de:2208] (rev a1)
      3b:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
  • -D  显示domain编号(domain numbers),一般情况下都是0000。
  • Selection of devices: 选择PCI设备
    • -s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]    根据指定信息查找PCI设备。
      • 一个PCI设备的完整形式如:0000:3b:00.0。-s后面跟的筛选条件是完整形式的一部分,如:3b:3b:00等, 但注意也不是任意一部分。一些示例如下
        (base) [root@master33 ~]$lspci|grep -i nvidia
        3b:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] (rev a1)
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$lspci -s 3b #报错了
        lspci: -s: Invalid slot number
        (base) [root@master33 ~]$lspci -s 3b:
        3b:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] (rev a1)
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$lspci -s 3b:00
        3b:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] (rev a1)
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$lspci -s 3b:00.1
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$lspci -s :00.1
        18:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
        19:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$lspci -s 00.1
        18:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
        19:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        (base) [root@master33 ~]$
    • -d [<vendor>]:[<device>][:<class>]  根据供应商ID和设备ID查找PCI设备。
      • (base) [root@master33 ~]$lspci -d 10de: #注意必须加冒号
        3b:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] (rev a1)
        3b:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
        
        (base) [root@master33 ~]$lspci -d 10de: -nn
        3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] [10de:2208] (rev a1)
        3b:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
        
        # 除了显卡之外,还有一个 Nvidia 音频设备。实际上它们都属于同一张 GeForce RTX 3080 Ti 卡
  • -k 选项显示内核加载了哪些驱动程序模块。如下例:可以看到额外显示了两行:正在使用的内核驱动程序Kernel driver in use 和 内核模块Kernel modules,其中后者列出了可用于支持该设备的模块
    (base) [root@master33 ~]$lspci -nn -k -d 10de:
    3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] [10de:2208] (rev a1)
    	Subsystem: LeadTek Research Inc. Device [107d:2208]
    	Kernel driver in use: nvidia
    	Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
    3b:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
    	Subsystem: LeadTek Research Inc. Device [107d:2208]
    	Kernel driver in use: snd_hda_intel
    	Kernel modules: snd_hda_intel
  • 同步PCI设备的最新状态。新设备和供应商总是在不断迭代。如果看到显示为 unknown 的设备,说明你的 PCI 设备 ID 数据库可能已过时。有两种方法可以检查更新
    • -Q 选项会使用 DNS 查询中央数据库,当然,这需要联网。
    • 也可以通过运行命令 update-pciids 来更新本地 PCI ID 数据库。数据库更新需要一些时间,也需要联网。

与其他命令的比较:除了lspci命令以外,还有一些其他的工具也可以用于检测PCI设备信息,lspci命令只能列出PCI设备信息;而lshw和hwinfo命令可以列出更多的硬件。实践中可以互相补充使用!

  • lspcmcia:用于检测PCMCIA设备信息
  • lshw:可以列出系统中所有硬件设备的详细信息
  • hwinfo:也可以列出系统中所有硬件设备的详细信息

※,lshw命令详解:lshw(List Hardware)是一个强大的命令,可以让用户获取底层硬件信息。该命令在管理员需要了解和诊断系统硬件配置时非常实用。

  • man lshw //查看用法
  • lahw -class <class-name> // lshw -short,可以查看有哪些class类别
  • 与其他命令的比较:Linux系统中有很多命令可以提供关于系统硬件的信息,如lspci、lsusb和lsblk等,但这些命令都只能提供特定类型的硬件信息。相比之下,lshw能提供更全面的硬件信息,因此在需要获取大量硬件信息时,lshw是一个非常好的选择

※,Linux性能分析:https://www.cnblogs.com/bakari/p/10515977.html

CPU篇

cpu个数、核数、线程数是cpu的三个重要概念。一般个人PC上只有一个物理cpu,服务器上可以有多个物理cpu。一个物理cpu可以有多个核(比如4核,8核等等);一个物理核可以使用超线程技术超出多个虚拟核(即线程),一般是一个物理核对应2个线程,比如4核8线程等等,但也有1个核对应更多线程的,比如IBM的power7处理器是8核32线程。

服务器67.27cpu情况: Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz; 2颗物理cpu,每颗cpu是10核20线程,总共是2*20个线程。

  • ·lscpu· // 在 Linux 下,类似 lsxxx 这样的命令都是用来查看基本信息的,如 ls 查看当前目录文件信息,lscpu 就用来查看 CPU 信息,类似还有 lspci 查看 PCI 信息,lsmem查看内存信息。
  • ·cat /proc/cpuinfo· // /proc 目录是内核透传出来给用户态使用的,里面记录着很多信息文件,比如还有内存文件 meminfo 等。可以使用 cat /proc/cpuinfo 查看 CPU 信息。
    • 获取cpu型号,以及总线程数
      • `cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c`
    • 查看 CPU 物理个数: ·grep 'physical id' /proc/cpuinfo | sort -u | wc -l·
    • 查看 CPU 核心数量: ·grep 'core id' /proc/cpuinfo | sort -u | wc -l·(这里查到的是一颗物理cpu的核心数)
    • 查看 CPU 线程数: ·grep 'processor' /proc/cpuinfo | sort -u | wc -l·(这里查到的是所有物理cpu总的线程数,单颗cpu的线程数需要除以物理cpu的个数)
    • 查看 CPU  型号: ·dmidecode -s processor-version· // 可以通过输出的行数得出此机器有多少物理cpu个数。
    • 查看 CPU 的详细信息:·cat /proc/cpuinfo·
  • ·dmidecode· // 这个命令是用来获取 DMI(Desktop Management Interface)硬件信息的,包括 BIOS、系统、主板、处理器、内存、缓存等等。
    • `dmidecode -t processor`  //查看CPU信息
  • `top` //参看之前笔记.
    • 之后按1可以展开所有核数  
  • ·ps· // 参看之前笔记。
  • ·vmstat· // 这个命令基本能看出当前机器的运行状态和问题,非常强大。可以使用 ·vmstat n· 后面跟一个数字,表示每隔 ns 显示系统的状态,信息包括 CPU、内存和 IO 等。几个关键的字段: 
    • r 值:表示在 CPU 运行队列中等待的进程数,如果这个值很大,表示很多进程在排队等待执行,CPU 压力山大。
    • in 和 cs 值:表示中断次数和上下文切换次数,这两个值越大,表示系统在进行大量的进程(或线程)切换。切换的开销是非常大的,这时候应该减少系统进程(或线程)数。
    • us、sy、id、wa 值:这些值上面也提到过,分别表示用户空间进程,系统进程,空闲和 IO 等待的 CPU 占比,这里只有 id 很高是好的,表示系统比较闲,其他值飚高都不好。
  • `dstat` //这个命令也很强大,能显示 CPU 使用情况,磁盘 IO 情况,网络发包情况和换页情况,而且输出是彩色的,可读性比较强,相对于 vmstat 更加详细和直观。使用时可以直接输入命令,也可以带相关参数。

上面说的是系统级的分析,现在来看单个进程的 CPU 使用情况分析,以便于我们能对占用 CPU 过多的进程进行调试和分析,优化程序性能。

  • `pidstat` // 这个命令默认统计系统信息,也包括 CPU、内存和 IO 等,我们常用 pidstat -u -p pid [times] 来显示 CPU 统计信息。如下统计 pid = 802 的 CPU 信息
    • `pidstat -u -p 802 1`
  • `strace` // 这个命令用来分析进程的系统调用情况,可以看进程都调用了哪些库和哪些系统调用,进而可以进一步优化程序。比如我们分析 ls 的系统调用情况,就可以用 strace ls.
    • `strace -p 802` // attach(附着)到一个正在运行的进程上进行分析,比如我 attach 到 802 这个进程显示.
  • `perf` // 进阶工具
  • ·systemtap· //高级工具
  • ·kprobe· // 撸码工具

内存篇

  • ·cat /proc/meminfo· // 我们比较关心的是下面几个字段:
    • MemTotal:系统总内存,由于 BIOS、内核等会占用一些内存,所以这里和配置声称的内存会有一些出入,比如我这里配置有 2G,但其实只有 1.95G 可用。
    • MemFree:系统空闲内存。
    • MemAvailable:应用程序可用内存。有人会比较奇怪和 MemFree 的区别,可以从两个层面来区分,MemFree 是系统层面的,而 MemAvailable 是应用程序层面的。系统中有些内存虽然被使用了但是有一部分是可以回收的,比如 Buffers、Cached 及 Slab 这些内存,这部分可以回收的内存加上 MemFree 才是 MemAvailable 的内存值,这是内核通过特定算法算出来的,是一个估算值。
    • Buffers:缓冲区内存
    • Cached:缓存
  • `free` //几个字段和上面 /proc/meminfo 的字段是对应的。还有个 shared 字段,这个是多进程的共享内存空间,不常用。
    • `free -h` //要看比较直观的值,可以加 -h 参数
    • MemTotal = used + free + buff/cache(单位 K)
    • 从应用程序的角度讲,Linux实际可用内存=free + buffer/cache。或者直接看available,两个值稍微有些差别。
    • 我们注意到 free 很小,buff/cache 却很大,这是 Linux 的内存设计决定的,Linux 的想法是内存闲着反正也是闲着,不如拿出来做系统缓存和缓冲区,提高数据读写的速率。但是当系统内存不足时,buff/cache 会让出部分来,非常灵活的操作。
  • ·dmidecode· // 同CPU分析
    • `dmidecode -t memory` // 查看内存
  • `vmstat` // 这个命令也是非常常用了。但对于内存,显示信息有限。它更多是用于进行系统全局分析和 CPU 分析。

进程内存使用情况分析:

  • ·top / htop· // 参见另一篇笔记
  • ·ps· //参见另一篇笔记
  • ·pmap· // ·pmap -x pid· 这个命令用于查看进程的内存映像信息,可以看到该进程内存被哪些库、哪些文件所占用,据此我们定位程序对内存的使用。几个字段介绍一下:
    • Address:占用内存的文件的内存起始地址。
    • Kbytes:占用内存的字节数。
    • RSS:实际占用内存大小。(Resident Set Size)。
    • Dirty:脏页大小。
    • Mapping:占用内存的文件,[anon] 为已分配的内存,[stack] 为程序堆栈
    • 最后的 total 为统计的总值。我们可以使用 pmap -x pid | tail -1 这样只显示最后一行,循环显示最后一行,达到监控该进程的目的。使用`while true; do pmap -x pid | tail -1; sleep 1; done`

高阶工具:

  • ·atop·
  • `memstat`
  • `Valgrind` // 对于内存泄漏有一个比较常用的检测工具

IO篇

IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存,三者读写的性能差距非常大,磁盘读写是毫秒级的(一般 0.1-10ms),内存读写是微妙级的(一般 0.1-10us),cache 是纳秒级的(一般 1-10ns)。但这也是牺牲其他特性为代价的,速度快的,价格越贵,容量也越小。IO 性能这块,我们更多关注的是读写磁盘的性能。

磁盘基本信息:

  • ·fdisk -l· // 小写L。查看所有已挂载和未挂载的磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息,但不显示文件系统类型。
    • Linux系统的分区格式使用的是xyzN的格式,xy表示的是硬盘类型,比如sd表示是SCSI硬盘,z表示的是硬盘序号,第一块硬盘是a,第二块硬盘是b, 要查询Linux系统上有几块硬盘,只要注意这一点即可;N表示的是分区号。
    • 类似 /dev/mapper/centos-root 这样的磁盘其实是逻辑卷,不是物理磁盘。
    • fdisk命令会显示磁盘的字节大小(精确大小),显示的GB单位是按照1GB=1000MB计算的。
  • ·df -h· // 只可以查看已经挂载的磁盘使用情况。查看磁盘使用情况,通常看磁盘使用率。这里显示的G是以1024为进制的!!!
    • ·df -T· //  -T查看磁盘分区文件系统类型
    • [root@BJ01-KY-TOOL01 iflyer]# lsblk
      NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda               8:0    0   80G  0 disk 
      ├─sda1            8:1    0    1G  0 part /boot
      └─sda2            8:2    0   79G  0 part 
        └─centos-root 253:0    0   79G  0 lvm  /
      sdb               8:16   0  700G  0 disk /data1
      sr0              11:0    1 1024M  0 rom  
      [root@BJ01-KY-TOOL01 iflyer]# df -h
      Filesystem                      Size  Used Avail Use% Mounted on
      /dev/mapper/centos-root          79G  3.5G   76G   5% /
      devtmpfs                         32G     0   32G   0% /dev
      tmpfs                            32G     0   32G   0% /dev/shm
      tmpfs                            32G  3.3G   29G  11% /run
      tmpfs                            32G     0   32G   0% /sys/fs/cgroup
      /dev/sdb                        689G  358G  297G  55% /data1
      /dev/sda1                      1014M  143M  872M  15% /boot
      tmpfs                           6.3G     0  6.3G   0% /run/user/1000
      172.22.145.122:/data1/SongBank   27T   21T  6.4T  77% /data1/SongBank
      tmpfs                           6.3G     0  6.3G   0% /run/user/0
      ############关于devtmpfs和tmpfs###########
      tmpfs是建立在内存的虚拟文件系统,默认情况下最大占用内存一半大小的空间
      devtmpfs:http://www.mybatis.cn/archives/1639.html
  • ·lsblk· // 可以清晰的查看出主机上有几块磁盘(包括挂载的和未挂载的)。这里显示的单位都是计算机标准单位,即按照1GB=1024MB计算的。
    • ·lsblk -f· // 显示文件系统类型.
  • ·blkid· // blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询
  • ·parted -l·  // 可以查看未挂载的文件系统类型,以及哪些分区尚未格式化.
  • ·file [OPTION...] [FILE...]· // Determine type of FILEs. file命令可以查看文件的类型。
    • ·file -s /dev/sda3· // file命令的-s参数可以treat special (block/char devices) files as ordinary ones。可以查看磁盘的分区文件系统类型。
  • 判断磁盘是机械硬盘还是固态硬盘
    • ·cat /sys/block/sdb/queue/rotational· // 0代表固态盘,1代表机械盘
    • ·lsblk -d -o name,rota· // 参数 -d 表示显示设备名称,参数 -o 表示仅显示特定的列。 rota值为1代表机械盘,0代表固态盘。

磁盘性能分析:主要分析磁盘的读写效率IOPS:每秒读写的次数;吞吐量:每秒读写的数据量),IO 繁忙程度,及 IO 访问对 CPU 的消耗等性能指标。

  • vmstat // 对于 IO,我们常关注三个部分:一般这几个值偏大,都意味着系统 IO 的消耗较大,对于读请求较大的服务器,b、bo、wa 的值偏大,而写请求较大的服务器,b、bi、wa 的值偏大。
    • b 值:表示因为 IO 阻塞排队的任务数
    • bi 和 bo 值:表示每秒读写磁盘的块数,bi(block in)是写磁盘,bo(block out)是读磁盘。
    • wa 值:表示因为 IO 等待(wait)而消耗的 CPU 比例。
  • iostat // vmstat 虽然万能,但是它分析的东西有限,iostat 是专业分析 IO 性能的工具,可以方便查看 CPU、网卡、tty 设备、磁盘、CD-ROM 等等设备的信息,非常强大,总结下来,共有以下几种用法:
    • iostat -c 查看部分 CPU 使用情况,这里显示的是多个 CPU 的平均值,一般会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。 如果 %iowait 较高,则表明磁盘存在 IO 瓶颈,如果 %idle 较高,则 CPU 比较空闲,如果两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存, 如果 %idle 较低,则此时瓶颈在 CPU,应该增加 CPU 资源。
    • iostat -d 查看磁盘使用情况,主要是显示 IOPS 和吞吐量信息(-k : 以 KB 为单位显示,-m:以 M 为单位显示), 其中,几个参数分别解释如下:
      • tps:设备每秒的传输次数(transfers per second),也就是读写次数。
      • kB_read/s 和 kB_wrtn/s:每秒读写磁盘的数据量。
      • kB_read 和 kB_wrtn:读取磁盘的数据总量。
    • iostat -x 查看磁盘详细信息。其中,几个参数解释如下:
      • rrqm/s 和 wrqm/s:分别每秒进行合并的读操作数和写操作数,这是什么意思呢,合并就是说把多次 IO 请求合并成少量的几次,这样可以减小 IO 开销, buffer 存在的意义就是为了解决这个问题的。
      • r/s 和 w/s:每秒磁盘读写的次数。这两个值相加就是 tps。
      • rkB/s 和 wkB/s:每秒磁盘读写的数据量,这两个值和上面的 kB_read/s、kB_wrnt/s 是一样的。
      • avgrq-sz:平均每次读写磁盘扇区的大小。
      • avgqu-sze:平均 IO 队列长度。队列长度越短越好。
      • await:平均每次磁盘读写的等待时间(ms)。
      • svctm:平均每次磁盘读写的服务时间(ms)。
      • %util:一秒钟有百分之多少的时间用于磁盘读写操作。 以上这些参数太多了,我们并不需要每个都关注,可以重点关注两个:
        • %util:衡量 IO 的繁忙程度 这个值越大,说明产生的 IO 请求较多,IO 压力较大,我们可以结合 %idle 参数来看,如果 %idle < 70% 就说明 IO 比较繁忙了。 也可以结合 vmstat 的 b 参数(等待 IO 的进程数)和 wa 参数(IO 等待所占 CPU 时间百分比)来看,如果 wa > 30% 也说明 IO 较为繁忙。
        • await:衡量 IO 的响应速度 通俗理解,await 就像我们去医院看病排队等待的时间,这个值和医生的服务速度(svctm)和你前面排队的人数(avgqu-size)有关。 如果 svctm 和 await 接近,说明磁盘 IO 响应时间较快,排队较少,如果 await 远大于 svctm,说明此时队列太长,响应较慢,这时可以考虑换性能更好的磁盘或升级 CPU。
    • iostat m n 默认显示 cpu 和 吞吐量信息,m 表示每隔 m 秒输出一次。n表示总共输出n次(输出n次之后退出程序)。
    •  

进程IO性能分析:有了以上两个命令,基本上能对磁盘 IO 的信息有个全方位的了解了。但如果要确定具体哪个进程的 IO 开销较大,这就得借助另外的工具了。

  • iotop 

网络篇

`yum provides $(which ping)` //查看ping命令属于哪个包。

  • ping:测试网络连通性
  • ifconfig:接口配置
  • ip:网络接口统计信息
  • netsat:多种网络栈和接口统计信息
  • ifstat:接口网络流量监控工具
  • netcat:快速构建网络连接
  • tcpdump:抓包工具
  • sar:统计信息历史
  • traceroute:测试网络路由
  • pathchar:确定网络路径特征
  • dtrace:TCP/IP 栈跟踪
  • iperf / netperf / netserver:网络性能测试工具
  • perf 性能分析神器

显卡篇

  • lspci | grep -i vga //Linux查看显卡信息
  • lspci | grep -i nvidia //英伟达显卡
    (base) [root@master25 ~]$lspci |grep -i nvi
    3b:00.0 VGA compatible controller: NVIDIA Corporation Device 2208 (rev a1) //这个是nvidia 3080TI显卡
    3b:00.1 Audio device: NVIDIA Corporation Device 1aef (rev a1)

    由于没有驱动信息,无法查询显卡的具体型号,不过可以通过nvidia官方网站查询。将上面输出中的代号(2208 或 1aef)输入文本框即可。

  • lspci -v -s 3b:00.0 //查看指定显卡的详细信息。3b:00.0是显卡代号,lspci的输出最前面即是此信息。
  • sudo lshw -c  display// 查看显卡信息
    • -c后的值可以通过 lshw -short获取
  • nvidia-smi // Nvidia自带一个命令行工具可以查看显存的使用情况。`nvidia-smi --help`
    [root@167 ~]$nvidia-smi
    Fri Feb 10 16:11:31 2023       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.86.01    Driver Version: 515.86.01    CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  NVIDIA GeForce ...  Off  | 00000000:3B:00.0 Off |                  N/A |
    | 30%   32C    P8    25W / 350W |    234MiB / 12288MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |    0   N/A  N/A      1302      G   /usr/lib/xorg/Xorg                217MiB |
    |    0   N/A  N/A      1594      G   /usr/bin/gnome-shell               15MiB |
    +-----------------------------------------------------------------------------+
    
    表头释义:
    
    Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A;
    Temp:显卡内部的温度,单位是摄氏度;
    Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
    Pwr:能耗表示;
    Bus-Id:涉及GPU总线的相关信息;
    Disp.A:是Display Active的意思,表示GPU的显示是否初始化;
    Memory Usage:显存的使用率;
    Volatile GPU-Util:浮动的GPU利用率;
    Compute M:计算模式;
    下边的Processes显示每块GPU上每个进程所使用的显存情况。
    • ·nvidia-smi -L· // 列出所有可用的Nvidia设备。可以输出显卡型号,如RTX3080Ti
      [root@167 ~]$nvidia-smi -L
      GPU 0: NVIDIA GeForce RTX 3080 Ti (UUID: GPU-96bfb1d3-986f-e92a-4f68-a600bd8a144c)
  • 在Linux上,您可以将GPU设置为持久模式nvidia-smi -pm 1。持久模式每个闲置的GPU使用更多的功率,但是可以防止每次启动GPU应用程序时出现相当长的延迟。在Windows上,nvidia-smi无法设置持久性模式。 相反,您需要将计算GPU设置为TCC模式。 这应该通过NVIDIA的图形GPU设备管理面板来完成。

    执行 nvidia-smi 命令,可查看Persistence Mode当前状态。Persistence-M的值为On时,持续模式为打开状态,如下图所示:

※,

posted on 2024-08-08 13:06  everest33  阅读(98)  评论(0编辑  收藏  举报