NAND Flash芯片是构成SSD的基本存储单元,NAND Flash芯片工艺的发展、结构的变化将会推动整个闪存存储产业的高速发展。在设计闪存存储系统的时候,特别是在设计NAND Flash控制器、SSD盘或者卡的时候,都需要深入的了解NAND Flash的操作方法、接口命令及其时序。一个NAND Flash芯片虽然非常小,采用LGA或者TSOP的封装形式,但是,其内部结构还是非常复杂的。特别是随着存储密度的不断提高,NAND Flash内部抽象的概念也越来越多,例如Flash颗粒、Device、Die、Plane、Block和Page。颗粒就是我们通常所看到的一个基本芯片封装颗粒;每个颗粒可以封装多个Device,每个Device可以看成是一个独立的Chip,拥有独立的控制、数据信号线;每个Device可以由多个Die构成,多个Die之间内部有独立的操作寄存器、状态指示信号,对外的信号线是共享的;一个Die又可以分成多个Plane,每个Plane拥有独立的数据寄存器组,可以在一定情况下对多个Plane进行并发操作;一个Plane可以分成若干个Block;每个Block又是一个独立的数据块擦除单元;一个Block最后又被分成很多个Page页,每个Page页是读写操作的基本单元。
以镁光的Flash芯片为例,MT29F32G芯片由一个Die构成,其中包括两个Plane;MT29F64G芯片由两个Die构成,并且这两个Die分别归属为两个Device,每个Die包括两个Plane。MT29F32G和MT29F64G芯片的Die基本单元结构可以描述如下:
对于MT29F32G和MT29F64G芯片的地址信息可以定义如下表:
对于镁光的MT29F128G芯片而言,由于存储密度提升了,所以整个芯片由两个Device构成,每个Device包括两个Die,每个Die容纳了两个Plane。MT29F128G芯片内部的基本存储单元Device的结构描述如下:
MT29F128G的地址信息定义如下表:
在了解到NAND Flash的内部结构之后,我们需要思考从软件层面如何利用好NAND Flash的内部结构,从而提升整体的IO性能。
Plane单元拥有独立的数据寄存器,是否可以并发Plane操作从而提升IO性能呢?以MT29F128G芯片为例,每个Die可以被分成2个物理Plane。每个Plane包含一个字节的数据寄存器,一个字节的数据Cache寄存器,以及一个由4K页构成的Block Array。由于两个Plane的数据寄存器是物理上独立的,因此,这两个Plane可以同时执行Program、Read和Erase操作,通过这种方式可以提升NAND Flash的系统IO性能。两个Plane同时读数据的时序图如下所示:
从上面的时序图可以看出,两个Plane之间的并发操作不是那么随意的。当需要从两个Plane同时读取数据的时候,首先加载第一个Plane的地址信息,然后加载第二个Plane的地址信息,当两个地址信息都加载完毕之后,发出结束命令30H。随后整个Die进入忙状态,R/B#信号置低。在Die处于忙状态时,无法对其进行任何操作,在这个阶段,数据从NAND Flash介质中加载到两个Plane的寄存器中。当R/B#信号恢复之后,可以读取两个Plane中的数据。值得注意的是,第二个Plane中的数据读取需要06H-E0H命令的支持。从这点上来看,由于两个Plane只是独立了数据寄存器,共享了操作寄存器,所以,不能很好的做到非常随意的数据并发。
两个Plane的并发写操作时序如下图所示:
<
一、openvpn与pptp的抉择
PPTP
点对点隧道协议(pptp)是一种实现虚拟专用网络的方法。pptp使用用于封装ppp数据包的tcp及GRE隧道控制通道。
OpenVPN是一免费开源软件,以路由器或桥接配置和远程访问设备方式实现虚拟专用网络(vpn)创建安全的点 对点或站对站连接的解决方案。它使用SSL / TLS安全加密,具有穿越网络地址转换(NATs)和防火墙的功能。
PPTP与OpenVPN之比较和抉择?
在pptp和openvpn二者之间做出选择的一个重要考虑因素,也是我们无法控制的因素,就是有时互联网服务供应商会阻止 PPTP连接。次情况下我们无计可施,只能选择使用openvpn。 pptp具有一些独 特优势,但此刻用openvpn会是不错的选择。
二、部署openvpn
本次部署openvpn服务器,因为使用了最新的openvpn2.3.4,而这个包里面没有包含最重要的证书制作部分:easy-rsa
openvpn官网也给出明确说明:Starting with openvpn-2.3_alpha2easy-rsais no longer part of the OpenVPN source or binary packages
所以,我们需要事先下载好easyrsa,可以到GitHub上进行下载,配置过程将在下面第3步进行,本次部署使用了easy-rsa3,与easy-rsa2.0的操作完全不同,网上其它关于easy-rsa2.0的教程不适合本次部署
1、安装lzo
lzo是致力于解压速度的一种数据压缩算法
[root@vpn ~]# tar xf lzo-2.08.tar.gz [root@vpn ~]# cd lzo-2.08 [root@vpn lzo-2.08]# ./configure && make && make install
2、安装openvpn
[root@vpn ~]# tar xf openvpn-2.3.4.tar.gz [root@vpn ~]# cd openvpn-2.3.4 [root@vpn openvpn-2.3.4]# ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib [root@vpn openvpn-2.3.4]# make && make install [root@vpn openvpn-2.3.4]# [root@vpn openvpn-2.3.4]# which openvpn /usr/local/sbin/openvpn #看到这里,说明安装openvpn成功
3、配置easyrsa服务端
openvpn-2.3.4软件包不包含证书(ca证书,服务端证书,客户端证书)制作工具,所以还需要单独下载easy-rsa,最新的为easy-rsa3
Starting with openvpn-2.3_alpha2easy-rsais no longer part of the OpenVPN source or binary packages(来源openvpn官网)
[root@vpn ~]# unzip easy-rsa-master.zip [root@vpn ~]# mv easy-rsa-master easy-rsa [root@vpn ~]# cp -R easy-rsa/ openvpn-2.3.4/ [root@vpn ~]# cd openvpn-2.3.4/easy-rsa/easyrsa3/ [root@vpn easyrsa3]# cp vars.example vars [root@vpn easyrsa3]# vim vars set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "Beijing" set_var EASYRSA_REQ_CITY "Beijing" set_var EASYRSA_REQ_ORG "nmshuishui Certificate" set_var EASYRSA_REQ_EMAIL "353025240@qq.com" set_var EASYRSA_REQ_OU "My OpenVPN"
4、创建服务端证书及key
(1)初始化
[root@vpn easyrsa3]# ls easyrsa openssl-1.0.cnf vars vars.example x509-types [root@vpn easyrsa3]# [root@vpn easyrsa3]# ./easyrsa init-pki Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki
(2)创建根证书
[root@vpn easyrsa3]# ./easyrsa build-ca Note: using Easy-RSA configuration from: ./vars Generating a 2048 bit RSA private key .............................................+++ ........+++ writing new private key to '/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key' Enter PEM pass phrase: #输入密码,此密码用途证书签名 Verifying - Enter PEM pass phrase: #确认密码 ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:nmshuishui #输入一个Common Name CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/ca.crt
(3)创建服务器端证书
[root@vpn easyrsa3]# ./easyrsa gen-req server nopass Note: using Easy-RSA configuration from: ./vars Generating a 2048 bit RSA private key ................................+++ ......+++ writing new private key to '/root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [server]:nmshuishui-BJ #该Common Name一定不要与创建根证书时的 #Common Name一样,这是血与泪的教训 Keypair and certificate request completed. Your files are: req: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/reqs/server.req key: /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/server.key
(4)签约服务器端证书
[root@vpn easyrsa3]# ./easyrsa sign server server Note: using Easy-RSA configuration from: ./vars You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = nmshuishui Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes #输入yes继续 Using configuration from /root/openvpn-2.3.4/easy-rsa/easyrsa3/openssl-1.0.cnf Enter pass phrase for /root/openvpn-2.3.4/easy-rsa/easyrsa3/pki/private/ca.key: #输入刚才创建根证书时的密码 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as fo
没有评论:
发表评论