IO到底是怎么回事,怎么定義IO問題


一、IO是什么

  IO統稱為輸入輸出(input/output),又分為IO接口和IO設備,比如像USB接口就是IO接口,硬盤的接口;IO設備像硬盤、鍵盤、藍牙耳機等;

二、為什么會有IO問題

  ①:CPU訪問內存和訪問硬盤的速度之差

    是因為cpu的運行速度與IO運行速度數量級的速度之差導致、cpu訪問內存比cpu訪問硬盤快1000倍,cpu的運行速度是ns級別,而SSD的速度是us級別、HDD是ms毫秒級別,NS = 1000*1000 MS;速度之差如下圖:

  

 為什么不用局部性原理? 

   可能你會問,加一個緩存不是就可以了嗎?像cpu和memory之間的速度差,加一個告訴緩存L1、L2、L3;cpu訪問內存和硬盤速度差,把內存數據放到Redis里面不就行了嗎,但現在mysql數據庫中,一個表上千萬的數據量已經很正常的,內存不可能緩存那么多數據的;

 ②:硬盤的訪問更多是隨機讀寫

 順序讀寫:文件的指針從頭到尾的讀寫,避免的磁盤的多次尋址和尋道時間

 隨機讀寫:文件的指針可以任意的移動,導致磁盤進行大量的尋址和尋道操作;

 磁盤順序讀寫,拿HDD的速度在一秒鍾讀寫20萬,但跟平時的開發經驗不符合,為什么?

 原因在於磁盤大多數都是在隨機讀寫,而隨機讀寫的速度是順序讀寫的幾十分之一左右;

 像我電腦SSD隨機4k的讀取速度是39M/s

 磁盤隨機讀寫,7200轉的HDD大概在100次,而SDD大概在10000左右,寫最快也就20000次,

 為什么請雙擊鏈接(https://www.cnblogs.com/cpThinker/articles/12688934.html)

 

 硬盤的幾個核心指標,吞吐率、和響應時間、IOPS;

  吞吐率:

   常規HDD吞吐率是 200M/S, SDD吞吐率是stta3.0的接口,帶寬6G/b(小b),大概是700M/S,速度差3倍左右;

  響應時間:

   常規HDD響應時間是 0.6ms, SDD相應時間是0.066ms,相差10倍左右;

  IOPS:

   表示每秒輸入輸出操作的次數;io的核心指標,大家更關注的指標;

   IOPS = 平均延遲+平均尋道時間

三、在服務器中如何定位io問題

 ①:top命令,wa(如截圖)就是表示IOwait的指標,也就是cpu等待IO執行完成花費的時間占cpu的百分比

 

 

 ②:iostat命令,查看每個硬盤的實際讀寫情況,關注每個硬盤的TPS、read/write 

  沒有此命令通過 yum-y install iostat安裝

   

 

   ③:通過iotop 找出占用io高的進程,搞定問題

   

 

 

                                                         謝謝閱讀、一起進步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM