[Qemu OpenChannelSSD] Hello world

sudo qemu-system-x86_64 --enable-kvm -m 4G -smp 2 -hda ./VMs/vm1.raw -hdb ./VMs/vm1_1.raw -net nic -net tap \
-drive file=./VMs/blknvme.1,if=none,id=blknvme.1 \
-device nvme,drive=blknvme.1,serial=deadbeef,namespaces=1,lver=1,nlbaf=5,lba_index=3,mdts=10
  • 其中nvme設(shè)備的參數(shù)(qemu_src/hw/block/nvme.c)
serial=deadbeef,
namespaces=1,  # namespaces=<int> : Namespaces to make out of the backing storage, Default:1
lver=1,        # lver=<int> : version of the LightNVM standard to use, Default:1
nlbaf=5,       # nlbaf=<int> : Number of logical block formats, Default:1
lba_index=3,   # lba_index=<int> : Default namespace block format index, Default:0
mdts=10        # mdts=<int> : Maximum data transfer size, Default:5
  • nlbaf=5,lba_index=3據(jù)說這兩個(gè)參數(shù)決定了nvme設(shè)備的塊大邢裉洹(block = 4K),具體怎么處理的需要看Qemu中nvme設(shè)備的相關(guān)處理.
    (git clone https://github.com/OpenChannelSSD/qemu-nvme.git

  • 在虛擬機(jī)內(nèi)可以見到一個(gè)nvme設(shè)備了.

work@vm1:~$ sudo nvme lnvm list
Number of devices: 1
Device          Block manager   Version
nvme0n1         none            (0,0,0)
work@vm1:~$ lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb       8:16   0    30G  0 disk 
└─sdb1    8:17   0    30G  0 part /home/work/mnt/1
sr0      11:0    1  1024M  0 rom  
sda       8:0    0    20G  0 disk 
├─sda2    8:2    0   1.4G  0 part [SWAP]
└─sda1    8:1    0  18.6G  0 part /
nvme0n1 259:0    0    16G  0 disk 
work@vm1:~$ sudo nvme lnvm init -d nvme0n1
work@vm1:~$ sudo nvme lnvm list
Number of devices: 1
Device          Block manager   Version
nvme0n1         gennvm          (0,1,0)
  • 緊接著在虛擬機(jī)中安裝liblightnvm,以便用戶態(tài)可以使用一些與OpenChannelSSD相關(guān)的api.就是去下這個(gè)githttps://github.com/OpenChannelSSD/liblightnvm谋减,并make&&make install.
  • 在虛擬機(jī)裝好liblightnvm后吕嘀,可以在用戶態(tài)access一個(gè)OpenChannelSSD.
  • hello_nvme.c:
#include <stdio.h>
#include <liblightnvm.h>
int main(int argc, char **argv)
{
    NVM_DEV dev = nvm_dev_open("/dev/nvme0n1");
    if (!dev) {
        perror("nvm_dev_open");
        return 1;
}
nvm_dev_pr(dev);
nvm_dev_close(dev);
return 0;
  • 編譯:(需要gcc版本 4.9.1以上)
 gcc hello_nvme.c -llightnvm -o hello_nvme
  • 運(yùn)行:
work@vm1:~/mnt/1/OpenChannelSSD/src/hello_nvme$ sudo ./hello_nvme 
dev { path(/dev/nvme0n1), name(nvme0n1), fd(3) }
dev-geo {
 nchannels(1), nluns(1), nplanes(1),
 nblocks(16352), npages(256), nsectors(1),
 page_nbytes(4096), sector_nbytes(4096), meta_nbytes(16),
 tbytes(17146314752b:16352Mb),
 vpg_nbytes(4096b:4Kb),
 vblk_nbytes(1048576b:1Mb)
}
dev-lba_map {
 channel_nbytes(17146314752)
 lun_nbytes(17146314752)
 plane_nbytes(4096)
 block_nbytes(1048576)
 page_nbytes(4096)
 sector_nbytes(4096)
}
dev-fmt {
 ch_ofz(20), ch_len(0),
 lun_ofz(20), lun_len(0),
 pl_ofz(20), pl_len(0),
 blk_ofz(0), blk_len(12),
 pg_ofz(12), pg_len(8),
 sec_ofz(20), sec_len(0)
}
Paste_Image.png
  • 過程中出了個(gè)問題.(感覺是需要OpenMP4.0)
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/liblightnvm.so: undefined reference to `GOMP_parallel@GOMP_4.0'

看一下我的GCC版本

work@vm1:~/mnt/1/OpenChannelSSD/src/hello_nvme$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

查一下這個(gè)GOMP是個(gè)所謂的多線程框架放可,gcc自帶的,并且版本關(guān)系如下:

From GCC 4.2.0, OpenMP 2.5 is fully supported.
From GCC 4.4.0, OpenMP 3.0 is fully supported.
From GCC 4.7.0, OpenMP 3.1 is fully supported.
In GCC 4.9.0, OpenMP 4.0 is supported for C and C++, but not Fortran.
From GCC 4.9.1, OpenMP 4.0 is fully supported.

所以這里應(yīng)該是gcc的版本不夠.按照這個(gè)threadUbuntu 14.04 LTS 下升級(jí) gcc 到 gcc-4.9、gcc-5 版本
裝個(gè)gcc-4.9.
簡(jiǎn)要步驟如下:

1 sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2 sudo apt-get update
3 sudo apt-get upgrade
4 sudo apt-get install gcc-4.9 g++-4.9
work@vm1:~/mnt/1/OpenChannelSSD/src/hello_nvme$ gcc-4.9 --version
gcc-4.9 (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

再編譯果然就OK.

  • 與OpenchannelSSD相關(guān)項(xiàng)目

Linux Kernel Support (https://github.com/OpenChannelSSD/linux) Implements support for Open-Channel SSDs in the kernel. It is the core of identifying, managing, and using the Open-Channel SSDs.

liblightnvm Library (https://github.com/OpenChannelSSD/liblightnvm)A library that abstracts the underlying "raw" Open-Channel SSD device and provides abstractions such as append only, bad block management, etc.

General documentation (https://github.com/OpenChannelSSD/documentation)The documentation that is exposed through readthedocs.org

liblightnvm documentation (http://lightnvm.io/liblightnvm)The liblightnvm documentation

LightNVM Conditioning Tool (https://github.com/OpenChannelSSD/lnvm) Provides the lnvm-tool
cli management tool for verifying and conditioning Open-Channel SSDs.

LightNVM Test Tools (https://github.com/OpenChannelSSD/lightnvm-hw)Various tools to test kernel and target implementations.

QEMU with NVMe Open-Channel Support (https://github.com/OpenChannelSSD/qemu-nvme)Implements support for exposing a virtual open-channel SSD. Very useful for development.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坞淮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陪捷,更是在濱河造成了極大的恐慌回窘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市袖,死亡現(xiàn)場(chǎng)離奇詭異啡直,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)苍碟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門酒觅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人微峰,你說我怎么就攤上這事舷丹。” “怎么了蜓肆?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵颜凯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我症杏,道長(zhǎng)装获,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任厉颤,我火速辦了婚禮穴豫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己精肃,他們只是感情好秤涩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著司抱,像睡著了一般筐眷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上习柠,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天匀谣,我揣著相機(jī)與錄音,去河邊找鬼资溃。 笑死武翎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溶锭。 我是一名探鬼主播宝恶,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趴捅!你這毒婦竟也來了垫毙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拱绑,失蹤者是張志新(化名)和其女友劉穎综芥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欺栗,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫痕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年征峦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淹朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖替。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脸秽,到底是詐尸還是另有隱情,我是刑警寧澤惜颇,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布竟块,位于F島的核電站,受9級(jí)特大地震影響针饥,放射性物質(zhì)發(fā)生泄漏厂抽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一丁眼、第九天 我趴在偏房一處隱蔽的房頂上張望筷凤。 院中可真熱鬧,春花似錦、人聲如沸藐守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卢厂。三九已至乾蓬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慎恒,已是汗流浹背任内。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留融柬,地道東北人族奢。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丹鸿,于是被迫代替她去往敵國(guó)和親越走。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 329天靠欢。最近機(jī)緣巧合的認(rèn)識(shí)了一群96廊敌、97年的孩子。然后在相處的過程中就有種自己已經(jīng)老了的感覺门怪。對(duì)比一下骡澈,便會(huì)驚...
    黑兔子Gary閱讀 298評(píng)論 0 0
  • 今天為什么選擇這個(gè)主題肋殴,來談?wù)剝?nèi)心的想法呢? 第一坦弟,來源于最近追劇很火熱的《我的前半生》的女主角羅子君在離婚后护锤,為...
    羅文均閱讀 1,172評(píng)論 0 2
  • 突然很后悔自己讀了太少的書,以至于再多的感觸都無(wú)法用語(yǔ)言精準(zhǔn)地傾訴…… 每一個(gè)人都有一顆玻璃心酿傍,區(qū)別在于你有沒有發(fā)...
    手鼓君閱讀 146評(píng)論 1 0