原创 io_submit,io_getevents可能被阻塞的原因

libaio雖然是異步direct-io,但某些情況下仍然會被阻塞。 測試環境, 硬盤信息:ATA HGST硬盤,6.0 Gbps SATA HDD,容量5.46TiB(6.00TB); 邏輯盤信息:RAID0,容量5.457TiB,條帶

原创 io_uring相對libaio的優勢

1,libaio只支持direct_io,即旁路內核緩存,且用戶態參數buffer、size、offset也要對齊; 2,libaio每完成一個IO event至少需要兩個系統調用,用戶態提交IO:io_submit; 用戶態收割IO:i

原创 get_user_page, get_user_pages_fast

get_user_page, get_user_pages_fast用於獲取用戶buffer所mapped的頁。 /**                               * get_user_pages_fast() - pi

原创 systemtap探測vfs dentry

有一臺機器,監控發現經常出現內存不足的情況,如下: 可以看到 32G 內存,可用內存大概就剩下 6500M 左右。本來剩個 6G 內存問題倒不大,但是問題是系統上的業務進程基本上沒使用多少內存,從 ps 命令輸出的結果來看所有進程加起來

原创 關於linux vfs dentry cache

Linux使用目錄項緩存(dentry cache)用於建立文件名到inode之間的映射關係,用來快速通過文件名訪問查找文件。 每個目錄項對象都有四種狀態,分別爲:空閒狀態:該狀態目錄項對象不包含有效信息,沒有被VFS使用;未使用狀態:

原创 塊設備異步讀page流程

    以cramfs_read爲例,詳細流程如下, 1,發起cramfs superblock讀流程:   2,要讀的page在不address_space, 測發起真正的讀,執行filler函數(blkdev_readpa

原创 關於IO throttle

cgroup中blkio子系統的主要功能是實現對磁盤IO帶寬的可定製化控制,目前支持的控制策略只要有兩種:基於weight權重方式和基於流量方式(iops,bps)。weight方式依賴於內核原生的CFQ IO調度算法(其工作與IO調度層

原创 nvme dev&interrupts naming conventions

NVME設備與分區命名 示例: nvme0n1 - 這裏的設備編號爲 0 分區使用前綴“p”追加在設備名稱後面  示例: nvme0n1p1 - 分區 1 nvme1n1p2 - 分區 2  示例: nvme0n1p1 - 設備 0 的分

原创 nvme設備queue的創建

1,nvme admin queue的創建 nvme_reset_work      ->nvme_pci_configure_admin_queue 其中 nvme_remap_bar用於映射設備的bar空間,即爲nvme控制器寄存

原创 個人新提的一個內核PATCH(read page error相關)

https://lkml.org/lkml/2020/3/4/289 主線commit id: faffdfa  

原创 I/O Latency Optimization with Polling (NVME)

https://events.static.linuxfound.org/sites/events/files/slides/lemoal-nvme-polling-vault-2017-final_0.pdf

原创 bio中bi_sector扇區的轉換

在"塊存儲:AIO的直接讀流程註釋"文中,描述了調用塊設備__blkdev_direct_IO發起IO直讀,在提交IO(io_submit)之前設置了bio的起始扇區,但這個起始扇區只是相對於塊設備某個分區的偏移,不是相對於整個塊設備或磁

原创 讀取bluestore數據crc檢驗失敗,排除內核態出問題的方法

在ceph存儲測試中,發現用戶態通過aio讀取到的bluestore數據crc檢驗失敗,業務懷疑是內核態返回給用戶的數據有問題,可在塊設備的bio完成回調函數中直接讀取bio對應page的數據,與用戶態讀取的數據比較,排除內核態的問題。

原创 nvme cq work flow註釋

nvme_poll/nvme_irq-> nvme_process_cq -> 1,  nvme_update_cq_head, write_cq_head_doorbell 2, nvme_complete_cqes -> nvme_c

原创 nvme queue-pair for poll