Ubuntu 下测试 NVME SSD 的读写速度

在 Ubuntu 系统下,测试 NVME SSD 的读写速度,有好多种方法,常用的有如下几种:

1. Gnome-disks

Gnome-disks(也称为“Disks”)是 GNOME 桌面环境中的磁盘管理工具,有图形界面,是测试 NVME SSD 读写速度操作最方便的一种。

可以通过以下方式安装:

    sudo apt update
    sudo apt install gnome-disk-utility

安装完成后,从 Settings 选择 Disks,打开该应用。

也可以在 Run Programm 下键入 gnomes-disks 直接运行:

在左侧的设备列表中选择你的固态硬盘,然后点击右上角的菜单图标(三个竖点),选择 "Benchmark Disk" 来进行速度测试。 

下面是一个 128GB SSD 的测试结果:

作为对比,这是 一张 64GB SD 卡的结果,看起来性能比较差:

另一张 SD 卡:

2. hdparm

当然,也可以使用 hdparm 来测试去读取速度:

        sudo apt-get install hdparm

        sudo hdparm -Tt /dev/mmcblk0

/dev/mmcblk0:
 Timing cached reads:   9082 MB in  2.00 seconds = 4546.07 MB/sec
 HDIO_DRIVE_CMD(identify) failed: Invalid argument
 Timing buffered disk reads:  36 MB in  3.11 seconds =  11.57 MB/sec

        sudo hdparm -Tt /dev/nvme0n1

/dev/nvme0n1:
 Timing cached reads:   9754 MB in  2.00 seconds = 4882.31 MB/sec
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
 Timing buffered disk reads: 1056 MB in  3.00 seconds = 351.64 MB/sec

3. fio

fio 是一个功能强大的磁盘性能测试工具,可以执行各种读取和写入测试,并提供详细的性能报告。

可以使用以下命令安装 fio:

        sudo apt update    
        sudo apt install fio

安装完成后,创建一个配置文件,例如:test_ssd.fio,并在其中定义测试的参数。

    [global]
    ioengine=libaio
    direct=1
    runtime=60
    time_based
    bs=4k
    numjobs=1
    size=1G

    [test_ssd_read]
    filename=/dev/nvme0n1
    rw=read

    [test_ssd_write]
    filename=/dev/nvme0n1
    rw=write

    [test_ssd_randrw]
    filename=/dev/nvme0n1
    rw=randrw

然后,在终端中运行以下命令来执行测试:

        sudo fio test_ssd.fio

test_ssd_read: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
test_ssd_write: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
test_ssd_randrw: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.16
Starting 3 processes
Jobs: 3 (f=3): [R(1),W(1),m(1)][100.0%][r=40.2MiB/s,w=81.1MiB/s][r=10.3k,w=20.8k IOPS][eta 00m:00s]
test_ssd_read: (groupid=0, jobs=1): err= 0: pid=11250: Mon Jan  6 13:43:18 2025
  read: IOPS=6125, BW=23.9MiB/s (25.1MB/s)(1436MiB/60001msec)
    slat (usec): min=3, max=7732, avg=14.71, stdev=30.46
    clat (nsec): min=1750, max=23628k, avg=144762.35, stdev=177571.14
     lat (usec): min=37, max=23643, avg=160.05, stdev=180.14
    clat percentiles (usec):
     |  1.00th=[   52],  5.00th=[   55], 10.00th=[   66], 20.00th=[   73],
     | 30.00th=[   79], 40.00th=[  104], 50.00th=[  125], 60.00th=[  141],
     | 70.00th=[  163], 80.00th=[  192], 90.00th=[  262], 95.00th=[  306],
     | 99.00th=[  367], 99.50th=[  392], 99.90th=[ 3458], 99.95th=[ 3720],
     | 99.99th=[ 5866]
   bw (  KiB/s): min=22280, max=25600, per=58.79%, avg=24492.71, stdev=542.05, samples=119
   iops        : min= 5570, max= 6400, avg=6123.14, stdev=135.51, samples=119
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.19%
  lat (usec)   : 100=38.84%, 250=49.97%, 500=10.75%, 750=0.04%, 1000=0.02%
  lat (msec)   : 2=0.04%, 4=0.11%, 10=0.02%, 20=0.01%, 50=0.01%
  cpu          : usr=5.19%, sys=16.83%, ctx=367841, majf=0, minf=18
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=367511,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1
test_ssd_write: (groupid=0, jobs=1): err= 0: pid=11251: Mon Jan  6 13:43:18 2025
  write: IOPS=16.3k, BW=63.7MiB/s (66.8MB/s)(3820MiB/60001msec); 0 zone resets
    slat (usec): min=3, max=1150, avg=13.95, stdev= 2.73
    clat (nsec): min=1167, max=3738.0k, avg=43920.67, stdev=12785.94
     lat (usec): min=28, max=3742, avg=58.42, stdev=13.36
    clat percentiles (usec):
     |  1.00th=[   41],  5.00th=[   41], 10.00th=[   42], 20.00th=[   42],
     | 30.00th=[   42], 40.00th=[   43], 50.00th=[   43], 60.00th=[   43],
     | 70.00th=[   44], 80.00th=[   46], 90.00th=[   48], 95.00th=[   51],
     | 99.00th=[   60], 99.50th=[   65], 99.90th=[  114], 99.95th=[  174],
     | 99.99th=[  326]
   bw (  KiB/s): min=62512, max=69112, per=79.17%, avg=65189.33, stdev=725.54, samples=119
   iops        : min=15628, max=17278, avg=16297.32, stdev=181.38, samples=119
  lat (usec)   : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=93.90%
  lat (usec)   : 100=5.97%, 250=0.10%, 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.01%
  cpu          : usr=13.82%, sys=39.91%, ctx=977956, majf=0, minf=13
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,978007,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1
test_ssd_randrw: (groupid=0, jobs=1): err= 0: pid=11252: Mon Jan  6 13:43:18 2025
  read: IOPS=4290, BW=16.8MiB/s (17.6MB/s)(1006MiB/60001msec)
    slat (usec): min=3, max=4648, avg=14.43, stdev=20.50
    clat (usec): min=2, max=8482, avg=142.87, stdev=154.52
     lat (usec): min=29, max=8497, avg=157.87, stdev=156.10
    clat percentiles (usec):
     |  1.00th=[   46],  5.00th=[   50], 10.00th=[   70], 20.00th=[   73],
     | 30.00th=[   77], 40.00th=[   89], 50.00th=[  116], 60.00th=[  137],
     | 70.00th=[  161], 80.00th=[  200], 90.00th=[  265], 95.00th=[  318],
     | 99.00th=[  383], 99.50th=[  408], 99.90th=[ 3163], 99.95th=[ 3654],
     | 99.99th=[ 4146]
   bw (  KiB/s): min=15536, max=21768, per=41.20%, avg=17163.20, stdev=1419.46, samples=119
   iops        : min= 3884, max= 5442, avg=4290.76, stdev=354.88, samples=119
  write: IOPS=4286, BW=16.7MiB/s (17.6MB/s)(1005MiB/60001msec); 0 zone resets
    slat (usec): min=3, max=8166, avg=15.19, stdev=26.92
    clat (usec): min=2, max=10019, avg=51.45, stdev=52.63
     lat (usec): min=28, max=10041, avg=67.20, stdev=59.35
    clat percentiles (usec):
     |  1.00th=[   41],  5.00th=[   42], 10.00th=[   42], 20.00th=[   42],
     | 30.00th=[   43], 40.00th=[   43], 50.00th=[   43], 60.00th=[   44],
     | 70.00th=[   47], 80.00th=[   50], 90.00th=[   75], 95.00th=[  104],
     | 99.00th=[  113], 99.50th=[  130], 99.90th=[  215], 99.95th=[  314],
     | 99.99th=[ 2540]
   bw (  KiB/s): min=15312, max=21620, per=20.81%, avg=17139.04, stdev=1449.15, samples=119
   iops        : min= 3828, max= 5405, avg=4284.72, stdev=362.32, samples=119
  lat (usec)   : 4=0.02%, 10=0.01%, 20=0.01%, 50=42.73%, 100=24.79%
  lat (usec)   : 250=26.79%, 500=5.53%, 750=0.02%, 1000=0.01%
  lat (msec)   : 2=0.02%, 4=0.07%, 10=0.01%, 20=0.01%
  cpu          : usr=7.95%, sys=23.05%, ctx=514776, majf=0, minf=20
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=257454,257191,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=40.7MiB/s (42.7MB/s), 16.8MiB/s-23.9MiB/s (17.6MB/s-25.1MB/s), io=2441MiB (2560MB), run=60001-60001msec
  WRITE: bw=80.4MiB/s (84.3MB/s), 16.7MiB/s-63.7MiB/s (17.6MB/s-66.8MB/s), io=4825MiB (5059MB), run=60001-60001msec

Disk stats (read/write):
  nvme0n1: ios=624031/1233179, merge=0/0, ticks=84957/51088, in_queue=136046, util=100.00%

将 numjobs参数改为:8,最后结果如下:

Run status group 0 (all jobs):
   READ: bw=177MiB/s (186MB/s), 8521KiB/s-13.6MiB/s (8726kB/s-14.2MB/s), io=10.4GiB (11.1GB), run=60001-60006msec
  WRITE: bw=280MiB/s (294MB/s), 8509KiB/s-27.0MiB/s (8713kB/s-29.3MB/s), io=16.4GiB (17.6GB), run=60001-60006msec

Disk stats (read/write):
  nvme0n1: ios=2713427/4292312, merge=0/0, ticks=702077/462120, in_queue=1164198, util=100.00%

可见,设置不同的参数,测得的结果也大不相同,参数灵活,使用复杂。

                                                                老徐,2025/01/06

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI投资分析:用于股票评级的大型语言模型(LLMs)

“AI in Investment Analysis: LLMs for Equity Stock Ratings” 论文地址:https://arxiv.org/pdf/2411.00856 摘要 投资分析作为金融服务领域的重要组成部分,LLMs(大型语言模型)为股票评级带来了改进的潜力。传统的股票评级方式…

基于CLIP和DINOv2实现图像相似性方面的比较

概述 在人工智能领域,CLIP和DINOv2是计算机视觉领域的两大巨头。CLIP彻底改变了图像理解,而DINOv2为自监督学习带来了新的方法。 在本文中,我们将踏上一段旅程,揭示定义CLIP和DINOv2的优势和微妙之处。我们的目标是发现这些模型…

【学习笔记】数据结构(十)

内部排序 文章目录 内部排序10.1 概述10.2 插入排序10.2.1 直接插入排序10.2.2 其他插入排序10.2.2.1 折半插入排序(Binary Insertion Sort)10.2.2.2 2-路插入排序(Two-Way Insertion Sort)10.2.2.3 表插入排序(Table Insertion Sort&#xf…

Unity学习笔记(七)使用状态机重构角色攻击

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画,我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡,这样虽然能完成功能,但是如…

Ubuntu20.04中安装ns-3.36及遇到的问题

一、安装虚拟机:VMware 17.5 参考教程:VMware17Pro虚拟机安装教程(超详细)-CSDN博客 博主:七维大脑 遇到的问题: Q1:安装ubuntu系统时,页面看不到”继续“选项,无法进行下一步 A&#xff…

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling(事件处理)3. Multitasking(多任务处理)4. Push Notifications(推送通知&…

人大金仓实现主键自增.

使用数据库中自带的参数类型 serial 类型(相当于创建一个INT列), 或者bigserial(相当于创建一个BIGINT列. 示例sql: CREATE TABLE ord(id SERIAL,ord_no INT NOT NULL,ord_name VARCHAR(32),CONSTRAINT "ord_PKEY" PRIMARY KEY ("id"));插入时指定自增值…

React Router 向路由组件传state参数浏览器回退历史页面显示效果问题

昨天在看尚硅谷张天禹老师讲的 React教程p90,老师讲到 React路由的 replace模式和push模式,老师的演示效果与自己本地操作不太一样。 老师的效果:点击查看消息1,消息2,消息3 再点回退,可以依次查看到 消息…

selenium无法定位元素的几种解决方案

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法: d…

SSM-Spring-IOC/DI注解开发

目录 IOC/DI注解开发 1 注解开发定义bean 2 纯注解开发模式 步骤 Bean的作用范围 Bean生命周期 3 注解开发依赖注入 Autowired 注解实现按照名称注入 简单数据类型注入 注解读取properties配置文件 4 IOC/DI 注解开发管理第三方bean 4.1 步骤(以管理第三…

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…

接口开发完后,个人对于接下来接口优化的一些思考

优化点 入参的合法性和长度范围&#xff0c;必填项的检查验证 因为没有入参&#xff0c;所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …

Redis内存碎片

什么是内存碎片? 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子&#xff1a;操作系统为你分配了 32 字节的连续内存空间&#xff0c;而你存储数据实际只需要使用 24 字节内存空间&#xff0c;那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)

python环境没有安装的可以点击这里先安装好python环境&#xff0c;python环境安装教程 安装 PyCharm IDE 获取 PyCharm PyCharm 提供两种主要版本——社区版&#xff08;免费&#xff09;和专业版&#xff08;付费&#xff09;。对于初学者和个人开发者而言&#xff0c;社区…

RedisTemplate执行lua脚本及Lua 脚本语言详解

使用RedisTemplate执行lua脚本 在开发中&#xff0c;我们经常需要与Redis数据库进行交互&#xff0c;而Redis是一个基于内存的高性能键值存储数据库&#xff0c;它支持多种数据结构&#xff0c;并提供了丰富的命令接口。在某些情况下&#xff0c;我们可能需要执行一些复杂的逻…

基于Python 的宠物管理系统(源码+部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

stm32第一次烧录或者上电运行卡死问题分析

问题描述 单片机烧录代码&#xff08;刚上电&#xff09;无法立即运行&#xff0c;必须要复位一次或多次才能运行&#xff1b;跟踪调试会进入HardFault_Handler中断。 问题分析 烧录配置如下图&#xff0c;首先排除配置问题那么该问题就比较让人头大了&#xff0c;理论上&am…

ESP32-C3 AT WiFi AP 启 TCP Server 被动接收模式 + BLE 共存

TCP 被动接收模式&#xff0c;每次发的数据会先存到缓冲区&#xff0c;参见&#xff1a;ATCIPRECVTYPE 指令说明。 即每包数据不会实时报告 IPD 接收情况&#xff0c;如果需要查询缓冲区的数据&#xff0c;先用 ATCIPRECVLEN? 指令查询被动接收模式下套接字数据的长度 。获取…

【LeetCode Hot100 二分查找】搜索插入位置、搜索二维矩阵、搜索旋转排序数组、寻找两个正序数组的中位数

二分查找 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置寻找旋转排序数组中的最小值搜索旋转排序数组寻找两个正序数组的中位数&#xff08;hard&#xff09; 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并…