Linux

Linux 在 I/O 負載期間凍結

  • April 20, 2018

我使用帶有 Dell XPS 15 的 Linux Mint 作為工作筆記型電腦,並使用 gradle 建構了一個大型 Android 應用程序。

通過所有優化,它仍然使用幾乎所有可用的 RAM(16 GB)並開始使用交換文件中的 SWAP(也許,我應該改用交換分區?)。它會導致高 I/O 速率並且 Cinnamon(和所有其他應用程序)凍結。

此外,我嘗試測試 I/O 是導致這些問題的原因,並發現執行dd命令為我的 I/O 系統創建負載也會導致相同的問題。(例如,我無法在 Mac OS 上重現此行為)

我發現我應該將 I/O 調度程序類型更改為deadline,但我的/sys/block/nvme0n1/queue/scheduler文件只包含none選項。正如我理解的那樣,這意味著使用了https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq)框架,我不應該改變任何東西。

**問題:**如何在 I/O 負載期間解決這些凍結問題?也許,我應該分析哪些指標以獲得更多資訊?

環境:

OS: Linux Mint 18.3 Cinnamon 64-bit
Cinnamon: 3.6.7
Linux Kernel: 4.13.0-38-generic

通過所有優化,它仍然使用幾乎所有可用的 RAM (16 GB)

——誰?通常,自 1970 年代以來設計的每個通用作業系統都使用所有可用的 RAM 或其大部分來密集地進行慢速儲存內容記憶體。如果意味著VM記憶體有什麼麻煩?執行free -m並研究它的輸出,它曾經有“+/- 記憶體/緩衝區”的特殊指示,暗示它不是不可撤銷的使用 -如果存在記憶體壓力,記憶體會縮小

這是一個新手會很典型的誤解……


我發現我應該將 I/O 調度程序類型更改為截止日期

調度程序用於 HDD 等慢速設備。使用 SSD/NVME,它只是額外的成本——您不需要排隊等待請求,因為重新排序它們沒有任何好處——與 HDD 相比,它在減少尋軌時間方面發揮著重要作用。


在 I/O 負載期間如何解決這些凍結問題?

這裡沒有讀心器(作為一個例外,我更喜歡隱藏我的才能,以便其他人免於嫉妒),dd可以以不同的方式執行,你為什麼不添加一個片段來顯示它是如何執行的?

PS 通常我可以建議更新核心,因為它可能是特定的驅動程序怪癖得到(或沒有)解決。

引用自:https://unix.stackexchange.com/questions/438601