原创 f2fs系列之十:f2fs到底如何避免wandering tree的?

名詞解釋 f2fsflash friend file system,最早由三星開發的一個對flash/SSD 友好的文件系統。 blockf2fs中數據讀寫最小的切片單位,通常4K。沒個block 有一個編號,每個編號對應某個偏移的物

原创 如何計算和優化追加寫引擎中GC的寫放大

名詞解釋 append寫一種基於journal的順序追加寫的數據記錄方式,類似ZFS的ZIL,ext4的journal. GCgarbage colletion 是指在append寫過程中對覆蓋寫產生的垃圾數據的回收過程。 GC過程

原创 page cache的淘汰策略和組織形式

page cache和buffer cache的區別 free -m 看到的cached列表示當前的頁緩存(page cache)佔用量,buffers列表示當前的塊緩存(buffer cache)佔用量。用一句話來解釋:page cach

原创 適配SSD介質的存儲引擎的GC的思考

爲了充分發揮SSD的特性,和它適配最好的引擎就是一路append 引擎。這樣的追加寫能夠便於SSD內部一次可以找到多塊連續的物理page, 減少內部邏輯地址到物理地址轉換索引的更新。但於此同時,相對平坦式地存儲引擎,會比較快寫到文件末尾。這

原创 FIO性能測試數據畫圖

一圖勝萬言。在測試性能的時候,尤其如此。對於我們常常用到的fio 測試的結果,怎麼樣能快速生成圖表? 確保FIO命令能夠記錄性能數據 參考下面的命令: fio -filename=/dev/nvme2n1 -thread -numjobs=

原创 Raft ABC之二

基於Raft 的分佈式一致性協議是構建很多分佈式服務的基礎,某種程度上它充當了心臟的角色,爲此有必要對Raft 的一些難點進行深入理解。 正確理解commited 一個常見的誤解就是複製到多數副本的就可以視作commited, 其實還不夠

原创 分佈式場景SSD append 引擎的點滴思考

分佈式和單機場景對append引擎設計的不同要求 單機:只用考慮本地數據的格式、位置和管理分佈式:需要考慮分佈式一致協議中 日誌落盤的格式、位置和管理 append引擎和分佈式一致性協議的潛在衝突 append引擎的需求 顧名思義, app

原创 mmap 映射的內存訪問出錯

現象 把一個打開的文件描述符,通過mmap映射到一片內存區間,對這塊區間進行讀寫,長時間運行後出現訪存錯誤 SIGBus Error, GDB分析相應的core出現一些內存空間不可用的錯誤。 問題分析 參考man mmap , 在出現下列情

原创 我是如何分析io_submit 出現無效描述符的錯誤的

現象 在本人的系統軟件中調用io_submit提交IO請求,長時間運行後會返回不爲1,而且還伴隨着 Bad File descripotr 錯誤。檢查了提交前後文件描述符的值,都是對的;檢查了文件是否存在,文件打開前後都是存在的。那到底

原创 C++ 相關數據結構

LinkList VS. List // Questions and Answers://// Q. Should I use std::list or base::LinkedList?//// A. The main reason to

原创 分佈式事物ABC

事務處理的四個至關重要的特性 原子性 (Acomicity) 事物要麼完全成功並提交,要麼根本不執行。 示例:A轉賬給B 100元,最後要麼A賬號少了100元、B賬號增加了100元,要麼轉賬失敗,A和B賬戶都沒有變化。而不應該出現A賬戶減少

原创 我是如何發現一塊NVME SSD 盤從系統中消失的

現象 內核中出現下面的消息: pcie04: Card not present on Slot 排查過程 確認哪個PCIE slot lspci -vvvv -s 0000:ac:00.0 看看是什麼PCI bus: 看看它下掛什麼設備

原创 Paxos and Raft ABC

Paxos Paxos是所有分佈式環境中關於某個值達成一致的協議,Paxos 一個節點同時包括提議者和接受者。顧名思義:提議者是發起投票;接受者接受投票請求,根據投票請求和自身狀態進行響應的回覆。爲了防止異常丟狀態,Paxos在內部持久化三

原创 NVDIMM-P 和 NVIDMM-N ABC

這篇博客主要記錄最近了解的一些主要NVIDMM 廠家及其產品。 分類 NVIDMM-N: memory mapped DRAM, 提供字符訪問接口, 在三種產品中性能最好,容量最小 NVDIMM-F: memory mapped Flush

原创 內存泄露分析

現象 進程異常退出,看不到FATAL 信息,即便設置爲ulimit -c unlimited , 也沒有core; 確認是OOM [root@server]# dmesg | grep oom_kill_process [9490641.2