Virtual OCSSD搭建

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

你可能感兴趣的:(Virtual OCSSD搭建)