在RK3588平臺上進行PCIe設備(如NVMe SSD)壓測時,不少開發者遇到過這樣的“噩夢”:高負載下系統突然失去響應,日志里滿是異常信息,甚至直接崩潰重啟。今天我們就結合關鍵日志和代碼,拆解問題根源,分享一套可復用的排障思路。
一、問題現場:從日志看崩潰鏈條
我們先看兩張關鍵日志截圖:


NVMe驅動層的“超時風暴”
[2026-01-08 1623.487] nvme nvme0: I/O 124 QID 4timeout, aborting[2026-01-08 1623.487] nvme nvme0: I/O 125 QID 4timeout, aborting[2026-01-08 1623.487] nvme nvme0: I/O 127 QID 4timeout, aborting[2026-01-08 1623.487] nvme nvme0: I/O 128 QID 4timeout, aborting[2026-01-08 1624.483] nvme nvme0: I/O 20 QID 0timeout, reset controller
文件系統的“自我保護”
[] systemd-journald[258]:Failed to writeentry(21items,734bytes), ignoring: Read-onlyfilesystem
從日志可以清晰看到事件鏈條:
1.NVMe I/O超時:驅動層頻繁觸發I/O請求超時,嘗試abort操作。
2.控制器重置:超時后驅動嘗試重置NVMe控制器,但問題持續。
3.只讀文件系統:內核為保護數據,強制將文件系統設為只讀,導致日志服務無法寫入,系統陷入癱瘓。
二、根因剖析:三層拆解崩潰本質
要理解為什么超時會導致系統崩潰,需要從硬件能力、驅動配置、內核機制三個層面拆解:
1.硬件層面:RK3588的PCIe性能瓶頸
RK3588作為邊緣計算平臺,其PCIe控制器的帶寬和并發處理能力有限。高負載壓測下,PCIe總線吞吐量和延遲急劇上升,導致NVMe設備I/O請求排隊時間過長,無法在預設時間內完成。
2.驅動層面:默認超時參數過于“激進”
從圖三的內核代碼可以看到,NVMe驅動的默認超時參數是為通用PC平臺設計的:
unsignedintadmin_timeout =60; // 管理命令超時60秒unsignedintnvme_io_timeout =30;// I/O命令超時30秒
對于RK3588這類嵌入式平臺,30秒的I/O超時時間在高負載下顯得過于“苛刻”,極易觸發超時機制。
3.內核機制:數據保護的“雙刃劍”
當NVMe驅動頻繁觸發超時和重置時,內核會判定存儲設備不可靠,為避免數據損壞,自動執行mount -o remount,ro /操作,將根文件系統設為只讀。這一機制雖保護了數據,但直接導致系統無法正常運行,表現為“崩潰”。
三、對癥下藥:超時參數調優方案
核心解決思路是延長NVMe驅動的超時時間,讓I/O請求有足夠時間完成,避免觸發保護機制。
1.內核代碼修改

直接修改NVMe驅動的超時參數定義,將admin_timeout從60秒增至120秒,nvme_io_timeout從30秒增至120秒:
// 修改前unsignedintadmin_timeout =60;unsignedintnvme_io_timeout =30;// 修改后unsignedintadmin_timeout =120;unsignedintnvme_io_timeout =120;
修改后重新編譯內核或NVMe驅動模塊,使參數生效。
2.調優建議
?漸進式調整:先將超時參數翻倍(30→60→120),觀察壓測表現,避免一次性設置過大隱藏問題。
?適配硬件能力:結合RK3588的PCIe帶寬和NVMe設備性能,找到最適合的超時閾值,而非盲目增大參數。
四、排障心法:嵌入式壓測的通用技巧
在RK3588這類嵌入式平臺上進行性能壓測,掌握以下技巧可大幅提升排障效率:
1.日志優先原則:始終從系統日志(dmesg、journalctl)入手,定位關鍵錯誤信息,避免盲目排查硬件。
2.分層排查法:
?驅動層:檢查設備驅動日志(如NVMe、PCIe),確認超時、錯誤碼。
?總線層:用lspci -vvv檢查PCIe設備帶寬、鏈路狀態,確認是否降速或錯誤。
?硬件層:檢查設備供電、散熱,避免因過熱導致性能下降。
3.漸進式壓測:從低負載到高負載逐步壓測,記錄系統表現,找到觸發問題的閾值,針對性優化。
4.數據保護前置:壓測前做好數據備份,可臨時關閉文件系統只讀保護(mount -o remount,rw /),但這只是臨時手段,根本解決需處理超時問題。
五、總結:嵌入式性能調優的“慢思考”
RK3588 PCIe壓測導致系統崩潰的問題,本質是通用驅動配置與嵌入式平臺硬件能力不匹配的典型案例。默認的NVMe超時參數是為PC平臺設計的,直接套用到嵌入式平臺,就會在高負載下觸發保護機制。
解決這類問題的核心,不是“硬扛”硬件性能,而是通過驅動參數調優適配平臺能力,同時遵循“日志分析→分層定位→參數調優→漸進驗證”的排障流程,才能高效、穩妥地解決問題。
審核編輯 黃宇
-
PCIe
+關注
關注
16文章
1465瀏覽量
88755 -
RK3588
+關注
關注
8文章
571瀏覽量
7482
發布評論請先 登錄
RK3588操控終端
RK3588平臺USB攝像頭調試實戰:從報錯到穩定運行
保姆級教程!RK3588 Linux6.1?固件簽名完整實現方案(不含rootfs)
實戰復盤:RK3588 SPI+PCIe3x4方案啟動修復,從節點配置到驅動適配全解析
一文搞懂?RK3588 PCIe:從硬件資源到拆分配置?+?避坑指南(含腦圖)
開發者必備,10 分鐘搞定 RK3588 PCIE 拆分!
基于瑞芯微 RK3588 的 ARM 與 FPGA 交互通信實戰指南
RK3588 PCIe設備識別失敗?一招避坑“非法Class”陷阱
RK這2款旗艦芯片RK3588 PK RK3576,誰是最優選
RK3576 vs RK3588:為何越來越多的開發者轉向RK3576?
RK3588S和RK3588S2差異說明
RK3588 PCIe?壓測:從崩潰到排障的全流程解析
評論