校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

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

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

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

內(nèi)核是如何將數(shù)據(jù)刷入磁盤的呢?在看完以下兩點后就能得到答案。

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

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

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

PS:關(guān)于SSD的寫入放大問題


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

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

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

標簽:海北 河南 景德鎮(zhèn) 黔南 鶴壁 天門 欽州 威海

巨人網(wǎng)絡(luò)通訊聲明:本文標題《深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題》,本文關(guān)鍵詞  深入,解析,Linux,下,的,磁盤,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于深入解析Linux下的磁盤緩存機制與SSD的寫入放大問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    yourporn久久国产精品| 国产精品国模大尺度视频| 欧美在线视频你懂得| 精品久久久久香蕉网| 亚洲精选视频在线| 欧美唯美清纯偷拍| 无码av免费一区二区三区试看| 97久久精品人人澡人人爽| 国产欧美精品在线观看| 国产精品18久久久| 日本一区二区三区国色天香 | 亚洲一区日韩精品中文字幕| 色偷偷久久一区二区三区| 亚洲男人天堂一区| 日韩天堂在线观看| 激情五月婷婷综合网| 国产日产欧美一区| 91女厕偷拍女厕偷拍高清| 一区二区三区美女视频| 51久久夜色精品国产麻豆| 风间由美性色一区二区三区| 亚洲午夜一二三区视频| 欧美成人性福生活免费看| 成年人午夜久久久| 成人久久久精品乱码一区二区三区| 欧美高清在线精品一区| 日韩三级视频在线观看| 欧美偷拍一区二区| 99久久国产免费看| 国产精品综合一区二区三区| 亚洲一区二区三区精品在线| 国产网站一区二区三区| 精品久久久久久综合日本欧美| 99国产一区二区三精品乱码| 紧缚奴在线一区二区三区| 午夜精品视频在线观看| 亚洲午夜精品17c| 一区二区三区四区不卡在线| 久久久777精品电影网影网 | 色伊人久久综合中文字幕| 久久精品99国产精品| 麻豆精品在线视频| 麻豆专区一区二区三区四区五区| 视频一区在线视频| 日本成人超碰在线观看| 亚洲aaa精品| 欧美日韩欧美一区二区| 日本一区二区三级电影在线观看 | 国产亚洲精品bt天堂精选| 精品国产91久久久久久久妲己 | 日韩欧美的一区| 国产色婷婷亚洲99精品小说| 国产精品区一区二区三| 一区免费观看视频| 亚洲成av人片在线观看无码| 无吗不卡中文字幕| 成人免费视频播放| 欧美一区二区三区在线观看视频| 欧美日本国产一区| 亚洲日本在线视频观看| 亚洲sss视频在线视频| 国内精品第一页| 欧美日韩国产一区二区三区地区| 精品久久久久久久久久久院品网| 国产农村妇女毛片精品久久麻豆| 国产精品久久久久婷婷| 韩国欧美国产1区| 在线影院国内精品| 亚洲欧洲日本在线| 免费黄网站欧美| 欧美嫩在线观看| 亚洲国产欧美日韩另类综合| 粉嫩av一区二区三区| 国产亚洲精久久久久久| 午夜精品福利一区二区三区蜜桃| 高清国产一区二区| 亚洲欧洲成人自拍| 成人三级伦理片| 久久久亚洲精华液精华液精华液| 麻豆精品蜜桃视频网站| 欧美日韩国产高清一区二区| 一区二区欧美精品| 欧美视频一区二区三区在线观看| 中文字幕欧美激情一区| 国产不卡视频一区二区三区| 国产三级精品三级在线专区| 国产成人av一区二区三区在线| 日韩精品中午字幕| 国产成人免费视频网站| 日韩一区中文字幕| 欧美巨大另类极品videosbest | 精品亚洲porn| 美女久久久精品| 日韩av电影天堂| 精品国产乱码久久久久久老虎| 日韩精品一卡二卡三卡四卡无卡| 日韩午夜av一区| 成人av网站免费观看| 亚洲成人第一页| 国产精品毛片无遮挡高清| 91浏览器入口在线观看| 麻豆国产精品视频| 一级女性全黄久久生活片免费| 正在播放亚洲一区| 91香蕉视频污在线| 国产一区二区三区香蕉| 亚洲午夜一二三区视频| 亚洲国产高清在线观看视频| 欧美日韩一卡二卡三卡| 91网站在线播放| 成人亚洲一区二区一| 国产美女在线观看一区| 日本视频中文字幕一区二区三区| 亚洲欧美中日韩| 国产精品国产三级国产三级人妇| 欧美成人精品二区三区99精品| 欧日韩精品视频| 在线视频一区二区三| eeuss国产一区二区三区| 国产麻豆精品theporn| 免费观看久久久4p| 美女视频一区二区| 国产伦精品一区二区三区免费迷 | 精品无人码麻豆乱码1区2区| 日本欧美久久久久免费播放网| 日本成人中文字幕在线视频| 极品少妇一区二区三区精品视频| 久久99蜜桃精品| 国产激情一区二区三区| caoporn国产一区二区| 69堂国产成人免费视频| 国产嫩草影院久久久久| 亚洲午夜在线电影| 成人做爰69片免费看网站| 蜜桃精品在线观看| 99国产精品国产精品久久| 91成人在线观看喷潮| 欧美福利视频导航| 国产精品毛片久久久久久| 丝袜诱惑制服诱惑色一区在线观看 | 欧美日韩精品综合在线| 2019国产精品| 爽爽淫人综合网网站| 丰满亚洲少妇av| 91麻豆精品久久久久蜜臀| 久久精品一区八戒影视| 一个色在线综合| 中文字幕日本乱码精品影院| 美女看a上一区| 欧美日韩在线一区二区| 亚洲欧美影音先锋| 99视频在线精品| 久久久久久久久免费| 午夜视频在线观看一区| 夜夜精品浪潮av一区二区三区| 国产精品综合网| 久久免费偷拍视频| 国产一区二区三区高清播放| 欧美一区二区三区日韩视频| 亚洲bdsm女犯bdsm网站| 在线欧美小视频| 一区二区三区鲁丝不卡| 欧洲精品在线观看| 奇米一区二区三区| 国产人伦精品一区二区| 99精品国产视频| 亚洲国产精品视频| 91精品国产乱| 国产福利一区在线| 一区二区三区不卡视频在线观看| 99精品桃花视频在线观看| 一级精品视频在线观看宜春院| 欧美一区二区视频免费观看| 精品亚洲免费视频| 亚洲观看高清完整版在线观看| 欧美肥妇free| www.亚洲人| 免费在线观看一区二区三区| 日韩欧美你懂的| 91久久久免费一区二区| 国产精品综合在线视频| 亚洲视频一区二区免费在线观看| 欧美日韩1234| 高清成人免费视频| 极品美女销魂一区二区三区免费| 中文字幕的久久| 久久人人超碰精品| 欧美videos大乳护士334| 欧美吻胸吃奶大尺度电影| 99re免费视频精品全部| 国产91在线观看| 国产91对白在线观看九色| 紧缚奴在线一区二区三区| 蜜臀精品久久久久久蜜臀| 亚洲国产精品精华液网站| 中文字幕一区二区三区在线不卡 | 亚洲一区二区视频在线| 中文字幕精品综合| 亚洲婷婷综合色高清在线| 国产精品网站一区|