1. 程式人生 > >bcache狀態和配置檔案詳細介紹(翻譯自官網)

bcache狀態和配置檔案詳細介紹(翻譯自官網)

參考文獻 宣告: 什麼是bcache   bcache是linux核心塊層cache.它使用類似SSD來作為HDD硬碟的cache,從而起到加速作用。 HDD硬碟便宜並且空間更大,SSD速度快但更貴。如果能兩者兼得,豈不快哉?bcache能做到。   bcache使用SSD作為其他塊裝置的cache.類似ZFS的L2Arc,但bcache還增加了寫回策略,並且是與檔案系統無關的。bcache被設計成只需要最小的代價,無需配置就能在所有環境中工作。預設狀態下bcache不快取順序IO,只快取隨機讀寫   bcache適用於桌面、伺服器,高階儲存陣列,甚至是嵌入式環境。設計bcache目標是讓被快取裝置(HDD等塊裝置)與SSD一樣快(包括快取命中、快取不命中、透寫和回寫)
。現在還未達到初衷,特別是順序寫。同時測試結果表明離目標很接近,甚至有些情況下表現更好,例如隨機寫。   bcache是資料安全的。對於寫回策略快取來說,可靠性是非常重要的,出錯就意味著丟失資料。bcache是用電池備份陣列控制器的替代選擇,同時也要求bcache在異常掉電時也是資料安全的。對於寫而言,必須在所有資料寫到可靠介質之後才能向上層返回寫成功。如果在寫一個大檔案時掉電了,則寫入是失敗的。異常掉電資料安全是指 cache 中的髒資料是不會丟的不像記憶體中的髒資料掉電就沒了。   bcache效能設計目標是等同於SSD.最大程度上去最小化寫放大,並避免隨機寫bcache將隨機寫轉換為順序寫
,首先寫到SSD,然後回寫快取使用SSD快取大量的寫,最後將寫有序寫到磁碟或者陣列上。對於RAID6陣列,隨機寫效能很差,還要花費不菲的價格購買帶有電池保護的陣列控制器。現在有了bcache,你就可以直接使用linux自帶的優秀軟RAID,甚至可以在更廉價的硬體上獲取更高的隨機寫效能。 特性: 1、一個快取裝置可以作為多個裝置的快取,並且可以在裝置執行時動態新增和刪除快取。 2、只有當寫到磁碟後快取才會確認寫完成。 3、正確處理寫阻塞和刷快取 4、支援writethrough, writeback和writearound等寫快取模式 5、檢測並避開順序IO(可配置關閉該選項) 6、當檢測到SSD延遲超過配置邊界值,減少到SSD流量
(當一個SSD作為多個磁碟快取時使用) 7、快取不命中時預讀(預設關閉) 8、高效能的 writeback 實現:髒資料都是排序後再回寫。如果設定了 writeback 水位線,PD控制器會根據髒資料比例來平滑處理到後臺的writeback流量。 9、使用高效率的B+樹,bcache隨機讀可以達到1M IOPS 10、穩定 ============================A block layer cache (bcache)============================ 假如你有一個大而慢的raid 6和一塊SSD(或者3塊), 如果你用它們做快取,這並不是好事……但是你可以使用bcache Wiki和git倉庫在: - http://bcache.evilpiepirate.org - http://evilpiepirate.org/git/linux-bcache.git - http://evilpiepirate.org/git/bcache-tools.git bcache針對SSD的效能測試設計--它僅分配可擦寫塊(erase block size)的bucket,使用混合bree/log去追蹤快取內容(從單個扇區到bucket大小的任何地方),它以不惜任何代價來設計避免隨機寫;它順序地填滿一個個可擦寫塊(erase block), 然後在重用該塊之前清除該塊。 支援writethrough和writeback快取模式。writeback預設關閉,但可以在執行時隨時開啟或關閉。bcache竭盡全力來保護你的資料--它可靠地處理unclean的關閉。(甚至根本就沒有clean shutdown的概念,因為資料寫到可靠的磁碟,完成之前不會返回)。 writeback快取能用於絕大部分buffering write的快取--總是順序地write髒資料到後端裝置,從index的起始到末尾掃描。 SSD擅長隨機IO,通常對快取大序列化IO,沒有優化空間,Bcache會探測順序IO並跳過它,SSD只優化隨機IO。bcache也會對每次task中的IO size的平均大小持續跟蹤,只要平均大小超過cutoff,它將會跳過該task中的所有IO,而非在每次查詢後快取前512K位元組,備份和大檔案複製會整個跳過快取裝置。 當flash快閃記憶體上發生data IO error時,它會盡量從磁碟讀取資料來恢復,恢復失敗就使快取物件失效。對不可恢復的錯誤(元資料或髒資料),caching裝置會自動禁用;假如caching裝置中有髒資料存在,首先會禁用writeback,等所有的髒資料都寫到磁盤裡。 開始使用 你需要使用bcache-tools程式碼庫中的make-bcache,在使用之前,cache裝置和backing裝置都必須格式化: make-bcache -B /dev/sdb make-bcache -C /dev/sdc make-bcache可以同時格式化多個裝置,假如你同時格式化後端裝置和快取裝置,無須手動繫結 make-bcache -B /dev/sda /dev/sdb -C /dev/sdc bcache-tools現在加入了udev rules,bcache裝置能立即被核心探測到,如果沒有udev,你需要手動這樣註冊 echo /dev/sdb > /sys/fs/bcache/register echo /dev/sdc > /sys/fs/bcache/register 註冊後端裝置將可在/dev中看到bcache,然後你可以格式化它,之後可以像普通磁碟一樣使用。 但是,第一次使用全新的bcache裝置,它通常會執行在passthrough模式(所有讀寫操作都到硬碟上)下面,直到你將它繫結到一臺快取裝置。如果你想以後使用bcache,推薦你搭建所有的慢速裝置為bcache的後端裝置,不帶caching裝置,你能在以後選擇追加一臺caching裝置。參見下面的“繫結”小節。 裝置實現如下: /dev/bcache<N> 以及(和udev) /dev/bcache/by-uuid/<uuid> /dev/bcache/by-label/<label> 開始格式化為指定的檔案系統,並mount到檔案樹上 mkfs.ext4 /dev/bcache0 mount /dev/bcache0 /mnt 你可以在/sys/block/bcache<N>/bcache通過sysfs控制bcache裝置, 你也能通過/sys/fs/bcache/<cset-uuid>/控制它們。 快取裝置作為集合set來管理,每個set中多個快取裝置目前仍然不支援,但是將來會允許元資料和髒資料的映象。新cache set將在/sys/fs/bcache/<UUID>中顯示。 繫結 當快取裝置和後端設備註冊後,後端裝置必須繫結到cache set中來實現快取,因此,使用cache set在目錄/sys/fs/bcache中的UUID,來將後端裝置繫結到cache裝置上: echo <CSET-UUID> > /sys/block/bcache0/bcache/attach 這隻需要做一次。下次機器重啟,只需要重新註冊所有的bcache裝置就可以了。假如後端裝置在cache中其它地方有資料,/dev/bcache<N>裝置不會建立成功,直至cache show up。假如你打開了writeback模式,這非常重要。 重啟之後,快取裝置找不見了,一直沒有恢復,你可以強制執行後端裝置: echo 1 > /sys/block/sdb/bcache/running (你需要使用/sys/block/sdb或任何被呼叫的後端裝置,非/sys/block/bcache0,因為bcache0還不存在,假如你使用到分割槽,bcache目錄可能是/sys/block/sdb/sdb2/bcache) 假如後端裝置以後起來之後,它仍舊會用到cache set,但是所有的快取資料都是非法的。 假如快取中有髒資料,別指望檔案系統能自動修復--你將有大量的檔案系統損壞,雖然ext4的fsc可以產生奇蹟。 錯誤處理 Bcache嘗試透明地處理來自快取裝置的 IO 錯誤,而不會影響正常操作;如果它看到太多錯誤(閾值可配置,並且預設為0),它將關閉快取裝置並將所有  backing device 切換到 passthrough 模式。
  • 對於從快取讀取,如果它們出現錯誤,將從 backing device 重新嘗試讀取
  • 對於 writethroungh writes,如果寫入快取錯誤,我們只需切換到快取中的 lba(Logical Block Address, LBA) 上使資料無效(即我們為繞過 cache write 將資料寫到後端裝置)
  • For writethrough writes, if the write to the cache errors we just switch to invalidating the data at that lba in the cache (i.e. the same thing we do for a write that bypasses the cache)
  • 對於writeback writes,我們目前將該錯誤傳遞給檔案系統/使用者空間。這可以改進 - 我們可以嘗試繞過快取的寫入,所以小心避免寫入錯誤。
  • 對於分離操作,我們首先嚐試重新整理任何髒資料到後端裝置(如果我們以 writeback 模式執行)。但是,如果它無法讀取髒資料,當前它將不會做任何操作。
奇技淫巧Howto/cookbook A)從一個丟失的caching裝置啟動bcache 假如註冊後端裝置毫無幫助,事已至此,你只需強制它在無cache裝置的情況下執行 host:~# echo /dev/sdb1 > /sys/fs/bcache/register[ 119.844831] bcache: register_bcache() error opening /dev/sdb1: device already registered 下一步,如果有cache裝置的話,你儘量註冊它,然而假如沒有,或是cache裝置因為某種原因註冊失敗,在沒有cache裝置的情況下,你仍然能夠啟動bcache,像下面這樣 host:/sys/block/sdb/sdb1/bcache# echo 1 > running 注意如果當前在writeback模式下,這會導致資料丟失。 B)bcache找不到cache host:/sys/block/md5/bcache# echo 0226553a-37cf-41d5-b3ce-8b1e944543a8 > attach[ 1933.455082] bcache: bch_cached_dev_attach() Couldn't find uuid for md5 in set[ 1933.478179] bcache: __cached_dev_store() Can't attach 0226553a-37cf-41d5-b3ce-8b1e944543a8[ 1933.478179] : cache set not found 這種情況,cache裝置可能在系統啟動時沒有註冊,或是消失後又回來了,需要再次註冊一下 host:/sys/block/md5/bcache# echo /dev/sdh2 > /sys/fs/bcache/register C)損壞的bcache在設備註冊期間將kernel搞崩潰 這不會發生,如果真發生了,那就是bug!請報告給bcache開發小組: 務必提供更多的資訊,包括kernel dmesg輸出,以便我們可以參考 D)沒有bcache的情況下恢復資料 假如kernel中找不到bcache模組,後端裝置的filesystem仍然可以在8KB偏移處找到。所以,要麼通過後端裝置的loopdev,使用--offset 8K生成的,或者是,當你最初使用make-cache來格式化bache時,--data-offset定義的其它值 比如: losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev 這應該會將後端裝置中的資料原封不動地複製到/dev/loop0中。 如果你的快取是在writethrough模式下,你可以安全地扔掉cache裝置了,此時不會丟失任何資料。 E)擦除快取裝置 ::host:~# wipefs -a /dev/sdh216 bytes were erased at offset 0x1018 (bcache)they were: c6 85 73 f6 4e 1a 45 ca 82 65 f5 7f 48 ba 6d 81 在重啟系統後,開啟bcache,重建cache裝置並開啟它: host:~# make-bcache -C /dev/sdh2UUID: 7be7e175-8f4c-4f99-94b2-9c904d227045Set UUID: 5bc072a8-ab17-446d-9744-e247949913c1version: 0nbuckets: 106874block_size: 1bucket_size: 1024nr_in_set: 1nr_this_dev: 0first_bucket: 1[ 650.511912] bcache: run_cache_set() invalidating existing data[ 650.549228] bcache: register_cache() registered cache device sdh2 在無cache的情況下,開啟後端裝置 host:/sys/block/md5/bcache# echo 1 > running 繫結新cache裝置 host:/sys/block/md5/bcache# echo 5bc072a8-ab17-446d-9744-e247949913c1 > attach[ 865.276616] bcache: bch_cached_dev_attach() Caching md5 as bcache0 on set 5bc072a8-ab17-446d-9744-e247949913c1 F)移除或是替換快取裝置 host:/sys/block/sda/sda7/bcache# echo 1 > detach[ 695.872542] bcache: cached_dev_detach_finish() Caching disabled for sda7host:~# wipefs -a /dev/nvme0n1p4wipefs: error: /dev/nvme0n1p4: probing initialization failed: Device or resource busyOoops, it's disabled, but not unregistered, so it's still protected我們需要取消註冊host:/sys/fs/bcache/b7ba27a1-2398-4649-8ae3-0959f57ba128# ls -l cache0lrwxrwxrwx 1 root root 0 Feb 25 18:33 cache0 -> ../../../devices/pci0000:00/0000:00:1d.0/0000:70:00.0/nvme/nvme0/nvme0n1/nvme0n1p4/bcache/host:/sys/fs/bcache/b7ba27a1-2398-4649-8ae3-0959f57ba128# echo 1 > stopkernel: [ 917.041908] bcache: cache_set_free() Cache set b7ba27a1-2398-4649-8ae3-0959f57ba128 unregistered現在我們才能清除資料host:~# wipefs -a /dev/nvme0n1p4/dev/nvme0n1p4: 16 bytes were erased at offset 0x00001018 (bcache): c6 85 73 f6 4e 1a 45 ca 82 65 f5 7f 48 ba 6d 81 G)dm-crypt和bcache 首先搭建非加密的bcache,然後在/dev/bcache<N>上層安裝dmcrypt,這會更快,假如你dmcrypt後端和caching裝置的時候,同時在頂層安裝bcache。[需要benchmarks?] H)停止並釋放一個註冊過的bcache,擦除之後重新生成 假如你需要釋放所有的bcache引用,以便你能執行fdisk並重新註冊一個變動的分割槽表,假如上面有任何活躍的backing或是caching裝置,這都不會成功 1)/dev/bcache*有東西嗎?(有時沒有) 假如存在,很簡單: host:/sys/block/bcache0/bcache# echo 1 > stop 2)但是假如你的後端裝置不在,這不會成功: host:/sys/block/bcache0# cd bcachebash: cd: bcache: No such file or directory 這種情況,你或許必須登出引用該待釋放bcache的dmcrypt的塊裝置 host:~# dmsetup remove oldds1bcache: bcache_device_free() bcache0 stoppedbcache: cache_set_free() Cache set 5bc072a8-ab17-446d-9744-e247949913c1 unregistered 這導致後端bcache從/sys/fs/bcache中移除,然後再次重用,This would be true of any block device stacking where bcache is a lower device. 3)另一方面,你也能看看/sys/fs/bcache/ host:/sys/fs/bcache# ls -l */{cache?,bdev?}lrwxrwxrwx 1 root root 0 Mar 5 09:39 0226553a-37cf-41d5-b3ce-8b1e944543a8/bdev1 -> ../../../devices/virtual/block/dm-1/bcache/lrwxrwxrwx 1 root root 0 Mar 5 09:39 0226553a-37cf-41d5-b3ce-8b1e944543a8/cache0 -> ../../../devices/virtual/block/dm-4/bcache/lrwxrwxrwx 1 root root 0 Mar 5 09:39 5bc072a8-ab17-446d-9744-e247949913c1/cache0 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/ata10/host9/target9:0:0/9:0:0:0/block/sdl/sdl2/bcache/ 裝置名將顯示哪個UUID是相關的,在該目錄下cd,然後stop the cache: host:/sys/fs/bcache/5bc072a8-ab17-446d-9744-e247949913c1# echo 1 > stop 這將會釋放bcache引用,讓你重用其它目的的分割槽 效能調優 Bcache 有一堆配置選項和可調引數,預設引數對於典型的桌面和伺服器工作負載是合理的,但是,當您在基準測試時,它們不是你想要獲得的最佳引數 - Backing device 對齊 bcache中的預設(metadata)元資料大小為8k.如果你的 Backing device 是基於 RAID 的,那麼請務必使用`make-bcache --data-offset`將其與你的 RAID 條帶大小對齊(即設定為 raid 條帶大小的倍數)。--可避免寫放大。如果考慮未來RAID的擴充套件,則用RAID條帶大小乘以一序列素數,來得到你想要的磁碟倍數,建議這樣計算data-offset的值    For example:  If you have a 64k stripe size, then the following offset    would provide alignment for many common RAID5 data spindle counts:     64k * 2*2*2*3*3*5*7 bytes = 161280k    That space is wasted, but for only 157.5MB you can grow your RAID 5    volume to the following data-spindle counts without re-aligning:     3,4,5,6,7,8,9,10,12,14,15,18,20,21 ... - 寫入效能差  假如寫入效能不達預期,你或許想執行在writeback模式下面,這並非預設的模式。(writeback模式之所以不是預設模式,不是因為不成熟,而是因為該模式可能在某些情況下丟失資料。) 預設 bcache 的 cache_mode 是 writeround,改成 writeback,提高寫入效能 echo writeback > /sys/block/bcache0/bcache/cache_mode -效能差,或者到SSD的流量未達預期 預設情況下,bcache不會快取所有內容.它嘗試跳過順序IO,因為你真正想要快取的是隨機IO如果你複製一個10GB的檔案,你可能也不希望將 cache 中10GB 的隨機訪問資料從快取中重新整理走(cache 可用空間不夠時,根據lru演算法將冷資料回寫到backing device)。  但是假如你要對讀快取進行基準測試,使用 fio寫一個8 GB的測試檔案,你需要禁用它(允許順序IO): echo 0 > /sys/block/bcache0/bcache/sequential_cutoff 調整 backing 裝置的順序IO 閾值,表示 bcache0 裝置的順序IO大於4MB 時,大於 4MB 的部分不會走 SSD 裝置,也不會快取到 ssd,而是直接讀寫 backing 裝置。(default:4M) echo 4M > /sys/block/bcache0/bcache/sequential_cutoff -流量仍然進入後端裝置(spindle)/仍舊得到cache miss 現實中SSD並不總是能跟上硬碟的速度,特別是那些慢速的SSD,在一塊SSD為很多HDD做快取裝置,或者出現大比例的序列化IO的情況下。假如你想避免SSD成為瓶頸,就讓每件事慢下來 bcache會跟蹤每個IO,如果IO的時間超過閾值則旁路cache裝置,直接讀寫backing裝置 為避免bcache追蹤快取裝置的延遲,假如延遲超過閾值時,逐步阻塞流量(通過降低順序旁路來實現) 如果你的SSD足夠強大,可以不跟蹤,減少跟蹤的開銷  如果你需要的話,可以設定閾值為0來禁用它    # echo 0 > /sys/fs/bcache/<cache set uuid>/congested_read_threshold_us    # echo 0 > /sys/fs/bcache/<cache set uuid>/congested_write_threshold_us 關閉旁路的另一個好處是,所有的離散讀寫都會經過cache裝置,從而不會導致cache missing。 預設情況下當讀請求超過2ms,寫請求超過20ms時,旁路cache裝置。    The default is 2000 us (2 milliseconds) for reads, and 20000 for writes.  -某些資料仍然cache miss 最後一個困擾人們的問題事實上是個老bug,由於快取連貫性(cache coherency)對cache miss的處理方式。 當btree node慢了之後,cache miss時並不能對新資料插入key,對應資料也不能寫到cache中。 事實上這並不是問題,因為只要cache寫到來,將會導致btree node分裂(split),根本無需可觀的 寫流量,這很難觀察到(特別當bcache的btree nodes很多,要索引裝置上大部分割槽域的時候) 但當benchmark的時候,假如你想通過大量資料,讓它成為快取中的熱點時,不需要其它流量,這可能是個問題。 解決方法: 通過寫操作來讓cache形成熱點,或使用測試分支的程式碼(那裡對該問題做了修復) Sysfs-BACKING DEVICE 實際裝置目錄: /sys/block/<bdev>/bcache 以下目錄軟連結到實際裝置目錄: /sys/block/bcache*/bcache /sys/fs/bcache/<cset-uuid>/bdev* ---------------------------------- 比如:/sys/block/bcache0/bcache/ /sys/block/<bdev>/bcache/sys/block/bcache*/bcache/sys/fs/bcache/<cset-uuid>/bdev*(假如綁定了)中可以獲得。  attach echo cache set中的UUID(<cset-uuid>)到此檔案,來將快取裝置連線到後端裝置 cache_mode 可以是writethrough,writeback,writearound或none之一 參見bcache/super.c中的bch_cache_modes[], writearound可能和passthrough相同 clear_stats 寫入此檔案將重置正在執行的總(total)統計資訊(不是 day/hour/5minute的重新整理版本) detach 寫入此檔案將從快取集(cache set)中分離.如果快取中有髒資料,則會先重新整理 dirty_data 快取中對應此backing device的髒資料量, cache 設定的版本不斷更新,但可能會稍微偏離 label 所在底層裝置名稱(Name of underlying device) readahead 應該執行的readahead預讀資料的大小,預設為0.如果設定為,比如1M,它會將cache未命中的資料讀取到約1M,但是不會重疊現有的快取條目 running echo 1 可強制 bcache 在無 cache 的情況下執行 假如bcache在執行時,它的值為1,也就是說,不管/dev/bcache裝置是否存在,是否它處於passthrough還是caching模式 sequential_cutoff 一旦連續的 IO 大小越過此閾值,它將繞過快取(也就是,跳過不處理連續IO);最近的128個IO將被跟蹤,因此即使沒有一次完成,也可以檢測到連續的IO (default:4M) sequential_merge順序合併 如果非零,bcache將提交的最後128個請求的列表與所有新請求進行比較,以確定哪些新請求是先前請求的順序後繼(sequential continuations),為了確定sequential cutoff的目的.如果順序截止值大於任何單個請求的最大可接受順序大小,則這很有必要。 state backing device 可以處於四種不同狀態之一:
  • no cache:還未附加到快取集(cache set)。
  • clean:快取集的一部分,且 cache 沒有髒資料。
  • dirty:快取集的一部分,且 cache 有髒資料。
  • inconsistent:不一致,當 cache 中存在髒資料但快取集不可用時,backing device 被使用者強制執行;backing device 上的任何資料可能已損壞了
stop 寫入此檔案以關閉 bcache 裝置並關閉 backing device writeback_delay 當髒資料被寫入 cache 並且之前沒有包含任何資料時,在啟動(回寫磁碟)之前等待的秒數。預設為30。 writeback_percent 假如非零,bcache會試圖保持這個百分比的 cache 髒資料,並通過阻塞後臺回寫(background writeback)及使用 PD 控制器來平滑調整回寫速率 (default:10) writeback_rate 每秒扇區回寫的速度 - 如果writeback_percent 不為0,則後臺回寫(background writeback)被限制到該指定速度。 該項由bcache連續調整,但也可由使用者設定 writeback_running 如果關閉,則根本不會發生髒資料的回寫,髒資料仍將被新增到快取中,直到快取將要滿時,僅用於基準測試。預設開啟 (default: on [on:1,off:0]) Sysfs-BACKING DEVICE 後端裝置狀態統計: 實際裝置目錄: /sys/block/<bdev>/bcache 比如 /sys/block/bcache0/bcache/stats_total主要都是IO的統計資訊 後端裝置目錄下有,狀態總計目錄(stats_total),以及一天(stats_day),1小時(stats_hour)和5分鐘(stats_five_minute)共四個目錄,它們也會聚合到cache set目錄中,其中目錄中的檔案含義分別如下: bypassed 繞過快取的 IO (讀取和寫入)計數 cache_hits cache_misses cache_hit_ratio 對bcache看到的每個 IO,計數hit 和 miss以及命中率,資料部分命中(partial hit)會被計為 miss 我的理解是,SSD的命中或不命中  cache_bypass_hits cache_bypass_misses 繞過快取的 IO 的 hit 和 miss 的計數也會計算,但是bcache看不到 我的理解就是磁碟命中或不命中 cache_miss_collisions cache miss的衝突數,在cache miss時寫入資料與那個寫資料成功的寫操作的條件競爭 (通常該值為0,因為cache miss的同步會被重寫) cache_readaheads 預讀發生次數的計數 Sysfs-CACHE SET: 可在目錄/sys/fs/bcache/<cset-uuid>獲取 /sys/fs/bcache/9435d2f9-678c-403e-9472-9ca5115695c1 average_key_size  btree中每個鍵的平均資料大小 bdev<0..n> 每個附加的後端裝置 backing device的符號連結 ls -lrth 的結果 bdev0 -> ../../../devices/pci0000:00/0000:00:02.2/0000:04:00.0/host0/port-0:0/expander-0:0/port-0:0:6/end_device-0:0:6/target0:0:6/0:0:6:0/block/sdg/bcache block_size  快取裝置的塊大小,塊block是最小粒度的寫單位,應該匹配硬體扇區大小 btree_cache_size btree 快取當前使用的記憶體量(Amount of memory currently used by the btree cache) bucket_size buckets 大小,bucket是bcache的基本儲存單位,每個bucket再細分為多個block cache<0..n> 組成cache set的每個cache裝置(cache devices)的符號連結 cache0 -> ../../../devices/pci0000:00/0000:00:02.2/0000:04:00.0/host0/port-0:0/expander-0:0/port-0:0:5/end_device-0:0:5/target0:0:5/0:0:5:0/block/sdf/bcache cache_available_percent 不包含髒資料的快取裝置(空間)的百分比,並且可能被潛在用於回寫。這並不意味著這個空間不用於乾淨的快取資料;未使用的統計資訊(在priority_stats中)通常要低得多。 clear_stats 清除與此快取記憶體關聯的統計資訊, 該項只有寫許可權,不能讀 congested congested_read_threshold_us congested_write_threshold_us errors dirty_data 沒有這一項 在快取中髒資料的量(在垃圾回收(gc)執行時將更新) flash_vol_create echo一個size大小到這個檔案,(以人類可讀的單位,k/M/G)去建立一個由快取集(cache set)支援的精簡卷 io_error_halflife io_error_limit 這些決定了在禁用快取之前接受的錯誤數量,每個錯誤都會在半衰期之後衰減(在#ios中),如果衰減計數達到 io_error_limit,則會寫出髒資料(到後端裝置?),並禁用快取 journal_delay_ms 日誌寫入延遲毫秒數,除非快取刷新發生得更早。預設值為100 root_usage_percent 正在使用的root btree節點的百分比,如果這值太高,節點會分裂,增加樹的深度。(default:2) stop 寫入此檔案以關閉快取集,等待直到所有連線的後備裝置都已關閉 synchronous tree_depth btree的深度(單節點btree的深度為0)(default:1) unregister

相關推薦

bcache狀態配置檔案詳細介紹(翻譯

參考文獻 宣告: 什麼是bcache   bcache是linux核心塊層cache.它使用類似SSD來作為HDD硬碟的cache,從而起到加速作用。 HDD硬碟便宜並且空間更大,SSD速度快但更貴。如果能兩者兼得,豈不快哉?bcache能做到。   bcache使

request的全鏈路追蹤(翻譯

MDC全稱Mapped Diagnostic Context,翻譯為上下文資訊診斷對映。為了追蹤不同客戶端對服務端的請求,並記錄他們的日誌呼叫資訊。一個簡單的做法就是為每個提供服務的客戶端請求單獨的記錄日誌資訊。LOGBACK利用了一系列這個技術應用到SLF4J API,

mysql——mysql.cnf配置檔案詳細介紹

mysql配置檔案載入順序 Default options are read from the following files in the given order: 載入順序:/etc/my.cnf   /etc/mysql/my.cnf &nbs

MS COCO資料集(百度雲下載,COCO API、MASK APIAnnotation format介紹(來自

由於coco的官網老是打不開,因此把官網內容記錄在此 包括MS COCO官網資料集下載地址,COCO API介紹和Result Format介紹 下面是影象和註解下載地址: Images Annotations 如果下載不下來可以用百度雲下載

pygame學習教程(一pygame介紹

網上有很多pygame的教程,我寫這個系列是因為我在學習的過程中響起當年Win32程式設計,自己編寫Form,Message,事件響應。雖然現在已經有很多方法可以幫我們實現這些,如果自己寫一遍會體會很深。 第一篇介紹。 https://www.pygame.org/docs/tut/Pyga

js之事件冒泡事件捕獲詳細介紹

1-1 ppr lang strong 傳播 默認 ont 也不會 element (1)冒泡型事件:事件按照從最特定的事件目標到最不特定的事件目標(document對象)的順序觸發。 IE 5.5: div -> body -> document

CentOS 6.9配置卡IP/關/DNS命令詳細介紹及一些常用配置命令(轉

linux. centos fly fig details oba routing href 修改dns 一、IP 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 r

jfinalQ開發教程05-qiao-util.jar:常量配置檔案

常量 資料字典 相信每個系統不可避免的都會使用常量,而對應的在資料庫中則以資料字典的方式記錄。 常量檔案 jfinalQ中src下contants.properties為常量對應的檔案,內容如下: 這裡可以採用key-value的形式記錄常量, key可

Spring中註解注入bean配置檔案注入bean

註解的方式確實比手動寫xml檔案注入要方便快捷很多,省去了很多不必要的時間去寫xml檔案 按以往要注入bean的時候,需要去配置一個xml,當然也可以直接掃描包體,用xml注入bean有以下方法: 1 <?xml version="1.0" encoding="UTF-8"?> 2

利用mybatis-generator自動生成程式碼-表對應的類配置檔案

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configu

初始MyBatis框架(四大核心元件配置檔案

一、概述 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。 MyBatis 是一款優秀的持久層框

springboot把配置實體配置檔案關聯

1.實體 package com.tansen.study.springbootssm.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.spri

Nginx配置檔案基本介紹

NGINX和NGINX Plus與其他服務類似,因為它們使用以特定格式編寫的基於文字的配置檔案。預設情況下,該檔名為nginx.conf,而NGINX Plus則放在/ etc / nginx目錄中。 (對於開源NGINX,位置取決於用於安裝NGINX和作業系統的軟體包系統。它通常是/ usr /

MyBatis的體系結構配置檔案詳解

一、SqlSessionFactory MyBatis 的應用都是以一個 SqlSessionFactory 的例項為中心的,它是單個數據庫對映關係經過編譯後的記憶體映象;SqlSessionFactory 的例項可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSes

專案上線前遇到的關於資料指令碼配置檔案管理的問題

1、資料庫結構與資料指令碼 投產前要提變更單,需要整理資料庫結構和資料指令碼。其中資料指令碼還包括前備、執行、後備、回退指令碼。用來在執行前備份,執行失敗後回滾,執行成功後備份。目前有一個開發庫、測試庫、投產演練庫三個庫。由於資料指令碼即使在投產前幾天甚至還有要改動的,所以整個提指令碼、

OpenVPN Server端配置檔案詳細說明(轉

本文將介紹如何配置OpenVPN伺服器端的配置檔案。在Windows系統中,該配置檔案一般叫做server.ovpn;在Linux/BSD系統中,該配置檔案一般叫做server.conf。雖然配置檔名稱不同,但其中的配置內容與配置方法卻是相同的。 本文根據官方提供的server.ovpn示例檔案直

Top20的OpenSSH伺服器最佳安全實踐--SSHD_CONFIG配置檔案詳細解讀

  OpenSSH是SSH協議的實現。建議使用OpenSSH進行遠端登入,備份,通過scp或sftp進行遠端檔案傳輸等等。SSH非常適合保持兩個網路和系統之間交換的資料的機密性和完整性。但是,主要優點是伺服器身份驗證,通過使用公鑰加密。有時會有關於OpenSSH零日攻擊的傳聞。此頁面顯

使用私有git倉庫備份伺服器指令碼配置檔案

1. 建立私有git倉庫 伺服器端配置: # 安裝 git yum -y install git # 建立 git 使用者 useradd git # 建立私有倉庫資料儲存目錄 mkdir /git_back/

將python打包成exe檔案詳細介紹(各種坑解決

安裝pyinstaller 一開始偷懶,直接使用的pip安裝,結果各種問題 pip install pyinstaller 所以還是去github去下載最新的pyinstaller,替換掉用pip安裝好的pyinstaller,下載連結:pyinstall

工廠設計模式解耦dao與service(註解配置檔案)

在剛學習web時,我的service層的程式碼往往這樣寫 public class OrderService { OrderDao od=new OrderDao(); public Order findOrderItemsByOrderId(String ord