如何设置RAID条带宽度和条带深度(纯文字,不喜勿进)
在RAID中可能比较懂,但是深入一点,就RAID0而言,影响其速度的因素有哪些呢?希望这篇文章可以帮助大家!
条带(strip)是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法。简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法。 许多情况下,这是通过硬件控制器来完成的。
当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS)和数据传输率(每秒传输的数据量,TPS)有限制。当达到这些限制时,后面需要访问磁盘的进程就需要等待,这时就是所谓的磁盘冲突。避免磁盘冲突是优化 I/O 性能的一个重要目标,而 I/O 性能的优化与其他资源(如CPU和内存)的优化有着很大的区别 ,I/O 优化最有效的手段是将 I/O 最大限度的进行平衡。
条带化技术 就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。由于条带化在 I/O 性能问题上的优越表现,以致于在应用系统所在的计算环境中的多个层次或平台都涉及到了条带化的技术,如操作系统和存储系统这两个层次中都可能使用条带化技术。
条带化后,条带卷所能提供的速度比单个盘所能提供的速度要快很多,由于现在存储技术成熟,大多数系统都采用条带化来实现系统的I/O负载分担,如果OS有LVM软件或者硬件条带设备,决定因素是条带深度(stripe depth)和条带宽度(stripe width)。
条带深度:指的是条带的大小,也叫条带大小。有时也被叫做block size, chunk size, stripe length 或者 granularity。 这个参数指的是写在每块磁盘上的条带数据块的大小。RAID的数据块大小一般在2KB到512KB之间(或者更大),其数值是2的次方,即2KB,4KB,8KB,16KB这样。
条带大小对性能的影响比条带宽度难以量化的多。
减小条带大小: 由于条带大小减小了,则文件被分成了更多个,更小的数据块。这些数据块会被分散到更多的硬盘上存储,因此提高了传输的性能,但是由于要多次寻找不同的数据块,磁盘定位的性能就下降了。
增加条带大小: 与减小条带大小相反,会降低传输性能,提高定位性能。
根据上边的论述,我们会发现根据不同的应用类型,不同的性能需求,不同驱动器的不同特点(如SSD硬盘),不存在一个普遍适用的"最佳条带大小"。所以这也是存储厂家,文件系统编写者允许我们自己定义条带大小的原因。
条带宽度:是指同时可以并发读或写的条带数量。 这个数量等于RAID中的物理硬盘数量。例如一个经过条带化的,具有4块物理硬盘的阵列的条带宽度就是4。增加条带宽度,可以增加阵列的读写性能。道理很明显,增加更多的硬盘,也就增加了可以同时并发读或写的条带数量。在其他条件一样的前提下,一个由8块18G硬盘组成的阵列相比一个由4块36G硬盘组成的阵列具有更高的传输性能。
在操作系统的层次中,我们可以使用软件条带(如 LVM 中 LV 的条带来实现条带化技术)或硬件条带(如各种 RAID)。在存储系统层次中,目前市场上绝大部分产品都提供了各种各样的条带技术(如各种 RAID)。
条带化的设置
当使用 LVM 或者硬件条带化时,决定条带化效果的因素是条带深度(stripe depth)和条带宽度(stripe width):
条带深度指的是条带块的大小,也叫条带单元;
条带宽度指的是条带深度的产量或者一个条带分布的驱动数;
需要根据系统的 I/O 要求来合理的选择这些设置。对于数据库系统来说,比较合理的条带深度是从 256K 到 1M 。下面分析一下条带深度和条带宽度的影响因素。
条带深度
为了提高 I/O 效率,一次逻辑 I/O 请求转化成物理 I/O 请求后,应该让这些物理 I/O 分布到最多的物理磁盘上去,也就是每个物理磁盘处理的物理 I/O 最少,最好只有一次 , 因而影响条带的一个重要因素就是一次逻辑 I/O 请求的大小。
此外,系统中 I/O 的并发度不同我们对条带的配置要求也不同。例如,在高并发度且逻辑 I/O 请求的大小都比较小的情况下,我们希望一块磁盘能同时响应多个 I/O 请求;而在那些存在大的逻辑 I/O 请求的低并发度系统中,我们可能就需要多块磁盘同时响应一个 I/O 请求。无论是一个磁盘还是多个磁盘响应 I/O 请求,我们的一个原则是让一次逻辑 I/O 能被物理设备一次处理完成。
条带宽度
正如我们前面所述,无论是一个还是多个磁盘响应一个逻辑 I/O,我们都希望物理设备只处理一次 I/O 。因而在确定了条带深度的基础上,我们需要保证条带宽度 >= I/O 请求的大小 / 条带深度。这样就能最大程度的保证 I/O 请求的并发处理能力了。
此外,考虑到以后系统容量的扩充,我们也需要规划好条带宽度。
在 DB2 中合理规划和设置条带相关参数
下面先看下影响 I/O 性能 DB2 数据库的相关参数:
页大小(page size):DB2 中的数据页大小,也决定了 DB2 一次单个 I/O 请求中的数据块的大小;
阅读大小(prefetch size):在预取读时,一次读取数据块的数量不能大于操作系统的最大 I/O 大小(oracle 中是参数 block size);
排序堆(sortheap)和排序堆阈值(sheapthres) :内存中 sort 区域的大小,也决定了并发排序操作时的 I/O 大小;
其中,前面两个是最关键的两个参数。
DB2 的数据页大小是在创建数据库的时候指定的,并且不能被动态的修改。它决定了在 DB2 中所有的表空间默认的页大小。但是我们在创建每个表空间的时候还可以根据数据存储的需要单独指定页的大小。
在 OLTP 系统中,会存在大量小的并发的 I/O 请求。这时就需要考虑选择比较大的条带深度。使条带深度大于 I/O 大小就称为粗粒度条带(Coarse Grain Striping)。在高并行度系统中,条带深度为(n * page size),其中 n 为大于 1 的整数。通过粗粒度条带能实现最大的 I/O 吞吐量(一次物理 I/O 可以同时响应多个并发的逻辑 I/O)。大的条带深度能够使像全表扫描那样的预取读操作由一个磁盘驱动来响应,并提高预取读操作的性能。在 OLTP 系统中,为了避免一个逻辑 I/O 请求被多个物理 I/O 操作完成,条带深度就需要设置为两倍或者两倍以上于 DB2 页大小。例如,如果条带深度是物理 I/O 大小的 N 倍,对于大量并发 I/O 请求,我们可以保证最少有(N-1)/ N 的请求是由一块磁盘来完成。
在低并发度的 DSS 系统中,由于 I/O 请求一般是序列化的,为了避免出现 I/O 集中的热点磁盘,我们需要避免逻辑 I/O 只有一块磁盘处理。这时粗粒度条带就不适合了。我们应该选择小的条带深度,使一个逻辑 I/O 分布到多个磁盘上,从而实现 I/O 的负载均衡。这就叫细粒度条带。条带深度的大小必须为(n * page size),其中 n 为小于预取参数(prefetch size)大小的整数。
预取大小也是对条带化有影响的一个重要参数,它决定了 DB2 异步 I/O 的基本单位。首先我们要知道 DB2 的预取(prefetching)I/O 机制,在数据库普遍存在着大量、连续的 I/O 时候,预取可以极大的提高数据库数据读取的 I/O 性能(例如 DSS 系统)。
海思3531D环境搭建
前面工作中,有一段时间,再做海思相关的项目,hisi3531D是一款广泛应用在音视频领域的芯片,其解码的速度和效率,被业内称赞。本文主要是讲解海思3531D在linux系统环境搭建,包括u-boot、linux内核、根文件系统以及少写,以及如何实现网络环境开发。
1.内核编译
内核源代码中除了系统运行所必须的核心代码之外,还包含了各种各样的外部设备驱动、文件系统,以及一些跟某种特性相关的代码。而这些代码,在我们的业务环境中,并不都是必须的。我们将这些不必要的内容,通过配置选项进行筛选。进入内核源代码目录,运行如下命令,打开内核配置菜单,并对菜单上的选项进行配置:
cp arch/arm/configs/hi35xx_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig
编译内核时需要在 make 后添加两个参数:ARCH=arm CROSS_COMPILE=arm-hisiXXXlinux-,其中 CROSS_COMPILE 表示工具链。文档中统一以 CROSS_COMPILE=arm-hisiXXXlinux-来表示两种情况。
Hi35xx_V100R001C01SPCxxx 对应 uclibc,使用 uclibc 工具链时,CROSS_COMPILE= armhisiv5x0-linux-。
Hi35xx_V100R001C02SPCxxx 对应 glibc,使用 glibc 工具链时,CROSS_COMPILE=armhisiv6x0-linux-。
2.首次安装Hi3531D的SDK
在"Hi3531DV100_V100R001***/01.software/board"目录下,找到一个Hi3531DV100_SDK_Vx.x.x.x.tgz 的文件,该文件就是Hi3531DV100的软件开发包。使用命令:tar -zxf Hi3531D_SDK_Vx.x.x.x.tgz ,解压缩该文件,可以得到一个Hi3531D_SDK_Vx.x.x.x目录。
3.展开SDK包内容
返回Hi3531D_SDK_Vx.x.x.x目录,运行./sdk.unpack (请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
4.在linux服务器上安装交叉编译器
安装glibc交叉编译器(注意,需要有sudo权限或者root权限):获取arm-hisiv600-linux.tgz文件,使用命令:tar -zxf arm-hisiv600-linux.tgz 解压文件,进入arm-hisiv600-linux 目录,运行chmod +x arm-hisiv600-linux.install,然后运行./arm-hisiv600-linux.install 即可。执行source /etc/profile , 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆。
4.编译整个osdrv目录
下载linux-3.18.20.tar.gz (或者linux-3.18.20.tar.xz)到osdrv/opensource/kernel目录下
make OSDRV_CROSS=arm-hisiv500-linux PCI_MODE=XXX FLASH_TYPE=XXX all
清除整个osdrv目录的编译文件:make OSDRV_CROSS=arm-hisiv500-linux clean
彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:make OSDRV_CROSS=arm-hisiv500-linux distclean
单独编译kernel:
注意:单独编译内核之前请先阅读osdrv/opensource/kernel下的readme_cn.txt说明。也可以参考步骤1
待进入内核源代码目录后,执行以下操作
cp arch/arm/configs/hi3531d_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
如果编译过程中出现错误,按顺序执行以下命令:
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- clean
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
6.编译uboot
待进入boot源代码目录后,执行以下操作
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- hi3531d_xxx_config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux-
将生成的 u-boot.bin 复制到 osdrv/tools/pc/uboot_tools/ 目录./mkboot.sh reg_info_hi3531d.bin u-boot_hi3531d.bin。将生成可用的 u-boot_hi3531d.bin 镜像文件。
7.制作文件系统镜像
在osdrv/pub/中有已经编译好的文件系统,因此无需再重复编译文件系统,只需要根据单板上flash的规格型号制作文件系统镜像即可。SPI Nor Flash使用jffs2格式的镜像,制作jffs2镜像时,需要用到SPI NorFlash的块大小。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkfs.jffs2工具,根据打印信息填写相关参数。下面以块大小为64KB为例:
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2
Nand Flash和SPI Nand Flash使用yaffs2格式的镜像,制作yaffs2镜像时,需要用到Nand Flash的pagesize和ecc。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkyaffs2image工具,根据打印信息填写相关参数。示例:
2KB pagesize、4bit ecc命令格式为:如果制作Nand的镜像,则使用mkyaffs2image610工具:
osdrv/pub/bin/pc/mkyaffs2image610 osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
如果制作SPI Nand的镜像,则使用mkyaffs2image100工具:
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
或者
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_gclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
说明:
当FLASH_TYPE=spi时,生成的mkyaffs2image工具是mkyaffs2image100;
当FLASH_TYPE=nand时,生成的mkyaffs2image工具是mkyaffs2image610;
Nand Flash使用UBI文件系统,在osdrv/tools/pc/ubi_sh下提供mkubiimg.sh工具用于制作UBI文件系统,需要用到Nand
Flash的pagesize、blocksize和UBIFS分区的大小。
以2KB pagesize, 128KB blocksize和UBI文件系统分区大小32MB为例:
mkubiimg.sh hi3531d 2k 128k osdrv/pub/rootfs 32M osdrv/pub/bin/pc
osdrv/pub/rootfs是根文件系统文件夹目录
osdrv/pub/bin/pc是制作UBI文件系统镜像的工具目录
生成的rootfs_hi3531d_2k_128k_32M.ubifs,就是最终用于烧写的UBI文件系统镜像。
5.安装、升级DEMO板开发环境
Hi3531DV100的DEMO板,可以按照以下操作烧写uboot、内核以及文件系统,以下操作均使用网络来更新:
1、如果您拿到的单板没有uboot的话,就需要使用01.software/pc/HiTool进行烧写。更详细的烧写操作步骤及说明,请参见01.software\pc\HiTool目录下的《HiBurn 工具使用指南》。
2、如果您拿到的单板中已经有uboot,可以按照以下步骤使用网口烧写uboot、kernel及rootfs到Flash中。DEMO板默认为从SPI Flash启动。
6.配置tftp服务器
可以使用任意的tftp服务器,将package/image_glibc下的相关文件拷贝到tftp服务器目录下。
7.参数配置
# 单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
setenv serverip xx.xx.xx.xx
setenv ipaddr xx.xx.xx.xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv netmask xx.xx.xx.xx
setenv gatewayip xx.xx.xx.xx
ping serverip,确保网络畅通。
8.烧写镜像文件到SPI Nor Flash
以16M SPI Nor Flash为例。
1)地址空间说明
| 1M | 4M | 11M |
|---------------|---------------|---------------|
| boot | kernel | rootfs |
2)烧写u-boot
sf probe 0
mw.b 42000000 ff 100000
tftp 42000000 u-boot-hi3531d.bin
sf probe 0
sf erase 0 100000
sf write 42000000 0 100000
reset
3)烧写内核
mw.b 42000000 ff 400000
tftp 42000000 uImage_hi3531d
sf probe 0
sf erase 100000 400000
sf write 42000000 100000 400000
4)烧写文件系统
mw.b 42000000 ff b00000
tftp 42000000 rootfs_hi3531d_64k.jffs2
sf probe 0
sf erase 500000 b00000
sf write 42000000 500000 b00000
5)设置启动参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000'
sa
9.如果是NAND Flash则使用如下方法
以64M NAND Flash为例。
1)地址空间说明
| 1M | 4M | 32M | 27M |
|---------------|---------------|---------------|------------------------|
| boot | kernel | rootfs | other |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写u-boot
mw.b 42000000 ff 100000
tftp 42000000 u-boot-hi3531d.bin
nand erase 0 100000
nand write 42000000 0 100000
reset
3)烧写内核
mw.b 42000000 ff 400000
tftp 42000000 uImage_hi3531d
nand erase 100000 400000
nand write 42000000 100000 400000
4)烧写文件系统
mw.b 42000000 ff 2000000
tftp 42000000 rootfs_hi3531d_2k_4bit.yaffs2
nand erase 500000 2000000
nand write.yaffs 42000000 500000 96d200 #注意:96d200为rootfs文件实际大小(16进制)
5)设置启动参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),32M(rootfs),27M(test)'
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
sa
10.启动新系统
reset
11.开启Linux下的网络
# 设置网络
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx;
ifconfig eth0 xx.xx.xx.xx netmask xx.xx.xx.xx;
route add default gw xx.xx.xx.xx
# 然后ping一下其他机器,如无意外,网络将能正常工作。
12.使用NFS文件系统进行开发
# 在开发阶段,推荐使用NFS作为开发环境,可以省去重新制作和烧写根文件系统的工作。挂载NFS文件系统的操作命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.129.70:/home/qin/nfs /mnt
备注:
关于nfs配置参考博客https://blog.csdn.net/s030702614/article/details/4662718
13.进入解码目录测试
sample_vdec测试
支持H264、H265、VDH MP4、JPEG PIP
具有暂停、播放、单帧播放、”a”表示增加码率、d表示”减小”码率;“q”表示具有查询功能、查询解码的帧数等;
H264和H265,MP4表示都是支持1920X1080。JPEG deconding表示有3通道,解码三路图片,参数如下:
显示视频也需要有3路输入,3通道,3路输出。解码也支持PIP,表示画中画,hisi提供的是一共三个图层,一张大图,一张缩放图,缩放图里再叠加一张小图。编码通道需要开启输入才能去编码;否则会有如下的打印信息;
Region可以支持如下的这些功能:
支持画线和图形叠加;
相关问答
我用nero刻系统盘提示 block size 与映像文件大小不一致 怎么...用ImgBurn或酒精试一下!有用(0)回复xune001首先我的承认我曾经由于不会装系统,通过一个J商重装一个系统而被宰了120大洋然后慢慢的由一个刻录菜鸟到如今的略...
内存卡格式化单元大小 有什么用?HPFS(OS/2):支持最大分区2TB,最大文件2GB。EXT2和EXT3(Linux):支持最大分区4TB,最大文件2GB。JFS(AIX):支持最大分区4P(blocksiz....
linux中ll中显示的大小为什么跟du显示的大小不一样呢?ll中占用的总量大小是那里的?那我在详细解释一下:du不是显示文件大小,而是显示文件所占用的block大小,默认linux系统分区的blocksize是4k,也就是说即使文件只有1个字节,也会占用4k.这下...
oakrow主板 block 怎么设置?要设置Oakrow主板的block,首先需要进入主板的BIOS设置界面。在BIOS界面中,找到并选择“Advanced”或类似选项,然后找到“BlockSettings”或“BlockConfig...
10 linux未分区的硬盘空间 Blocksize 块怎么查看?未分区磁盘的blocksize是不确定的,必须分区并挂载(mount)后才能查看。未分区磁盘的blocksize是不确定的,必须分区并挂载(mount)后才能查看。
flac格式等级划分?定义(block、subblock指没有被编码的原始数据;frame、subframe指编码后的数据)Block:一组或多组跨所有声道的采样点(flac采样组数范围16~65535)。Subb...
byblock线宽是多少?BYBLOCK(按块)是一种AutoCAD中的线型属性,它使用特定的块定义来指定线的样式。BYBLOCK不指定具体的线宽,而是由所引用的块定义决定。因此,BYBLOCK线宽可以根...
hdfs中的 block 默认保存多少分?HDFS默认BlockSize64MB,block默认保存3份。HDFS被设计成支持大文件,适用HDFS的是那些需要处理大规模的数据集的应用。这些应用都是只写入数据一次,但却读取...
d类网络可以划分的子网数?辨别IP地址中哪部分为网络地址,哪部分为主机地址,有1和0组成,长32位,全为1的位代表网络号.不是所有的网络都需要子网,因此就引入1个概念:默认子网掩...Classl...
win系统硬盘格式有?windows下主要有FAT16、FAT32、NTFS等,最新格式为exFAT,不同的磁盘格式有不同的特性。FAT格式基本上已经不再使用。linux下的格式为ext系列,ext4,...win...