lspci | grep -i fileName

本文介绍了如何使用lspci命令显示系统中的PCI设备,特别是VGA控制器,以及结合grep命令过滤特定信息。lspci用于查看PCI总线上的设备,而grep则是强大的文本搜索工具,用于在输出中筛选匹配特定字符串的行。通过实例展示了grep的不同选项,如-i、-v、-n、-c等,以及正则表达式在grep命令中的应用。
$ lspci |grep VGA

00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)

作用该命令作用:将lspci的输出当做输入,从中找出包含VGA的行


补充:

       PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外 设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间传输数据时更好的性能;尽可能的平台无关;简化往系统中添加和 删除外设的工作。

lspci命令:

#!/bin/bash # 测试参数配置 TEST_NAME="nvme_randwrite_test" BS="4k" NUMJOBS=4 IODEPTH=32 RUNTIME=500 # 500秒测试时长 INTERVAL=500 # 500ms记录一次 # 性能分析阈值配置 PERF_THRESHOLD=0.5 # 性能低于平均值50%的阈值 ZERO_THRESHOLD=0 # 性能跌0的阈值 # 创建测试日志根目录 LOG_ROOT="./fio_test_results" mkdir -p $LOG_ROOT # 测试设备列表 DEVICES=$(seq 0 11 | xargs -I {} echo "/dev/nvme{}n1") # 检查设备存在性和挂载状态 for dev in $DEVICES; do if [ ! -b $dev ]; then echo "错误:设备 $dev 不存在!" >&2 exit 1 fi # 检查并卸载已挂载设备 mountpoint=$(lsblk -no MOUNTPOINT $dev 2>/dev/null) if [ -n "$mountpoint" ]; then echo "卸载已挂载设备 $dev (挂载点: $mountpoint)..." sudo umount $dev || { echo "错误:无法卸载设备 $dev" >&2 exit 1 } fi done # 并行执行fio测试 echo "开始测试12块NVMe硬盘,总时长约${RUNTIME}秒..." for dev in $DEVICES; do # 提取设备编号 dev_num=$(echo $dev | grep -oP '(?<=nvme)\d+(?=n1)') log_dir="${LOG_ROOT}/nvme${dev_num}n1" mkdir -p $log_dir # 后台执行fio测试(确保整个fio命令作为一个字符串连续执行) ( echo "启动 $dev 测试..." sudo fio \ --name=nvme${dev_num}_randwrite \ --filename=$dev \ --ioengine=libaio \ --rw=randwrite \ --bs=$BS \ --numjobs=$NUMJOBS \ --iodepth=$IODEPTH \ --direct=1 \ --runtime=$RUNTIME \ --time_based \ --group_reporting \ --log_avg_msec=$INTERVAL \ --log_unix_epoch=1 \ --per_job_logs=0 \ --write_bw_log=${log_dir}/bw \ --write_iops_log=${log_dir}/iops \ --write_lat_log=${log_dir}/lat \ --output=${log_dir}/summary.log 2>&1 echo "$dev 测试完成" ) & done # 等待所有后台任务完成 wait echo "所有NVMe硬盘测试已完成!结果保存在 ${LOG_ROOT}" # 性能分析函数 analyze_perf() { local log_file=$1 local metric=$2 local report_file=$3 # 检查日志文件是否存在 if [ ! -f "$log_file" ]; then echo "错误:日志文件 $log_file 不存在!" >> $report_file return 1 fi # 检查文件是否为空 if [ ! -s "$log_file" ]; then echo "警告:日志文件 $log_file 为空,无数据可分析!" >> $report_file return 1 fi # 计算平均值 local avg=$(awk '{sum+=$2} END {if(NR>0) printf "%.2f", sum/NR; else printf "0"}' $log_file) echo "${metric}平均值: $avg" >> $report_file # 分析低于阈值50%的持续时间 local threshold=$(awk -v avg="$avg" -v ratio="$PERF_THRESHOLD" 'BEGIN {print avg * ratio}') awk -v thr="$threshold" -v interval_sec="0.5" -v metric="$metric" ' BEGIN { low_start=0; low_points=0; low_segments=0; low_total_duration=0; max_low_duration=0 } { if ($2 < thr && $2 > 0) { if (low_start == 0) { low_start = 1 low_points = 1 } else { low_points++ } } else { if (low_start) { duration = low_points * interval_sec low_total_duration += duration if (duration > max_low_duration) max_low_duration = duration low_segments++ low_start = 0 low_points = 0 } } } END { if (low_start) { duration = low_points * interval_sec low_total_duration += duration if (duration > max_low_duration) max_low_duration = duration low_segments++ } printf "%s低于平均值50%%的统计:\n", metric printf " 发生次数: %d\n", low_segments printf " 总持续时间: %.3f秒\n", low_total_duration printf " 最长单次持续时间: %.3f秒\n", max_low_duration } ' $log_file >> $report_file # 分析性能跌0的持续时间 awk -v interval_sec="0.5" -v metric="$metric" ' BEGIN { zero_start=0; zero_points=0; zero_segments=0; zero_total_duration=0; max_zero_duration=0 } { if ($2 == 0) { if (zero_start == 0) { zero_start = 1 zero_points = 1 } else { zero_points++ } } else { if (zero_start) { duration = zero_points * interval_sec zero_total_duration += duration if (duration > max_zero_duration) max_zero_duration = duration zero_segments++ zero_start = 0 zero_points = 0 } } } END { if (zero_start) { duration = zero_points * interval_sec zero_total_duration += duration if (duration > max_zero_duration) max_zero_duration = duration zero_segments++ } printf "%s跌0统计:\n", metric printf " 发生次数: %d\n", zero_segments printf " 总持续时间: %.3f秒\n", zero_total_duration printf " 最长单次持续时间: %.3f秒\n", max_zero_duration } ' $log_file >> $report_file } # 执行性能分析 echo "开始分析测试结果..." for dev in $DEVICES; do dev_num=$(echo $dev | grep -oP '(?<=nvme)\d+(?=n1)') log_dir="${LOG_ROOT}/nvme${dev_num}n1" report_file="${log_dir}/performance_analysis.txt" echo "NVMe设备性能分析: $dev" > $report_file echo "测试时间: $(date)" >> $report_file echo "----------------------------------------" >> $report_file # 分析各指标(使用正确的日志文件路径) [ -f "${log_dir}/iops_iops.log" ] && analyze_perf "${log_dir}/iops_iops.log" "IOPS" "$report_file" [ -f "${log_dir}/bw_bw.log" ] && analyze_perf "${log_dir}/bw_bw.log" "带宽(KiB/s)" "$report_file" [ -f "${log_dir}/lat_lat.log" ] && analyze_perf "${log_dir}/lat_lat.log" "延迟(us)" "$report_file" # 确保报告不为空 if [ ! -s "$report_file" ]; then echo "警告:未生成有效性能数据,可能原因:" >> "$report_file" echo "1. 设备未正确识别或挂载" >> "$report_file" echo "2. FIO测试未生成日志文件" >> "$report_file" echo "3. 测试参数配置错误" >> "$report_file" fi echo "----------------------------------------" >> $report_file echo "分析报告已保存至: $report_file" done echo "所有性能分析完成!" 修改以上代码,对PCIE SSD 进行写操作
最新发布
08-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值