EMMC存儲性能測試方法

記于 2022 年 9 月 15 日

EMMC存儲性能測試方法 - Wesley’s Blog

參考Android-emmc性能測試 | 一葉知秋進行實踐操作

dd 命令

頁面緩存

為了測試 emmc 的真實讀寫性能,我們需要先把頁面緩存給清理:

echo 1 > /proc/sys/vm/drop_caches
console:/ # echo 1 > /proc/sys/vm/drop_caches                                  
console:/ # busybox dd if=/dev/block/mmcblk0 of=/dev/null bs=1M count=512                          <
512+0 records in
512+0 records out
536870912 bytes (512.0MB) copied, 2.491718 seconds, 205.5MB/s
console:/ # busybox dd if=/dev/block/mmcblk0 of=/dev/null bs=1M count=512                          <
512+0 records in
512+0 records out
536870912 bytes (512.0MB) copied, 0.290948 seconds, 1.7GB/sconsole:/ # echo 1 > /proc/sys/vm/drop_caches 
console:/ # busybox  dd if=/dev/block/mmcblk0 of=/dev/null bs=1M count=512                          <
512+0 records in
512+0 records out
536870912 bytes (512.0MB) copied, 2.508393 seconds, 204.1MB/s
console:/ # 

連續執行兩次 busybox dd if=/dev/block/mmcblk0 of=/dev/null bs=1M count=512 ,從 /dev/block/mmcblk0 (即emmc) 塊設備中讀取內容,寫到 /dev/null

/dev/null 是一個虛擬設備,寫入這個路徑并不會保存數據,可以認為這個設備的寫入速度無限大,也就是寫入速度不會成為這個命令的瓶頸,我們這個命令主要是為了測試 emmc 的讀取速度。可以看到第一次執行的結果是 205.5MB/s,第二次執行的結果是 1.7GB/s。從這個數據來看,頁面緩存極大的提高了熱點文件的讀取速度。然后我們用 echo 1 > /proc/sys/vm/drop_caches命令清除一下頁面緩存,再執行同樣的 dd命令,發現速度跟第一次差不多了。

寫入性能測試

寫入塊設備

cache 分區一般是用來存放 OTA 升級包的,正常狀態下掛載失敗也不影響系統的正常運行,所以我們拿 cache 分區來作寫入測試,先找到 cache 對應的塊設備文件(df -h命令顯示異常的話,可以執行ls -l /dev/block/platform/*/by-name/cache

注意:本測試方法可能會損壞cache分區導致ota失敗,出現這種情況建議恢復出廠設置或者線刷。

console:/ # df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.5G  892K  1.5G   1% /dev
tmpfs                 1.5G     0  1.5G   0% /mnt
/dev/block/mmcblk0p26  14M  168K   14M   2% /metadata
/dev/block/dm-1       1.1G  0.9G  199M  84% /
/dev/block/mmcblk0p40 379M   24M  356M   7% /wesley
/dev/block/mmcblk0p38 379M  154M  226M  41% /factory
/dev/block/mmcblk0p39  18M  1.3M   17M   8% /atv
/dev/block/mmcblk0p36 9.1M   24K  9.0M   1% /oem
/dev/block/dm-2       340M  240M  100M  71% /vendor
/dev/block/dm-0       167M   84K  167M   1% /mnt/scratch
overlay               167M   84K  167M   1% /system_ext
overlay               167M   84K  167M   1% /product
overlay               167M   84K  167M   1% /odm
tmpfs                 1.5G     0  1.5G   0% /apex
tmpfs                 1.5G  248K  1.5G   1% /linkerconfig
tmpfs                  20M  1.0M   19M   6% /mnt/vendor/rtdlog
tmpfs                  20M  8.0K   20M   1% /tmp
/dev/block/mmcblk0p23 1.4G  3.9M  1.4G   1% /cache
/dev/block/mmcblk0p31 236M   12M  224M   6% /mnt/vendor/tvconfigs
/dev/block/mmcblk0p32  26M   84K   26M   1% /mnt/vendor/tvdata
/dev/block/mmcblk0p33  18M   36K   18M   1% /mnt/vendor/impdata
/dev/block/mmcblk0p4  976K  228K  748K  24% /mnt/vendor/factory
/dev/block/mmcblk0p6  976K   28K  948K   3% /mnt/vendor/factory_ro
tmpfs                  20M     0   20M   0% /shm
tmpfs                 8.0M     0  8.0M   0% /mnt/EPGdb
/dev/block/mmcblk0p42 107G  4.8G  102G   5% /data
tmpfs                 1.5G     0  1.5G   0% /data_mirror
/dev/fuse             107G  4.8G  102G   5% /mnt/user/0/emulated
console:/ # 

cache分區的塊設備文件為/dev/block/mmcblk0p23。

寫入測試:

console:/ #  echo 1 > /proc/sys/vm/drop_caches    
console:/ #  busybox dd if=/dev/zero of=/dev/block/mmcblk0p23 bs=1M count=1024 conv=fsync
1024+0 records in
1024+0 records out
1073741824 bytes (1.0GB) copied, 11.371810 seconds, 90.0MB/s

輸入文件為 /dev/zero,是一個虛擬設備,我們可以認為這個設備的讀取速度無限大,也就是讀取速度不會影響到寫入的速度。

bs=1M : 一次寫入 1M

count=1024 : 寫入 1024 次,也就是寫入的數據總量為 1G

conv=fsync : dd 結束前,把數據同步到 emmc,如果沒加這個參數的話,數據可能還在緩存之中。為了確保數據準確,一定要加這個參數。

可以重復測試幾次

寫入文件

console:/ # echo 1 > /proc/sys/vm/drop_caches
console:/ # busybox dd if=/dev/zero of=/data/ddtest.bin bs=1M count=1024 conv=fsync                   
1024+0 records in
1024+0 records out
1073741824 bytes (1.0GB) copied, 15.211609 seconds, 67.3MB/s
console:/ #

要重復測試幾次。相對直接寫塊設備文件慢了 30M/s 左右。這可能是文件系統帶來的影響。

讀取測試

讀取塊設備

直接用我們上面介紹清除緩存的例子就行,這里就不再重復了。

從上面的例子得到的數據為 205M/s 左右。

讀取文件

console:/ # echo 1 > /proc/sys/vm/drop_caches        
console:/ # busybox dd if=/data/ddtest.bin of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.0GB) copied, 5.464306 seconds, 187.4MB/s
console:/ # 

直接拿測試寫入速度時生成的文件,重復測試幾次,速度基本上在 187MB/s 左右。

iozone

Android 系統源碼中并沒有 iozone,我們從官網上下載編譯,我下載時最新版本為iozone3_493,這個版本已經有 Android.mk 在代碼里面了,將源碼放到 Android系統源碼里面 mm 即可。下面已經是我編譯好的文件。對應不同硬件使用對應版本即可,把文件push到/data/local/tmp/,并賦予執行權限。

source/izone.zip at main · wesley666/source

隨機讀寫測試

console: echo 1 > /proc/sys/vm/drop_caches                                              <
console:/data/local/tmp # ./iozone -azecI -+n -L64 -S32 -r1m -s1024m -i0 -i1 -i2 -w -f /data/iozonetest.bin Iozone: Performance Test of File I/OVersion $Revision: 3.493 $Compiled for 32 bit mode.Build: linux-arm Contributors:William Norcott, Don Capps, Isom Crawford, Kirby CollinsAl Slater, Scott Rhine, Mike Wisner, Ken GossSteve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,Vangel Bojaxhi, Ben England, Vikentsi Lapa,Alexey Skidanov, Sudhir Kumar.Run began: Fri Jun 10 19:34:04 2022Auto ModeCross over of record size disabled.Include fsync in write timingInclude close in write timingO_DIRECT feature enabledNo retest option selectedRecord Size 1024 kBFile size set to 1048576 kBSetting no_unlinkCommand line used: ./iozone -azecI -+n -L64 -S32 -r1m -s1024m -i0 -i1 -i2 -w -f /data/iozonetest.binOutput is in kBytes/secTime Resolution = 0.000001 seconds.Processor cache size set to 32 kBytes.Processor cache line size set to 64 bytes.File stride size set to 17 * record size.random    random     bkwd    record    stride                                    kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread1048576    1024   150737        0   210429        0   208681   173348                                                                iozone test complete.
console:/data/local/tmp # 

從結果來看,寫速度為150MB/s,讀速度為210MB/s,隨機讀速度為208MB/s。 隨機寫速度為 173MB/s。

重復測試幾次結果差不多,讀的速度基本跟 dd 的一致。寫入比 dd 的快了一倍幾,這里面的差距待研究,可能跟參數設置有關。

./iozone -azecI -+n -L64 -S32 -r1m -s1024m -i0 -i1 -i2 -w -f /data/iozonetest.bin [-Rb /sdcard/emmc_test.xls] 

各個參數定義如下:

a: 使用全自動模式。生成涵蓋所有測試操作的輸出,記錄大小為4k到16M,文件大小為64k到512M。

z: 與-a一起使用以測試所有可能的記錄大小。通常,Iozone在全自動模式下使用時會忽略對非常大的文件的小記錄大小的測試。此選項強制iozone在自動測試中也包括小記錄大小。

e: 在時間計算中包括flush(fsync,fflush)

c: 在計時計算中包括close()。 僅當您懷疑當前正在測試的操作系統中的close()被破壞時,這才有用。 它對于NFS3測試也很有用,可以幫助識別nfs3_commit是否運行良好。

I: 對所有文件操作使用DIRECT I/O. 告訴文件系統所有操作都繞過緩沖區緩存并直接轉到磁盤。 這也將在VxFS上使用VX_DIRECT,在Linux上使用O_DIRECT,在Solaris上使用directio()。

-+n: 沒有選擇重新測試。使用此選項可防止重新測試運行。

L64: Set processor cache line size to 64 Bytes

S32: Set processor cache size to 32KBytes

r2m: block size 指定一次寫入/讀出的塊大小:1M

s1024m: 用于指定要測試的文件的大小:1024M

-i N 用來選擇測試項, 比如Read/Write/Random 比較常用的是0 1 2,可以指定成-i 0 -i 1 -i2.這些別的詳細內容請查man

0=write/rewrite

1=read/re-read

2=random-read/write

3=Read-backwards

4=Re-write-record

5=stride-read

6=fwrite/re-fwrite

7=fread/Re-fread

8=random mix

9=pwrite/Re-pwrite

10=pread/Re-pread

11=pwritev/Re-pwritev

12=preadv/Re-preadv

-+b 400000,30000: burst size 400000KBytes,sleep between burst 30000ms

w: 當臨時文件使用完畢時不刪除它們。把它們留在文件系統中。

f: 指定測試文件的名字(這個文件必須指定你要測試的那個硬件中)

可選參數:

R: Generate Excel report

b: Filename Create Excel worksheet file,emmc_test.xls

注意:

根據測試文件大小的不同,iozone 磁盤讀寫性能的測試方法主要包括1倍內存測試和2倍內存測試(避免緩存的影響)。

參考

Android-emmc性能測試 | 一葉知秋

axboe/fio: Flexible I/O Tester

DevriesL/RaptorMark

Iozone Filesystem Benchmark

iozone: Index of /src/current

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79346.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件管理(安裝方式)

1.rpm安裝 1.1.rpm介紹 rpm軟件包名稱: 軟件名稱 版本號(主版本、次版本、修訂號) 操作系統 -----90%的規律 舉例:openssh-6.6.1p1-31.el7.x86_64.rpm 數字是版本號:第一位主版本號,第二位次版本號,帶橫杠的是修訂號, el幾---操作系統的版本。 #用rpm安裝需要考慮如下信…

OnlyOffice Document Server 源碼調試指南-ARM和x86雙模式安裝支持

在ARM64架構下創建的ONLYOFFICE源碼調試容器具有顯著優勢。該容器基于官方Document Server鏡像構建&#xff0c;通過集成Git、Python和Node.js等工具鏈&#xff0c;實現跨平臺環境一致性&#xff0c;確保ARM設備的兼容性。容器化隔離消除了依賴沖突&#xff0c;支持快速部署到邊…

oracle 數據庫查詢指定用戶下每個表占用空間的大小,倒序顯示

oracle 查詢指定用戶下每個表占用空間的大小&#xff0c;倒序顯示 使用場景&#xff1a;數據分析&#xff1b;導出醫院正式庫到開發環境時&#xff0c;查詢出占用表空間高的業務表、導出時排除該表 在Oracle數據庫中&#xff0c;要查詢指定用戶下每個表占用空間的大小并以倒序…

歸并排序【逆序對】

目錄 歸并排序原理 逆序對 歸并排序 主要利用分治思想&#xff0c;時間復雜度O(nlogn) 原理 1.對數列不斷等長拆分&#xff0c;直到一個數的長度。2.回溯時&#xff0c;按升序合并左右兩段。3.重復以上兩個過程&#xff0c;直到遞歸結束。 合并 1.i&#xff0c;j分別指向a的…

AI 與生物技術的融合:開啟精準醫療的新紀元

在科技飛速發展的今天&#xff0c;人工智能&#xff08;AI&#xff09;與生物技術的融合正在成為推動醫療領域變革的重要力量。精準醫療作為現代醫學的重要發展方向&#xff0c;旨在通過深入了解個體的基因信息、生理特征和生活方式&#xff0c;為患者提供個性化的治療方案。AI…

對比表格:數字簽名方案、密鑰交換協議、密碼學協議、后量子密碼學——密碼學基礎

文章目錄 一、數字簽名方案1.1 ECDSA&#xff1a;基于橢圓曲線的數字簽名算法1.2 EdDSA&#xff1a;Edwards曲線數字簽名算法1.3 RSA-PSS&#xff1a;帶有概率簽名方案的RSA1.4 數字簽名方案對比 二、密鑰交換協議2.1 Diffie-Hellman密鑰交換2.2 ECDH&#xff1a;橢圓曲線Diffi…

Linux 進程間通信(IPC)詳解

進程間通信&#xff08;IPC&#xff09;深入解析 一、進程間通信概述 在操作系統里&#xff0c;不同進程間常常需要進行數據交換、同步協調等操作&#xff0c;進程間通信&#xff08;Inter - Process Communication&#xff0c;IPC&#xff09;機制應運而生。在Linux系統中&a…

深度解析ComfyUI的使用

一、ComfyUI 概述 ComfyUI 本質上是一個專為 AI 繪畫愛好者和專業人士打造的用戶界面工具&#xff0c;它的核心作用是將復雜的 AI 繪畫生成過程以直觀的方式呈現給用戶。與傳統的圖像生成工具不同&#xff0c;ComfyUI 借助其獨特的節點化工作流系統&#xff0c;把深度學習模型…

模型測試報錯:有2張顯卡但cuda.device_count()顯示GPU卡數量只有一張

此貼僅為記錄debug過程&#xff0c;為防后續再次遇見 問題 問題情境 復現文章模型&#xff0c;使用GPU跑代碼&#xff0c;有兩張GPU&#xff0c;設置在 cuda: 1 上跑 問題描述 在模型測試加載最優模型時報錯&#xff1a;torch.cuda.device_count()顯示GPU卡數量只有一張&…

【計網】認識跨域,及其在go中通過注冊CORS中間件解決跨域方案,go-zero、gin

一、跨域&#xff08;CORS&#xff09;是什么&#xff1f; 跨域&#xff0c;指的是瀏覽器出于安全限制&#xff0c;前端頁面在訪問不同源&#xff08;協議、域名、端口任一不同&#xff09;的后端接口時&#xff0c;會被瀏覽器攔截。 比如&#xff1a; 前端地址后端接口地址是…

內存性能測試方法

寫于 2022 年 6 月 24 日 內存性能測試方法 - Wesley’s Blog dd方法測試 cat proc/meminfo console:/ # cat proc/meminfo MemTotal: 3858576 kB MemFree: 675328 kB MemAvailable: 1142452 kB Buffers: 65280 kB Cached: 992252 …

AVFormatContext 再分析二

說明 &#xff1a;將 avfromatContext 的變量依次打印分析&#xff0c;根據ffmpeg 給的說明&#xff0c;猜測&#xff0c;結合網上的文章字節寫測試代碼分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…

深入了解Linux系統—— 進程優先級

前言 我們現在了解了進程是什么&#xff0c;進程狀態表示什么 &#xff0c;我們現在繼續來了解進程的屬性 —— 進程優先級 進程執行者 在了解進程優先級之前&#xff0c;先來思考一個問題&#xff1a;在我們進行文件訪問操作時&#xff0c;操作系統是如何直到我們是誰&#x…

Expected SARSA算法詳解:python 從零實現

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

1penl配置

好的&#xff0c;根據您提供的 1pctl 命令輸出信息&#xff0c;我們來重新依次回答您的所有問題&#xff1a; 第一&#xff1a;1Panel 怎么設置 IP 地址&#xff1f; 根據您提供的 user-info 輸出&#xff1a; 面板地址: http://$LOCAL_IP:34523/93d8d2d705 這里的 $LOCAL_I…

鏈表的回文結構題解

首先閱讀題目&#xff1a; 1.要保證是回文結構 2.他的時間復雜度為O(n)、空間復雜度為O(1) 給出思路: 1.首先利用一個函數找到中間節點 2.利用一個函數逆置中間節點往后的所有節點 3.現在有兩個鏈表&#xff0c;第一個鏈表取頭節點一直到中間節點、第二個鏈表取頭結點到尾…

【LLaMA-Factory實戰】1.3命令行深度操作:YAML配置與多GPU訓練全解析

一、引言 在大模型微調場景中&#xff0c;命令行操作是實現自動化、規模化訓練的核心手段。LLaMA-Factory通過YAML配置文件和多GPU分布式訓練技術&#xff0c;支持開發者高效管理復雜訓練參數&#xff0c;突破單機算力限制。本文將結合結構圖、實戰代碼和生產級部署經驗&#…

C++負載均衡遠程調用學習之 Dns-Route關系構建

目錄 1.LARS-DNS-MYSQL環境搭建 2.LARSDNS-系統整體模塊的簡單說明 3.Lars-Dns-功能說明 4.Lars-Dns-數據表的創建 5.Lars-Dns-整體功能說明 6.Lars-DnsV0.1-Route類的單例實現 7.Lars-DnsV0.1-Route類的鏈接數據庫方法實現 8.Lars-DnsV0.1-定義存放RouteData關系的map數…

fastapi+vue中的用戶權限管理設計

數據庫設計&#xff1a;RBAC數據模型 這是一個典型的基于SQLAlchemy的RBAC權限系統數據模型實現&#xff0c;各模型分工明確&#xff0c;共同構成完整的權限管理系統。 圖解說明&#xff1a; 實體關系&#xff1a; 用戶(USER)和角色(ROLE)通過 USER_ROLE 中間表實現多對多關系…

【Python實戰】飛機大戰

開發一個飛機大戰游戲是Python學習的經典實戰項目&#xff0c;尤其適合結合面向對象編程和游戲框架&#xff08;如Pygame&#xff09;進行實踐。以下是游戲設計的核心考慮因素和模塊劃分建議&#xff1a; 一、游戲設計核心考慮因素 性能優化 Python游戲需注意幀率控制&#xff…