yunjayh / nvmevirt

NVMeVirt: A Versatile Software-defined Virtual NVMe Device
Other
0 stars 0 forks source link

Scalable storage size #1

Open yunjayh opened 1 year ago

yunjayh commented 1 year ago

Make scalable storage size

yunjayh commented 1 year ago

as of https://github.com/yunjayh/nvmevirt/commit/a19ec0eacb516103a517896d03a19545d40af5fc, scalability doesn't work.

How can i check the scalability? (upper QD32 random read, it bounded by the host io creation)

yunjayh commented 1 year ago

https://github.com/yunjayh/nvmevirt/tree/0ed1e3f1ed8b19167f10a2d8ea43f356f9da4858 Above commit works with the scalable ssd size

yunjayh commented 1 year ago

set_perf 를 통한 max read bandwidth를 프로젝트 문서에 따른 알고리즘에 적용시켜 DMA bandwidth를 새로 적용한 코드를 7fc775a91f03b23b92e44982453d03ccb82a673e 에 올려두었습니다. (fit-sequential-read-128KB branch 최신버전)

lun := number of chips in each channel nchs := total number of channels in SSD MAX_BW := given max read bandwidth

초기 값 tDMA = 32KB / 800us tR = 35760 ns

if (lun - 1) tDMA > tR 이면 DMA_BW = MAX_BW / nchs else ( (lun - 1) tDMA <= tR ) DMA_BW = MAX_BW / nchs tDMA = 32KB / DMA_BW if (luns - 1) tDMA > tR 이면 DMA_BW = DMA_BW else tDMA = (32 KB nchs) / MAX_BW - tR if tDMA < threshold tMDA = SOME_VALUE (now 1us) DMA_BW = 32KB / tMDA

NOTES: set_perf 이후 proc을 통해 read_time을 저장해서 이에서부터 max read bandwidth 역산하는 함수를 넣음. tDMA의 minimum을 threshold를 정하는게 나을 듯 한데, 이에 대한 intuition이 있으면 좋겠다. ns level으로 가면 overflow 나고, us level으로 연산하면 오차가 좀 남. (us로 해놨음)