work memory
nvmain wiki
nvmain 与 ssd 关系 是否可以用 nvmain模拟ssd?
SSDsim
openChannelSSD- LightNVM
openChannelSSD lightNVM ?pblk?
为了和 Kernel 中现有的 IO 子系统协同工作,还存在 pblk(Physical Block Device)层
而对于用户态的程序来说,可以通过 liblightnvm 操作 Open-Channel SSD
lightNVM是否支持 纯模拟的ssd
论文没有有用信息 google-》
http://lightnvm.io/liblightnvm/prereqs/index.html : 需要openChannel SSD
LightNVM not support SSD emulator
LightNVM + 挂载的ssd
Qemu ?
virtual Open-Channel SSD
介绍http://lightnvm.io/liblightnvm/prereqs/ocssd.html#virtual
前置条件 http://lightnvm.io/liblightnvm/quick_start/index.html
需要装python 是这个原因嘛?
ERROR: Python not found. Use --python=/path/to/python
装gcc sudo apt-get install gcc
装python https://www.cnblogs.com/fu-yong/p/9025489.html
2018.12.10
Virtual ocssd
https://openchannelssd.readthedocs.io/en/latest/qemu/#getting-started-with-a-virtual-open-channel-ssd
virtual Open-Channel SSD
介绍http://lightnvm.io/liblightnvm/prereqs/ocssd.html#virtual
前置条件 http://lightnvm.io/liblightnvm/quick_start/index.html
需要装python 是这个原因嘛?
ERROR: Python not found. Use --python=/path/to/python
装gcc sudo apt-get install gcc
装python https://www.cnblogs.com/fu-yong/p/9025489.html
---------------------------------------------------------
我应该看virtual lightNVM还是virtual OCSSD
猜测 先编译好virtual ocssd和内核 -》 然后再lightnvm即是 库 liblightnvm
先制作好 virtual ocssd 然后制作 liblightnvm
还有一个 linux内核 作为什么? 什么时候安装
内核即是子系统,真正操控ocssd的子系统。而liblightnvm只是提供给application的一个interface
Please read Documentation/admin-guide/README.rst first.
https://github.com/OpenChannelSSD/linux/blob/master/Documentation/admin-guide/README.rst
介绍了 installing configuration compilation
Please read the Documentation/process/changes.rst file
https://github.com/OpenChannelSSD/linux/blob/master/Documentation/process/changes.rst
Make sure that the Linux kernel .config file at least includes:
# For NVMe support
CONFIG_BLK_DEV_NVME=y
# For LightNVM support
CONFIG_NVM=y
# Expose the /sys/module/lnvm/parameters/configure_debug interface
CONFIG_NVM_DEBUG=y
# Target support (required to expose the open-channel SSD as a block device)
CONFIG_NVM_PBLK=y
Compile the kernel and install using the guide for your distribution.
--------------------------------------------
for virtual ocssd
https://openchannelssd.readthedocs.io/en/latest/qemu/#getting-started-with-a-virtual-open-channel-ssd
有一份代码ocssd implementation:https://github.com/OpenChannelSSD/qemu-nvme
cd qemu-nvme
./configure --enable-kvm --target-list=x86_64-softmmu --enable-linux-aio --disable-werror --disable-xen --prefix=$HOME/qemu-nvme
Disabling libtool due to broken toolchain support
ERROR: pkg-config binary 'pkg-config' not found
source does not have file "pkg-config"
solved : sudo apt install pkg-config
ERROR: zlib check failed Make sure to have the zlib libs and headers installed.
solved:sudo apt-get install zlib1g
solved:sudo apt-get install zlib1g-dev
ERROR: glib-2.12 gthread-2.0 is required to compile QEMU
solved:sudo apt-get install libglib2.0-dev
pixman >= 0.21.8 not present. Your options:
sudo apt-get install libpixman-1-dev
User requested feature linux AIO
configure was not able to find it.
Install libaio devel
apt-cache search libaio 找到了libaio-dev
sudo apt-get install libaio-dev
Disabling libtool due to broken toolchain support
xxxxx一长串
make
make install
-drive file={path to ocssd backend file},id=myocssd,format=raw,if=none \
-device nvme,drive=myocssd,serial=deadbeef,lnum_pu=4,lstrict=1,meta=16,mc=3 \
-drive:未找到命令
语句本身的问题 如“path to ocssd backend file”
https://svn.openfabrics.org/svnrepo/nvmewin/qemu/README
根据上述网址,可推测 该参数为运行时输入的
输入
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 4G -smp 4 -s \
-drive file={path to vm image},id=diskdrive,format=raw,if=none \
-device virtio-blk-pci,drive=diskdrive,scsi=off,config-wce=off,x-data-plane=on \
-drive file={path to ocssd backend file},id=myocssd,format=raw,if=none \
-device nvme,drive=myocssd,serial=deadbeef,lnum_pu=4,lstrict=1,meta=16,mc=3
猜想被验证。所以目前要配置好 “path to ocssd backend file”
path改为 $HOME/qemu-nvme/ocssd_backend.img 得到
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 4G -smp 4 -s \
-drive file={path to vm image},id=diskdrive,format=raw,if=none \
-device virtio-blk-pci,drive=diskdrive,scsi=off,config-wce=off,x-data-plane=on \
-drive file={$HOME/qemu-nvme/ocssd_backend.img},id=myocssd,format=raw,if=none \
-device nvme,drive=myocssd,serial=deadbeef,lnum_pu=4,lstrict=1,meta=16,mc=3
“path to vm image” ?? 这个设置成什么?
决定重新生成一个新的img:dd if=/dev/zero of=vm.img bs=1M count=4096
最后改为
注意 运行前要 进入 cd qemu-nvme 目录下面
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 4G -smp 4 -s \
-drive file=vm.img,id=diskdrive,format=raw,if=none \
-device virtio-blk-pci,drive=diskdrive,scsi=off,config-wce=off,x-data-plane=on \
-drive file=ocssd_backend.img,id=myocssd,format=raw,if=none \
-device nvme,drive=myocssd,serial=deadbeef,lnum_pu=4,lstrict=1,meta=16,mc=3
---------------------------------------------------------
for virtual lightnvm
http://lightnvm.io/liblightnvm/prereqs/ocssd.html#virtual
---------------------------------------------------------
qemu是什么
老师发给我华科的人用哪一种?
--------------------------------------------------------
pblk 是什麼
---------------------------------------------------
裝 ocssd kernel
先看 https://github.com/OpenChannelSSD/linux
查看文檔(有無安裝步驟)---無
關於kernel內核怎麼編譯安裝的通用步驟
先按照change.1st安裝好工具的最新版本 然後按照通用教程裝內核
jfsutils版本低於指定 版本 解決:
經過覈查 1.1.15 > 1.1.3
btrfs-progs 0.18 btrfsck
版本號不可知
isdn4k-utils 3.1pre1 isdnctrl 2>&1|grep version
版本號不可知
oprofile 0.9 oprofiled --version
未安裝 使用教程 https://blog.csdn.net/u013718481/article/details/53170381
出錯,oprofile無法成功安裝 參考https://www.jianshu.com/p/a5f28ccff7cd
ERROR3:configure:error:liberty library not found
vi Makefile
怎麼通過編輯器來弄
sudo gedit
最終解決:https://stackoverflow.com/questions/33249585/oprofile-binary-build-error-liberty-library-not-found
未成功,怎麼自動安裝
通過yum安裝 http://www.bonsai.com/wiki/howtos/tuning/oprofile/
yum怎麼使用
截圖 Fn+prnt
未解決
udevd --version
未解決
grub --version || grub-install --version
未解決
查看其他文檔 (有無安裝步驟)---無
查找谷歌 ocssd linux kernel安裝教程 --- 無
根據資料安裝內核:https://www.jianshu.com/p/8e11fa93411a
make menuconfig
錯誤 Unable to find the ncurses package.
解決:sudo apt-get install libncurses*
出現界面,是進入NVME Support嗎? 然後操作什麼?
未解決
-> Device Drivers │
-> Open-Channel SSD target support (NVM [=y])
确保几个参数的成立
CONFIG_NVM
CONFIG_NVM_DEBUG
搜不到,决定搜文件 grep -rl "NVM_DEBUG" ./
结果未找到
CONFIG_NVM_PBLK
Device Drivers->Open-Channel SSD target support
CONFIG_BLK_DEV_NVME
Device Drivers->NVME Support
make bzImage
fatal error: openssl/opensslv.h: 没有那个文件或目录
sudo apt-get install libssl-dev
ld: .tmp_vmlinux1: final close failed: 设备上没有空间
Makefile:1038: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
---------------------------------------------------
裝 liblightnvm
make spdk_on debug_on configure
make
没有那个文件或目录
#include
决定搜文件 grep -rl "stdinc.h" ./
无此文件
决定搜文件 grep -rl "spdk" ./
无此路径
怀疑是因为还没装内核导致的
查了之后,发现是nvm的某种库
尝试sudo apt-get install nvme-cli
失败
尝试谷歌 发现spdk安装教程 https://github.com/spdk/spdk/issues/425
git clone https://github.com/spdk/spdk.git
cd spdk
git checkout v18.07
git submodule update --init
./configure
make -j8
出错 没有那个文件或目录 #include
搜索google
根据 https://lists.01.org/pipermail/spdk/2017-October/000886.html 好像是因为没有用最新分支
决定用最新分支并查找最新安装方法
git checkout master
根据页面 https://github.com/spdk/spdk 安装
make
出现错误 error: ‘RTE_MAX_HEAPS’ undeclared here (not in a function); did you mean ‘RTE_MAX_TAILQ’?
struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
决定删除spdk 重新来一遍
成功解决
重新安装liblightnvm 问题还是存在 是spdk安装流程没有走完嘛
步骤执行至 Shared libraries 阶段,出现ERROR 疑是内存不够引起 因重启电脑
缺以下步骤
ldconfig -v -n ./build/lib
LD_LIBRARY_PATH=./build/lib/ ./app/spdk_tgt/spdk_tgt
sudo scripts/setup.sh
sudo HUGEMEM=8192 scripts/setup.sh
------------------------------------------------------
缺失的步骤 补录
https://openchannelssd.readthedocs.io/en/latest/gettingstarted/#linux-kernel-support
sudo nvme lnvm init -d nvme0n1
创建device后,用 sudo nvme lnvm list 查看发现无设备
sudo nvme lnvm create -d nvme0n1 --lun-begin=0 --lun-end=3 -n /dev/mydev -t pblk
!!!!!!!
https://www.jianshu.com/p/8e11fa93411a
这才是最终教程
从头来
cd qemu-nvme
sudo $HOME/qemu-nvme/bin/qemu-img create -f raw ubuntu.raw 100G
grep -E 'vmx|svm' /proc/cpuinfo
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 4096 -enable-kvm ubuntu.raw -cdrom ~/ubuntu.iso
没有弹出页面
使用vnc ?
下载安装vnc client
sudo apt-get install xvnc4viewer
vncviewer localhost:5900
安装好后,重启,出现 Please remove installation medium 这时敲下回车键就行
以后启动模拟器只需要输入
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw
和
vncviewer localhost:5900
根据 https://openchannelssd.readthedocs.io/en/latest/qemu/
内核可以直接用物理机上编译好的内核
尝试:
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw -append "root=/dev/vda1" -kernel "$HOME/linux/arch/x86_64/boot/bzImage"
路径的写法是对的(可以输入一个错误路径对比情况),但是无法开机
错误的提示:Kernel panic - not syncing : vfs : unable to mount root fs on unknown-block(0,0)
尝试这个语句 sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw -kernel "$HOME/linux/arch/x86_64/boot/bzImage"
出现相同的错误 :Kernel panic - not syncing : vfs : unable to mount root fs on unknown-block(0,0)
怀疑是 -append "root=/dev/vda1" 的问题
“/dev/vda1”是什么?
暂不解决
决定从物理机传输内核文件到虚拟机 使用共享文件夹法
sudo dd if=/dev/zero of=/opt/share.img bs=1M count=20000
sudo mkfs.ext4 /opt/share.img
sudo mkdir /tmp/share
sudo mount -o loop /opt/share.img /tmp/share
使用 umount可以卸载硬盘 (sudo umount /opt/share.img)
启动虚拟机 带上参数 -hdc /opt/share.img
即 sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw -hdc /opt/share.img
然后在物理机拷贝内核文件到共享文件夹
sudo cp -r /home/niko/linux/. /tmp/share/linux
打开虚拟机
df -h 查看挂在点,然后使用cd 命令进入相关挂在点位置,
最后进入内核文件夹
sudo apt-get update
sudo apt install make
sudo apt install gcc
。。。
make module_install
出错 CONFIG_X86_X32 enabled but no binutils support
没有规则可制作目标 module_install 停止
改为 sudo make module_install 后 仍有错误: 没有规则可制作目标 module_install 停止
sudo cp -r /home/niko/linux/. /tmp/share/linux
移动了文件夹位置也毫无变化,与位置无关系
决定在物理机进行这一步 make module_install 然后重新移动文件
物理机进行这一步出现完全相同的错误
没有规则可制作目标 module_install 停止
No rule to make target `module_install'. Stop
发现问题了!!!是 make modules_install 而不是 make module_install
重新进入虚拟机,进入linux文件夹 输入 sudo make modules_install install
成功安装内核
挂在ocssd 硬盘进入虚拟机
sudo $HOME/qemu-nvme/bin/qemu-system-x86_64 -m 4G -enable-kvm ubuntu.raw -hdc /opt/share.img \
-drive file=ocssd_backend.img,id=myocssd,format=raw,if=none \
-device nvme,drive=myocssd,serial=deadbeef,lnum_pu=4,lstrict=1,meta=16,mc=3
进入系统黑屏,经过很久后 成功开机 但是电脑上 并没有显示 8g 的 ocssd设备
在虚拟机安装 sudo apt-get install nvme-cli
输入 sudo nvme lnvm list 会显示 nvme0n1 gennvm (0,1,0)
说明已经成功载入 OCSSD 了!!
安装 pblk : sudo nvme lnvm create -d nvme0n1 --lun-begin=0 --lun-end=3 -n mydevice -t pblk
在虚拟机中装 liblightnvm 出现的错误 和上面在物理the same
尝试装spdk by 官方教程 http://lightnvm.io/liblightnvm/backends/nvm_be_spdk.html
make -j $(nproc) 出错
from vhost_user.c:52:/usr/lib/gcc/x86_64-linux-gnu/7/include/tmmintrin.h:185:1:error:inlining failed in call to always_inline '_mm_alignr_epi8' : target specific option mismatch _mm_alignr_epi8(__m128i__x,...)
In file included
或许不需要装SPDK!
那么测试一下liblightnvm是否已经可用
不可用
VNC 的页面刷新变得很慢,什么导致的?怎么改变
重新建立一个新的虚拟机 ubuntu2.raw 然后对比看看是否又这个问题
删除 ubuntu.raw : sudo rm ubuntu.raw
重建模拟器后 解决了刷新问题
liblightnvm hello.c测试后依然不可用
nvm_dev_open: Function not implemented
尝试 make debug_on configure / make / sudo make install
仍然错误 nvm_dev_open: Function not implemented