FS技术总结

技术总结

    • 1. 单机FIO测试
      • 1.1 配置FS环境
      • 1.2 配置 Linux NVMe over Fabrics 主机
      • 1.3 FIO通过配置文件运行
      • 1.4 双机+双fio测试
      • 1.5 fio测试
    • 2. 优化代码
      • 2.1 程序运行细节
    • 3. 性能测试
      • 3.1 spdk启动
      • 3.2 bdev设备
      • 3.3 互相连接
      • 3.4 FS启动
      • 3.5 映射卷,导入spdk
      • 3.6 虚拟主机

1. 单机FIO测试

1.1 配置FS环境

略~

1.2 配置 Linux NVMe over Fabrics 主机

安装nvme可通过 yum search nvme 找到对应的nvme版本,然后 yum install nvme-cli.*
Discovery: nvme discover -t tcp -a 192.168.10.194 -s 4420
Connect: nvme connect -t tcp -n "nqn.2016-06.io.spdk:cnode1" -a 192.168.10.194 -s 4420
Disconnect: nvme disconnect -n "nqn.2016-06.io.spdk:cnode1"
下面显示了用于加载驱动程序nvme-tcp的命令 modprobe nvme-tcp

1.3 FIO通过配置文件运行

除了命令行直接执行命令外,也可以通过写配置到 xxx.fio文件中,每次只用修改配置即可,使用更方便些,执行方式为 fio xxx.fio
比如测试10.168.1.194控制器的FIO,那就将偶数编号的卷写入xxx.fio文件中。
卷的编号 nvme list

# fio配置文件举例
[global]
bs=512		# 单次io的块文件大小
ioengine=libaio		# Linux本地异步I/O,libaio工作的时候需要文件direct方式打开
userspace_reap		# 提高异步IO收割的速度
rw=randrw		# 测试随机写和读的I/O
rwmixwrite=20		# 在混合读写的模式下,写占20%
time_based
runtime=180		# 基本单位秒
direct=1		# 如果为真,则使用非缓冲 I/O
group_reporting		# 关于显示结果的,汇总每个进程的信息
randrepeat=0
norandommap
ramp_time=6
iodepth=16		# 针对文件保持运行的 I/O 单元数。
iodepth_batch=8		# 一次提交的 I/O 数量
iodepth_low=8		# 指示何时再次开始填充队列的低水位线
iodepth_batch_complete=8		# 这定义了一次检索多少个 IO
exitall
[test]
filename=/dev/nvdisk0		# 测试文件名称,通常选择需要测试的盘的data目录
numjobs=1

1.4 双机+双fio测试

tips:

  • 每次操作前首先将/opt/leadstor/lsfs/目录下的lsfstool、afa_tgt文件备份。
  • 在3.75上执行ipmitool -I lanplus -H 192.168.1.127 -U ADMIN -P ADMIN chassis power on/off/cycle可以关掉125的机器(或者shutdown)
  • 192.168.1.127是192.168.1.125的管理地址

客户端连接服务器(双机模式)之后,每一步连接之后创执行 nvme list 查看对应的映射盘号,不然后续两个重复的无法分辨;或者全部连接之后,执行 nvme list-subsys查看详细信息。在这里插入图片描述在这里插入图片描述
查看连接的nvme状态
FS技术总结_第1张图片
可以看到最下面四行即为我们连接的卷组映射,/dev/nvme24n1和/dev/nvme26n1、/dev/nvme25n1和/dev/nvme27n1是重复的,执行双机双fio测试就要将四个卷组映射挑选出两个(/dev/nvme25n1、/dev/nvme26n1)执行。

  • 遇到问题
    • 运行错误显示fio: looks like your file system does not support direct=1/buffered=0;改为direct=0
    • 设备没有空余空间fio: io_u error on file /dev/nvme25n1: No space left on device: write offset=16849829888, buflen=32768size改为5GB
    • 上一条是因为NVMF未启动导致写测试并没有真正写到磁盘里,因此先删除dev里面生成的文件(Linux特性,将磁盘读写当成文件,所以没有磁盘设备时会新建一个文件)
    • 客户端连接、测试之后,并没有及时关闭连接造成客户端崩溃;及时nvme disconnect-all
    • 关闭客户端shutdown,在192.1683.75上执行ipmitool -I lanplus -H 192.168.1.127 -U ADMIN -P ADMIN chassis power on/off/cycle可以关掉125的机器
    • 第二天显示fs系统创建异常;在LSMC停止的情况重启数据库
      • pcsd LSMC
      • /opt/leadstor/lsmc/bin/db_setup.py reset
      • pcse LSMC
      • tl #实时监控fs启动

1.5 fio测试

fio测试写验证(注意size不超过卷的大小)配置文件

rw=write
verify=crc32c
verify_fatal=1
verify_dump=1
verify_backlog=1

vim配置,其他见链接

<1> zf(Fold creation)–创建折叠(注意在.vimrc中设置set foldmethod=marker)
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。

zr 打开被折叠的代码
zm 折叠打开的代码

zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zE 除去 (Eliminate) 窗口里“所有”的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。

2. 优化代码

2.1 程序运行细节

检查代码内存泄漏:

cp /root/workspace/afa-spdk/module/bdev/lsfsvol/lib_ddn_test.c /root/workspace/lsfs-main/test/devtest
cd /root/workspace/lsfs-main/test/devtest
make test

运行asan

LD_PRELOAD="/lib64/libasan.so.5" ./lib_ddn_test

gdb --args ./afa_tgt
set exec-wrapper env LD_PRELOAD=/lib64/libasan.so.5

make test_asan
/root/workspace/lsfs-main/build/test_asan/devtest

3. 性能测试

3.1 spdk启动

运行gdblsfs.sh

#! /bin/bash
#清理环境
echo 0 > /proc/sys/vm/nr_hugepages
echo 0 > /proc/sys/vm/nr_hugepages

#重置硬盘
cd /root/sqh/
./hugepage.sh
./lsfstool Create -e 2
#./cp_dump -e
#设置 数据库 0 0 1 0代表node0状态0,node1状态0(启动)
#redis-cli -p 6379 hmset node 0 0 1 3
redis-cli -p 6379 hmset node 0 0 1 0
redis-cli -p 6379 keys volume*|xargs redis-cli -p 6379 DEL
redis-cli -p 6379 keys snapshot*|xargs redis-cli -p 6379 DEL
redis-cli -p 6379 keys fs_gns_sync*|xargs redis-cli -p 6379 DEL
redis-cli -p 6379 keys fs_sr*|xargs redis-cli -p 6379 DEL

redis-cli -p 6379 hmset fs_js_recovery_sync:0 idBlk0 -2 idBlkTail0 -2 idBlkFree0 -2 idBlkRem0 -2 dataBlk0 -2 dataBlkTail0 -2 dataBlkFree0 -2 dataBlkRem0 -2 idHeader0 -2 idBlk1 -2 idBlkTail1 -2 idBlkFree1 -2 idBlkRem1 -2 dataBlk1 -2 dataBlkTail1 -2 dataBlkFree1 -2 dataBlkRem1 -2 idHeader1 -2
redis-cli -p 6379 hmset fs_js_recovery_sync:1 idBlk0 -2 idBlkTail0 -2 idBlkFree0 -2 idBlkRem0 -2 dataBlk0 -2 dataBlkTail0 -2 dataBlkFree0 -2 dataBlkRem0 -2 idHeader0 -2 idBlk1 -2 idBlkTail1 -2 idBlkFree1 -2 idBlkRem1 -2 dataBlk1 -2 dataBlkTail1 -2 dataBlkFree1 -2 dataBlkRem1 -2 idHeader1 -2
# 初始化卷
for ((i=1;i<33;++i))
do
    redis-cli -p 6379 hmset volume:$i name "vol$i" size 53687091200  raid 2 id $i status 1 origin_vol_id -1 origin_snap_id -1 compression 0 block_len 512 mirror 0
done

#gdb --args $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.iscsi -m 0xFF00000000;
#gdb --args $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.empty -r 10.0.0.110:8888 -m 0x007F000000000000;
#gdb --args $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.empty -r 10.0.0.110:8888 -m 0x0FFF000000000000;
gdb --args $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.empty -r 10.0.0.110:8888 -m 0x0FFF000000000000;
#gdb --args $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.empty -r 10.0.0.110:8888 -m 0x0300000000000000;
#LD_PRELOAD="/lib64/libasan.so.5" ASAN_OPTIONS=verbosity=2:abort_on_error=1:disable_coredump=0:log_path=/var/log/asan_log $(pwd)/afa_tgt -c $(pwd)/spdk_config.json.empty -r 10.0.0.110:8888 -m 0x0FFF000000000000;

3.2 bdev设备

/root/sqh/s1.sh

3.3 互相连接

/root/sqh/s2.sh194和195服务器上的同步卷互相连接,以便进行同步操作
单机不不需要互相连接

3.4 FS启动

/root/sqh/s3.sh
类似的,单机运行FS启动不需要数据同步这一步

#!/usr/bin/bash
# 数据同步
./rpc.py -s 10.0.0.110 -p 8888 lsfs_setup_js_virtual_disk -d1 /dev/nvme22n1 -d2 /dev/nvme23n1 -d3 /dev/nvme24n1 -d4 /dev/nvme25n1
#./rpc.py -s 10.0.0.110 -p 8888 lsfs_setup_js_virtual_disk -d1 /dev/nvme22n1 -d2 /dev/nvme23n1 -d3 /dev/nvme24n1 -d4 /dev/nvme25n1 -d5 /dev/nvme26n1 -d6 /dev/nvme27n1 -d7 /dev/nvme28n1 -d8 /dev/nvme29n1
#./rpc.py -s 10.0.0.110 -p 8888 lsfs_start -d1 /dev/nvme22n1 -d2 /dev/nvme23n1 -d3 /dev/nvme24n1 -d4 /dev/nvme25n1
#./rpc.py -s 10.0.0.110 -p 8888 lsfs_start -d1 /dev/nvme22n1 -d2 /dev/nvme23n1
# FS系统启动
./rpc.py -s 10.0.0.110 -p 8888 lsfs_start

3.5 映射卷,导入spdk

blk_lsfs_vm_tgt.sh

3.6 虚拟主机

/var/nas/orgin_vm_start.sh & 后面跟&可以在后台运行,同时还要配置ip地址(ipconfig查看本机ip地址)

#!/usr/bin/env bash

source /opt/leadstor/lsmc/bin/conf/common.sh

img_path=`pwd`
qemu_path=qemu-system-x86_64
cpu_num=6
memory_size=8G

start_vm() {
    lsmc_sh_log "Start nas qemu vm"
    taskset -c 16-21 ${qemu_path} \
    --enable-kvm -cpu host -smp ${cpu_num} -m ${memory_size} -object memory-backend-file,id=mem0,size=${memory_size},mem-path=/dev/hugepages,share=on -numa node,memdev=mem0 \
    -drive file=${img_path}/centos.img,if=none,id=disk -device ide-hd,drive=disk,bootindex=0 \
    -netdev tap,ifname=tap1,id=mynet1,vhost=on,script=no,downscript=no -device virtio-net-pci,netdev=mynet1,id=b1 \
    -monitor telnet:127.0.0.1:9977,server,nowait
}

# Start here
main() {
    # 设置为本机地址
    export DISPLAY="192.168.2.183:0.0"
    start_vm
}
main

lsblk查看194服务器上连接的卷,!tel打开qemu,然后配置vhost

chardev-add socket,id=spdk_vhost_blk1,path=/root/sqh/vhost.11
device_add vhost-user-blk-pci,id=blk1,chardev=spdk_vhost_blk1,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk2,path=/root/sqh/vhost.12
device_add vhost-user-blk-pci,id=blk2,chardev=spdk_vhost_blk2,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk3,path=/root/sqh/vhost.13
device_add vhost-user-blk-pci,id=blk3,chardev=spdk_vhost_blk3,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk4,path=/root/sqh/vhost.14
device_add vhost-user-blk-pci,id=blk4,chardev=spdk_vhost_blk4,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk5,path=/root/sqh/vhost.15
device_add vhost-user-blk-pci,id=blk5,chardev=spdk_vhost_blk5,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk6,path=/root/sqh/vhost.16
device_add vhost-user-blk-pci,id=blk6,chardev=spdk_vhost_blk6,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk7,path=/root/sqh/vhost.17
device_add vhost-user-blk-pci,id=blk7,chardev=spdk_vhost_blk7,num-queues=2,queue-size=1024

chardev-add socket,id=spdk_vhost_blk8,path=/root/sqh/vhost.18
device_add vhost-user-blk-pci,id=blk8,chardev=spdk_vhost_blk8,num-queues=2,queue-size=1024

之后执行fio文件,记录ddn性能测试的数据,例如ipos。最后关闭虚拟主机shutdown now

你可能感兴趣的:(linux,服务器,网络)