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,是可以電擦...