cephfs kernel client寫的過程

2021-08-19 10:28:51 字數 1118 閱讀 1205

kernel 中ceph的客戶端的原始碼在fs/ceph 中,這裡我們以ceph的寫操作為例。

從fs/ceph/file.c 中的ceph_file_fops 中可以知道寫函式是ceph_write_iter

const struct file_operations ceph_file_fops =

static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)

}這裡以direct io寫為例

可以看到寫的過程中主要分為三個request ,分別是ceph_osdc_new_request->ceph_osdc_start_request->ceph_osdc_wait_request

static ssize_t

ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,

struct ceph_snap_context *snapc,

struct ceph_cap_flush **pcf)

具體等待的函式如下:

int ceph_osdc_wait_request(struct ceph_osd_client *osdc,

struct ceph_osd_request *req)

可見最終呼叫wait_for_completion_killable_timeout 來等待操作完成,從之前的分析指導wait_for_completion_killable_timeout 這個函式

在等待的過程中會讓出cpu。這樣就無法併發進行

static int wait_request_timeout(struct ceph_osd_request *req,

unsigned long timeout)

else

return left;

}從client寫的過程可以知道,direct io的寫會等到寫完成後才返回,這裡寫完成可以指寫入到磁碟中或者寫入到kernel cache中,反正就是要等待

寫完成後,才能進行下一次寫過程。所以當個client 無法提高併發度,只能通過增減client的方式來增加併發度

在寫儲存過批量插入資料

1 編寫儲存過程 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i bigint 定義i變數 set i 8986061900004332057 定義插入資料預設值 while i 89...

深度學習過擬合,找了些時間,這個寫的有點見解

在訓練資料不夠多時,或者overtraining時,常常會導致overfitting 過擬合 其直觀的表現如下圖所示,隨著訓練過程的進行,模型複雜度增加,在training data上的error漸漸減小,但是在驗證集上的error卻反而漸漸增大 因為訓練出來的網路過擬合了訓練集,對訓練集外的資料卻...

32通過rs485燒寫程式 何為微控制器燒寫

早期一般是將除錯好的微控制器程式寫入到 rom eprom 中,這種操作就像刻製光碟一樣,實在高電壓方式下寫入,prom 是一次性寫入,儲存內部發生變化,有些線路或元件就被燒斷,不可再恢復,所以叫做燒寫,eprom 可以使用紫外線將原來寫入的內容擦除,重新燒寫,目前大量採用 eeprom,是可以電擦...