SPDK NVME

SPDK NVME

1、SPDK(APP)在啓動時候會讓指定綁定在那些core上運行,這樣在每個core上會創建一個線程(他叫reactor),這個線程不停的做polling操作,而如果你要在這個線程上做事情,則需要註冊poller( 可以理解爲一個poller就是SPDK中一個事情的thread入口函數,但是),這個線程就不停的調用poller的機型函數執行你要執行的動作。

2、一個NVME的開始和結束的過程是:

2.1、probe NVME設備也就是prob發現ctrlloer.然後在給這個contrlloer創建一個IO qpair(admin qpair是在創建ctrlloer時候就創建了)。也就是創建submisson queue和completion queue.當然可以創建多個sq和一個cq的。但一般是一個sq和cq對應。創建好qpair後就可以通過qpair下發IO操作了。

2.2、一個讀寫請求,發到qpair的submisson queue中,這個submisson queue是一個環形隊列,此時這個環形隊列的tail指針++,此時再把這個 tail位置通過門鈴寄存器(每個qpair一個門鈴寄存器)告訴下面的盤(controller)。此時controller根據門鈴寄存器記錄的環形隊列的尾巴知道數據最多可以取到哪裏。環形隊列的head指針controller也是可以知道。而且處理一個請求這個head指針++,這個head位置是controller來維護的,但是這個位置可以通過completion queue的entry記錄着。沒處理完一個請求,則controller會產生一個完成請求entry,然後掛在completion queue中,然後更新completion queue的head位置,然後通過中斷告訴host可以取完成請求了。主機host通過head位置訪問completion queue的那個entry。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章