婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題

深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題

熱門標簽:襄陽地圖標注店 申請400電話流程好嗎 杭州電銷機器人有效果嗎 金華呼叫中心外呼系統廠家 小語股票電銷機器人 柯城手機地圖如何做地圖標注 萊蕪移動外呼系統 高德地圖標注在電腦上 軟件電話機器人

前段時間在開發一個使用SSD做緩存的系統,在高速寫入數據時會出現大量的磁盤緩存。太多的磁盤緩存如果沒有及時的寫入磁盤中,在機器出現問題時是非常危險的,這樣會導致很多的數據丟失,但是如果實時的將數據刷入磁盤中,這樣寫入效率有太低了。為了弄明白Linux系統的這種磁盤寫入特性,最近深入的學習了一下。
    VFS(Virtual File System)的存在使得Linux可以兼容不同的文件系統,例如ext3、ext4、xfs、ntfs等等,其不僅具有為所有的文件系統實現一個通用的外接口的作用,還具有另一個與系統性能相關的重要作用——緩存。VFS中引入了高速磁盤緩存的機制,這屬于一種軟件機制,允許內核將原本存在磁盤上的某些信息保存在RAM中,以便對這些數據的進一步訪問能快速進行,而不必慢速訪問磁盤本身。高速磁盤緩存可大致分為以下三種:
目錄項高速緩存——主要存放的是描述文件系統路徑名的目錄項對象
索引節點高速緩存——主要存放的是描述磁盤索引節點的索引節點對象
頁高速緩存——主要存放的是完整的數據頁對象,每個頁所包含的數據一定屬于某個文件,同時,所有的文件讀寫操作都依賴于頁高速緩存。其是Linux內核所使用的主要磁盤高速緩存。
正是由于緩存的引入,所以VFS文件系統采用了文件數據延遲寫的技術,因此,如果在調用系統接口寫入數據時沒有使用同步寫模式,那么大多數據將會先保存在緩存中,待等到滿足某些條件時才將數據刷入磁盤里。

內核是如何將數據刷入磁盤的呢?在看完以下兩點后就能得到答案。

1. 把臟頁寫入磁盤
    正如我們所了解的,內核不斷用包含塊設備數據的頁填充頁高速緩存。只要進程修改了數據,相應的頁就被標記為臟頁,即把它的PG_dirty標志位置。
    Unix系統允許把臟緩沖區寫入塊設備的操作延遲執行,因為這種策略可以顯著地提高系統的性能。對高速緩存中的頁的幾次寫操作可能只需對相應的磁盤塊進行一次緩慢的物理更新就可以滿足。此外,寫操作沒有讀操作那么緊迫,因為進程通常是不會因為延遲寫而掛起,而大部分情況都因為延遲讀而掛起。正是由于延遲寫,使得任一物理塊設備平均為讀請求提供服務將多于寫請求。
一個臟頁可能直到最后一刻(即直到系統關閉時)都一直逗留在主存中。然而,從延遲寫策略的局限性來看,它有兩個主要的缺點:
  一、如果發生了硬件錯誤或者電源掉電的情況,那么就無法再獲得RAM的內容,因此,從系統啟動以來對文件進行的很多修改就丟失了。
  二、頁高速緩存的大小(由此存放它所需的RAM的大小)就可要很大——至少要與所訪問塊設備的大小不同。
因此,在下列條件下把臟頁刷新(寫入)到磁盤:
頁高速緩存變得太滿,但還需要更多的頁,或者臟頁的數量已經太多。
自從頁變成臟頁以來已過去太長時間。
進程請求對塊設備或者特定文件任何待定的變化都進行刷新。通過調用sync()、fsync()或者fdatasync()系統調用來實現。
緩沖區頁的引入是問題更加復雜。與每個緩沖區頁相關的緩沖區首部使內核能夠了解每個獨立塊緩沖區的狀態。如果至少有一個緩沖區首部的PG_Dirty標志被置位,就應該設置相應緩沖區頁的PG_dirty標志。當內核選擇要刷新的緩沖區時,它掃描相應的緩沖區首部,并只把臟塊的內容有效的寫到磁盤。一旦內核把緩沖區的所有臟頁刷新到磁盤,就把頁的PG_dirty標志清0。

2. pdflush內核線程
    早期版本的Linux使用bdfllush內核線程系統地掃描頁高速緩存以搜索要刷新的臟頁,并且使用另一個內核線程kupdate來保證所有的頁不會“臟”太長時間。Linux 2.6用一組通用內核線程pdflush替代上述兩個線程。
這些內核線程結構靈活,它們作用于兩個參數:一個指向線程要執行的函數的指針和一個函數要用的參數。系統中pdflush內核線程的數量是要動態調整的:pdflush線程太少時就創建,太多時就殺死。因為這些內核線程所執行的函數可以阻塞,所以創建多個而不是一個pdflush內核線程可以改善系統性能。
根據下面的原則控制pdflush線程的產生和消亡:
必須有至少兩個,最多八個pdflush內核線程
如果到最近的1s期間沒有空閑pdflush,就應該創建新的pdflush線程
如果最近一次pdflush變為空閑的時間超過了1s,就應該刪除一個pdflush線程
所有的pdflush內核線程都有pdflush_work描述符,其數據結構如下:

當系統沒有要刷新的臟頁時,pdflush線程會自動處于睡眠狀態,最后由pdflush_operation()函數來喚醒。那么在這個過程中pdflush內核線程主要完成了哪些工作呢?其中一些工作與臟數據的刷新有關。尤其是pdflush通常執行下面的回調函數之一:
    1. background_writeout(): 系統地掃描頁高速緩存以搜索要刷新的臟頁。
為了得到需要刷新的臟頁,就要徹底的搜索與在磁盤上有映像的索引節點相應的所有address_space對象(是一棵搜索樹)。由于頁高速緩存可能有大量的頁,如果用一個單獨的執行流來掃描整個高速緩存,會令CPU和磁盤長時間繁忙,因此,Linux使用一種復雜的機制把對頁高速緩存的掃描劃分為幾個執行流。當內存不足或者用戶顯式的(用戶態進程發出sync()系統調用等)調用請求刷新操作時會執行wakeup_bdflush()函數。wakeup_bdflush()函數會調用pdflush_operation()喚醒pdflush內核線程,并委托它執行回調函數background_writeout()。background_writeout()函數有效的從頁高速緩存中獲得指定數量的臟頁,并把它寫回磁盤。此外,執行background_writeout()函數的pdflush內核線程只有在滿足以下兩個條件下才能被喚醒:一是對頁高速緩存中的頁內容進行了修改,二是引起臟頁部分增加到超過某個臟背景閾值。背景閾值通常設置為系統中所有頁的10%,不過可以通過修改文件/proc/sys/vm/dirty_background_ratio來調整該值。
    2. wb_kupdate():檢查頁高速緩存中是否有“臟”了很久時間的頁,避免當一些頁很久沒有被刷新時發生饑餓危險。
 內核在初始化期間會建立wb_timer動態定時器,其的定時間距為dirty_writeback_centisecs文件中所規定的幾百分之一秒(通常是500分之一秒,不過可以通過修改/proc/sys/vm/dirty_writeback_centisecs文件調整該值)。定時器函數會調用pdflush_operation()函數,然后將wb_kupdate()函數的地址傳入。wb_kupdate()函數遍歷頁高速緩存搜索陳舊的臟索引節點,把已保持臟狀態時間超過30秒的頁都寫到磁盤,之后重置定時器。

PS:關于SSD的寫入放大問題


    現在固態硬盤正在越來越多地被作為服務器磁盤使用。之前在SSD(Solid State Drive)上設計并實現緩存系統用于存儲數據塊時遇到了一些問題,比如在磁盤寫滿后,如果老化掉一些最久未使用的數據塊后,繼續大量寫入新的數據,隨著時間的推移,寫入速度變得比剛開始時慢了許多。為了弄清楚為什么會出現這樣的情況,于是在網上搜索了一些關于SSD的資料,原來這種情況是由于SSD硬件設計本身決定的,最終映射到應用程序上該中現象稱為寫入放大現象(WA: Write amplification),WA是閃存及SSD相關的一個極為重要的屬性,這個術語在2008年被Intel公司和SiliconSystems公司(于2009 年被西部數據收購)第一次提出并在公開稿件里使用。下面簡單講解一下為什么會出現這種情況以及是怎樣一個過程。
    SSD的設計完全不同于傳統的機械磁盤,其是一個完整的電子設備,沒有傳統機械盤的讀寫磁頭。因此,在讀寫數據的時候由于少了磁頭在磁道之間的尋道過程所以SSD能提供較高的IOPS性能。也正因為其少了磁頭的調度,所以SSD還能減少電量的使用,在數據中心中使用對企業來說是非常有益的。
    SSD與傳統磁盤相比其有了很大的性能優勢,以及較多的優點,但是事物總是有兩面性的,其也自身也存在一些問題,寫入在SSD中的數據是不可以直接更新的,只能通過扇區覆蓋重寫,在覆蓋重寫之前需要先擦除,而且擦除操作又是不能在扇區上做的,只能在磁盤的塊上來完成,擦除塊之前需要將原有的還有效的數據先讀出,然后在與新來的數據一起寫入,這些重復的操作不單會增加寫入的數據量 ,還會減少閃存的壽命,更吃光閃存的可用帶寬而間接影響隨機寫入性能。

寫入放大的解決辦法
    在實際操作中我們很難完全解決掉SSD寫入放大的問題,只能通過某些方法來更有效的減少放大的倍數。一個很簡單的辦法就是將一塊大的SSD硬盤只使用其的一部分容量,比如128GB你只是用64GB,那么最壞的情況就是寫入放大能減少約3倍。當然這種方法有點過于浪費資源了。另外還可以在寫數據時采用順序寫入,當SSD被順序寫入時,其寫入放大一般為1,但某些因素會影響到該值。
    除了上面的方法外,現階段公認的比較好的方法是TRIM。TRIM位于操作系統層。操作系統使用TRIM命令來通知SSD某個page的數據不需要了,則可以回收。 支持TRIM的操作系統和以往的主要區別是刪除一個Page的操作不同。在磁盤時期,刪除一個page之后在文件系統的記錄信息里將該page的標志位設置為可用,但是并沒有將數據刪除。使用SSD且支持TRIM的操作系統,在刪除一個page時,會同時通知SSD這個page的數據不需要了,SSD內部有一個空閑時刻的垃圾收集進程,在空閑時刻SSD會將一些空閑的數據集中到一起,然后一起Erase。這樣每次寫操作,就在已經Erase好了的Page上寫入新的數據。

    雖然其存在寫入放大的問題,但是這并沒有讓我們拒絕使用它。用其來做緩存加速已在很多項目中得到使用,尤其是在數據庫緩存項目中,在這些項目中SSD高效的讀性能得到了充分的利用。隨著Facebook的開源項目Flash Cache的發布,以及Facebook內部的大量使用,Flash Cache已經成為了一個比較成熟的技術方案,這使得更多的公司選擇了SSD來做存儲或者緩存。

標簽:海北 河南 景德鎮 黔南 鶴壁 天門 欽州 威海

巨人網絡通訊聲明:本文標題《深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題》,本文關鍵詞  深入,解析,Linux,下,的,磁盤,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題》相關的同類信息!
  • 本頁收集關于深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本不卡高清视频| 日本亚洲免费观看| 国产自产2019最新不卡| 国产精品乱人伦一区二区| 精东粉嫩av免费一区二区三区| 欧美日韩成人综合| 国产成人亚洲综合a∨猫咪| 精品国产乱码久久久久久1区2区| 欧美日韩高清在线播放| 色综合天天综合在线视频| 国产精品1区二区.| 久久精品国产亚洲高清剧情介绍 | 国产高清一区日本| 图片区小说区国产精品视频| 秋霞午夜av一区二区三区| 日韩专区一卡二卡| 国产一区二区三区免费看| 亚洲成人动漫一区| 国产乱子轮精品视频| 五月婷婷激情综合网| 久久久精品2019中文字幕之3| 欧美日韩在线播放三区四区| 色综合久久综合网97色综合| 国产成人精品免费| 91网页版在线| 欧美日韩精品电影| 中文字幕一区二| 亚洲美女淫视频| 捆绑变态av一区二区三区| 激情综合一区二区三区| 盗摄精品av一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美日韩成人在线一区| 国产视频亚洲色图| 久久久噜噜噜久久人人看 | 中文字幕在线不卡视频| 一区二区高清免费观看影视大全| 肉肉av福利一精品导航| 国产在线一区二区综合免费视频| 色婷婷综合五月| 日韩一本二本av| 另类小说一区二区三区| 欧美日韩一卡二卡| 亚洲超碰精品一区二区| 狠狠色狠狠色合久久伊人| 国产不卡视频一区| 国产欧美日本一区二区三区| 国产三级欧美三级日产三级99| 亚洲国产日韩精品| 91香蕉视频污在线| 国产精品另类一区| 国产**成人网毛片九色| 91麻豆精品国产| 精品一区二区三区欧美| 欧美日韩中文一区| 亚洲一区二区成人在线观看| 91丝袜美女网| 日日夜夜一区二区| 制服丝袜国产精品| 一区二区三区四区精品在线视频 | 一区二区三区在线观看国产| 日韩在线一区二区三区| 久久久亚洲欧洲日产国码αv| 国产一区二区美女诱惑| 亚洲国产岛国毛片在线| 一本到不卡精品视频在线观看| 国产精品国产成人国产三级| 欧美性三三影院| 亚洲午夜三级在线| 制服丝袜亚洲色图| 午夜视频久久久久久| 国产精品久久久久久久久免费樱桃| 国产制服丝袜一区| 26uuuu精品一区二区| 成av人片一区二区| 另类小说视频一区二区| 一区二区三区四区在线播放| 欧美精品欧美精品系列| 成人免费看视频| 亚洲午夜影视影院在线观看| 国产丝袜在线精品| 激情久久五月天| 午夜av一区二区三区| 日韩欧美国产一区二区三区| 国产高清不卡一区二区| 亚洲精品久久嫩草网站秘色| 精品国产乱码久久久久久老虎 | 免费看精品久久片| 亚洲在线一区二区三区| 精品国产一二三| 欧美日韩你懂得| 91成人在线免费观看| 国产成人精品亚洲日本在线桃色 | 亚洲国产成人va在线观看天堂| 亚洲国产va精品久久久不卡综合| 精品久久久久久久一区二区蜜臀| 欧美亚洲自拍偷拍| 亚洲综合激情网| 亚洲1区2区3区4区| 亚洲三级视频在线观看| www激情久久| 精品盗摄一区二区三区| 亚洲国产经典视频| 日韩欧美卡一卡二| 欧美白人最猛性xxxxx69交| 日韩午夜中文字幕| 国产欧美视频一区二区三区| 日韩精品一区二区三区swag | 在线观看91精品国产入口| 91在线观看美女| 在线中文字幕一区| 日韩三级视频在线观看| 91精品在线观看入口| 日韩免费观看2025年上映的电影| 午夜电影网一区| 国产美女精品在线| 99国产麻豆精品| 91久久精品一区二区三| 国产成a人亚洲精品| 91在线观看一区二区| 欧美精品在线视频| 国产精品二区一区二区aⅴ污介绍| 亚洲精品免费在线观看| 麻豆成人免费电影| 欧美片在线播放| 国产日韩精品一区| 国产一区二区伦理| 欧美一区二区播放| 天堂资源在线中文精品| 国产美女主播视频一区| 久久久久高清精品| 亚洲天堂久久久久久久| 波多野结衣在线aⅴ中文字幕不卡| 国产欧美久久久精品影院| 亚洲自拍偷拍欧美| www.久久久久久久久| 欧美一区二区不卡视频| 美女视频免费一区| 欧美日韩高清在线| 久久69国产一区二区蜜臀| 91在线视频观看| 一区二区三区中文免费| 91免费看`日韩一区二区| 久久精品免视看| 日本三级亚洲精品| 日韩欧美一级二级三级| 国产真实乱偷精品视频免| 欧美老肥妇做.爰bbww| 人人精品人人爱| 久久久久久免费毛片精品| 色悠悠久久综合| 中文字幕一区三区| 欧美日韩在线亚洲一区蜜芽| 天天色综合天天| 国产三级三级三级精品8ⅰ区| 日韩av一区二| 久久免费的精品国产v∧| 国产一区二区精品久久| 悠悠色在线精品| 国产蜜臀av在线一区二区三区 | 肉丝袜脚交视频一区二区| 91精品国产一区二区三区| 国产91丝袜在线播放0| 日韩国产欧美在线视频| 中文字幕一区二| 久久精品人人爽人人爽| 欧美日本视频在线| 亚洲一级二级三级在线免费观看| 久久亚洲捆绑美女| caoporn国产精品| 国产电影精品久久禁18| 日本不卡一区二区| 亚洲va在线va天堂| 亚洲美女在线一区| 国产精品美女视频| 亚洲国产精华液网站w| 综合久久综合久久| 欧美精品一区二区三区久久久| 欧美日韩国产一级二级| 国产精品一区二区久久精品爱涩 | 亚洲欧美另类久久久精品2019| 久久亚洲精品国产精品紫薇 | 成人精品鲁一区一区二区| 粉嫩久久99精品久久久久久夜| 亚洲国产精品影院| 秋霞影院一区二区| 狠狠网亚洲精品| 国产一区二区三区四区五区美女 | 国产精品综合久久| 欧美在线视频你懂得| 欧美日韩dvd在线观看| 日韩精品一区二区三区老鸭窝| 欧美韩日一区二区三区四区| 国产精品久久久久三级| 激情综合网激情| 国产成人在线观看| 欧美日韩国产综合一区二区 | 国产日韩欧美在线一区| 亚洲欧美成人一区二区三区| 亚洲精品美国一|