精华内容
下载资源
问答
  • QoE的定义影响因素

    2017-09-14 17:36:06
    QoE的定义影响因素

    http://blog.csdn.net/leixiaohua1020/article/details/12405313


    QoE标准的定义,摘自论文《用户体验质量(QoE)的模型与评价方法综述》(林闯,胡杰,孔祥震)


    现有的文献给出了许多关于QoE定义和影响因素的讨论,但是没有形成一个统一的论述.下面我们将在这些文献的基础上,给出一个更为全面的QoE定义,并且对QoE的影响因素进行概括和分析.

    1 QoE的理解与定义
    QoE最初被理解为用户对提供给OSI模型不同层次的QoS机制整体感知的度量.例如在文献中,QoE被定义为:确保通过IP网络平稳传输音频和视频质量的QoS机制的整体性能.因此,可以将QoE理解为在用户角度对QoS机制的评价.之后,国际电信联盟等对QoE的定义进行了扩展,它不再是对QoS机制进行评价,而是对整个服务进行评价.国际电信联盟对QoE的定义为:终端用户对应用或者服务整体的主观可接受程度.文献中,QoE被定义为:从用户角度体验到的一个系统的整体性能.

    分析上述几个定义,可以总结出QoE是一种主观感受,是用户在与服务或者应用交互的过程中,由用户产生的对服务的一种主观感受.因此QoE有两个直接的影响因素:用户和服务.但是用户和服务交互的过程肯定会处在一定的客观环境中,而且客观环境对用户和服务的交互过程具有较大的影响.因此我们有必要在QoE定义中阐明这一因素.

    综上所述,我们将QoE定义为用户在一定的客观环境中对所使用的服务或者业务的整体认可程度.


    2 QoE的影响因素

    QoE的影响因素的研究对于QoE的评价至关重要.因为QoE评价的基本目标就是要从已知或者容易测量的影响因素来预测难以直接测量的QoE.下面,我们先对QoE的影响因素做一个较为全面的讨论.文献[5—7]详细讨论了QoE的影响因素,我们在这些文献的基础上,结合1小节中的讨论,将QoE影响因素分为3个层面:服务层面、环境层面及用户层面,如图所示.


    服务层面的影响因素又包括网络(或者传输)层、应用层及服务层的参数.传输层的参数反映网络传输的状况,如延迟、带宽、丢包率、误码率、抖动等.应用层的参数反映没有经过传输的服务的性能,包含了OSI模型中会话层、表示层、应用层对服务的影响,如IPTV服务中的内容分辨率、编解码类型等.服务层的参数确定了通信的语义、内容、优先级、重要性以及定价,如服务层的配置(内容类型、服务的应用级别)及质量保证.环境层面的影响因素包括自然环境(如光照条件、噪声的大小、环境的固定或移动),人文与社会环境(如社会观念、文化规范)以及服务运行环境(包括软硬件环境)等.用户层面的因素包括用户的期望、体验经历、用户体验时所处的身心状态和自身背景(如年龄、性别、受教育程度、价值观念等).文献对这些影响因素如何相互作用进行了分析和讨论,这里不再赘述.
    展开全文
  • 介绍了接触电阻的形成原理、影响因素及计算接触电阻的经验公式。
  • 本篇解析放大器共模抑制比参数定义与其影响的评估方法,以及结合一个实际 讨论影响电路共模抑制的因素。 在讨论共模抑制比之前,先认识两个专有名词,差模增益Ad、共模增益Ac。 如图2.42(a),差模增益定义为...
  • 根据这里提出的定义和涉及的红外大气透射率的物理过程,分析了决定红外大气能见度的关键大气因素。一般情况下,这些因素是可见光大气能见度、水汽含量、气溶胶类型。建立了红外大气能见度与这些关键参数间的定量关系...
  • 方法基于解释结构模型,结合在建项目现场调查和专家意见,选取25个影响生态复合墙结构质量的主要影响因素,采用邻接矩阵定义,将各影响因素间的相互关系数量化并进行区域化、层次化处理.结果构建出生态复合墙结构...
  • 基于生命周期理论的高校科研团队影响因素探析,张海燕,陈士俊,本文定义了高校科研团队,并分析其特点,在此基础上,基于生命周期理论,重点研究影响高校科研团队成长的主要因素。通过设计高校
  • 影响经济增长的因素要想明白和了解影响经济增长的因素,首先就要知道什么是经济增长.在我所学的知识体系来看,所谓经济增长就是GDP或人均GDP的增加。 查阅相关资料可以知道美国著名经济学家S•库兹涅茨给经济增长下...
  • 综述了护理工作生活质量的定义影响因素及改善策略,为护理管理者了解影响护理工作生活质量的因素,选择有效的措施以提高护理工作生活质量提供参考。
  • 城市居民节能行为的影响因素研究-以江苏省为例,杨冉冉,龙如银,本文界定了节能行为的定义和分类,建立了城市居民节能行为影响因素的理论模型。以江苏省为例,采用问卷调查和数理统计相结合的方
  • 工程实际施工过程中存在着不确定性,这种不确定性是由各种影响因素所决定的。本文在考虑有利因素与不利因素的基础上,对o+bi+cj型网络计划中的i的取值进行了进一步的研究和划分,定义了相应的加法、减法、乘法运算,...
  • 室内空气品质是当今人们普遍关心的话题。从室内空气品质的定义以及影响室内空气品质的因素等方面进行了分析,并就此提出了改善室内空气品质应采取的措施和方法。
  • BMS算法中定义SOC需考虑哪些因素

    万次阅读 2018-10-30 17:12:22
    而关于SOC详尽的解释和定义却不常被考虑,从而导致了SOC算法结果的参考价值大打折扣。显而易见若SOC的概念都是模糊的,又何来精确的SOC呢?因此作者希望通过本文分析几种维度下的SOC值,以及这些SOC值的作用。 粗率...

    SOC(state of charge)算法一直是BMS开发应用的关键技术之一。因此讨论SOC算法的技术文章很常见,企业对SOC估算的高精度也往往是宣传的亮点。而关于SOC详尽的解释和定义却不常被考虑,从而导致了SOC算法结果的参考价值大打折扣。显而易见若SOC的概念都是模糊的,又何来精确的SOC呢?因此作者希望通过本文分析几种维度下的SOC值,以及这些SOC值的作用。

    粗率的说SOC=剩余容量/额定容量,而要准确表述SOC的意义就要对计算的分母——额定容量(Total Capacity)和分子——剩余容量(Residual Capacity)进行更为严谨的定义。以下是某些企业和组织关于SOC的定义:

    (1)美国先进电池联合会(USABC)在其《电动汽车电池实验手册》中定义SOC 为:电池在一定放电倍率下, 剩余电量与相同条件下额定电量(Ah)的比值。

    (2)韩国起亚汽车公司定义SOC为:SOC= 剩余可用能量 / 总的可用能量(Wh)。

    (3)日本本田公司电动汽车EV Plus定义SOC为:SOC = 剩余电量 / (额定电量 - 电量衰减);剩余电量(Ah)= 额定电量 - 净放电量 - 自放电量 - 温度补偿电量。

    SOC算法首要的难点便是针对不同的“功能需求”进行额定容量和剩余容量的定义,同时这两个参数一旦从不同的性质维度、温度维度、电池生命周期维度去观察,则可能计算出不同的SOC值。首先解释什么是“功能需求”。在计算出电池组系统的SOC值后,有多个功能模块将调用SOC值作为其的输入,同时不同的功能模块调用SOC值的需求也不尽相同。大致可以将“功能需求”分为三类:

    1.用户参考需求:

    第一类是最常见的需求,即用户需要对电池系统剩余的可用能量进行评估,从而决策对产品的使用方式。因此用户更为在意的是与运行距离或使用时间对应的SOC关系。

    2.整车控制策略参考需求:

    第二类是整车控制策略需要参考的SOC值,从而对行驶策略进行管理。尤其是混动汽车需要将SOC值始终控制在适合的区域内,从而实现节能减排(SOC不能太高,确保刹车能量能尽可能多的回收),提升性能(SOC不能太低,确保加速过程的大功率输出),提高能量效率(保持在低内阻SOC区间运行),延长电池寿命(保持长期运行浅充浅放)的作用。因此整车控制器更为在意的是功率特性和寿命衰减对应的SOC关系。

    3.电池管理算法参考需求:

    第三类是电池管理算法中需要参考的SOC值,由于电池组系统将随着使用和搁置从BOL状态向EOL状态过渡,而BMS则需要对电池系统全生命周期进行管理。因此电池管理算法更为在意的是在内部有一个基准,使算法在BOL和EOL之间的任一状态找到可以互相等价的SOC关系。类似于工程经济学中利用时间价值模型将不同阶段的资金通过折现率算法(discount rate) 计算,从而进行转化或比较。

    由此可见要满足不同“功能模块”对SOC值的参考需求,SOC值的含义需要更多元,对不同功能输出的SOC值要更精准。接下来我们就需要讨论该从哪几个维度去定义SOC值。

    1.容量性质维度

    进行容量积分运算的时候我们可以根据电荷守恒定律选择以安时(Ah)为单位,也可以根据能量守恒定律选择以瓦时(Wh)为单位。如下图所示,以容量C为X轴,以电压V为Y轴。不同温度下1C放电截止在X轴上的点为当前温度下电池的电量(mAh),而各个放电曲线与X、Y轴形成的面积为当前温度下电池的能量(wh)。从图中可以看出在低温环境下电池电压平台显著下降,因此在低温下即使总电量损失不明显,但总能量将大大降低。因此当SOC值被用于衡量续航的时候,显然用能量(Wh)这个维度表征更加适合。举例:如果用电量(Ah)的维度来计算,将会出现100%至50%的过程比50%至0%所释放的能量(wh)多的情况,用户可能会因此对续航做出过于乐观的判断,导致半路抛锚。这就是第一个要考虑的定义容量性质的维度。

      

    2.温度状态维度

    讨论温度维度之前,首先需要了解温度变化对于电量变化的影响。为了便于理解和想象我提出了一种用于描述电池状态的几何模型。如下图所示:为一个60Ah电池的模型。横坐标为电流(A),纵坐标为时间(S)。因此X=60 (A),Y=3600 (S)与坐标轴一同封闭的面积即是电池的电量60(Ah)。然后运用电流积分运算,就可以基于这个简单的模型计算SOC值,SOC= S2 /(S1 + S2)。

      

    接下去我们来做一个可以完全凭借想象的实验。假设有一颗单体电池A在25℃环境下满电状态容量为60Ah;将其在25℃满充,然后在0℃充分搁置再放空,共放出50Ah。那么请想象:如果将该颗电池A在25℃调整SOC为50%(即剩余容量为30Ah),再将其放置于0℃充分搁置并放空。请问能放出的容量应该是多少?建议大家先不要往下看,先凭借想象力估算一下。

    通常情况下我们可能会推测出以下几种情况。推测A认为60Ah的电池在SOC为50%的情况下可以放出30Ah,即温度对电量没有影响。推测B认为电池在0℃电量衰减至了50Ah,同时初始剩余了30Ah的电量,因此还能放出20Ah。推测C认为电池电量和温度是等比变化关系,满电状态下0℃与25℃比例关系为5:6,则目前50%状态下因保持该比例,则可放出的电量为25Ah。上述三个推测你认为哪一个是正确的呢?我通过实验来回答。

      

    我采用航天LFP8000(mAh)电池进行了温度与电量的关系试验。选取了6颗同批次生产的电池,BOL(25℃)状态下电量约8500mAh。将这6颗电池在常温下调整SOC在四个状态,分别为100%,100%,75%,50%,50%,25%(为了确保试验的有效性,测试方案在100%和50%这两个关键状态上分别都设计了两颗电池便于参照和容错)。然后分别在-5℃,5℃,15℃,25℃,35℃,45℃这六个温度环境下充分搁置后放空,记录放出电量。

    将该试验结果绘制成曲线图(如下)。从图中可见除35℃以外,其他温度环境下均能找到温度与电量变化的关系,即电池放电电量=额定电量*SOC*温度系数。初步证明假设C的结论。而35℃的"异常"却是我在试验前未曾预料到的。

      

    通过进一步的试验数据分析可见,无论电池SOC处于何种状态,电池在35℃下的放电电量始终较25℃有着约400mAh的增长,从而导致SOC越低温度系数比例就越高的现象。

      

    由此我又设计了另一个试验。试验采用航天LFP 60(Ah)的电池,将其在25℃充满(测定实际容量为64.8Ah),然后在0℃充分搁置后先放出25Ah,然后在室温25℃充分搁置,再将电池放空,共放出39.5Ah。通过试验可见该电池并未因为曾在低温环境下搁置和放电导致总电量明显下降,即温度变化可改变当前可用电量,使部分电量被“冻结”,但总电量不变。因此我们可将最初的电池几何模型进一步优化,将温度对容量的影响添加到模型当中,得到如下V2.0版本。(需要注意的是几何模型的构建是通过试验获得电池外特性从而找到温度与电量的某种简单却并不一定精确的数学关系。若从化学反应的建模方式着手可以采用能斯特模型Nernst model。考虑到电池管理系统的运算能力以及对SOC值的精度要求,几何模型能较好的满足实际算法的要求。)

      

    通过这个模型我们可以看到若以25℃的可用电量评价SOC,则SOC = (S2 + f2)/(S1 + S2 + f1 + f2)。

    若以实时温度的可用电量评价SOC,则SOC = S2 / (S1 + S2 + f1 + f2) 。显然在不同的“功能需求”下我们需要选择不同的定义。本文我们再继续讨论其他需要考虑的维度。

    3.电池寿命状态维度

    电池在使用的过程中寿命将逐渐衰减,衰减机理主要在于正负极材料晶体的塌陷和电极的钝化导致了有效锂离子的损失。总电量也将从BOL(Beginning of Life)向EOL(End of Life)状态趋近。因此在计算SOC时需要考虑是采用BOL时刻的总容量,还是当前寿命下的实际总容量。为了进一步完善算法模型可在V2.0模型的基础上增加电池循环寿命对容量的影响。将平面模型拓展成三维模型(如下图所示),新增的Z轴坐标表示电池循环次数。该模型可以根据电池循环次数的累加,相应的减少电量模型在X、Y轴平面的投影面积,即表征电池容量随着循环次数的衰减。当然在实际应用中电池的循环次数并不能直接与总电量对应,电池电量的衰减与电池在使用过程中的充放电倍率C rate、放电深度DOD、使用温度、搁置温度等因素相关。

      

    要解决这个问题首先需要通过电池实验找到在特定基准下的电池循环次数与电量衰减的关系。例如:以70%DOD、25℃、1C倍率充放循环为基准的电量衰减特性。然后仅改变其中的单一因素进行试验(如下表所示):

    通过试验可获得电池电量衰减曲线(如下图示例),从而得到温度因子对总电量与循环次数的关系的影响(利用Arrhenius方程求解)。则BMS可在实际的工况中将影响因子与实时电流一同进行积分运算,从而将实际循环次数折算到特定基准下的循环次数。对于影响因子本身的不精确和积分过程中造成的累计误差可以通过充电工况进行必要的校正以提高电量衰减的估算精度。

      

    当然Z轴坐标除了循环次数以外还可以考虑采用电池内阻来反映容量的衰减。但从模型在BMS软件应用的角度来看循环次数是更为便于采集、运算、比较、参照的参数。现在回到最初的公式:SOC=剩余容量/总容量。再将上述三个维度代进公式:SOC = 剩余容量_(性质_温度)/ 总容量_(性质_温度_寿命)。理论上可能有32种排列组合,当然大多数并没有实际意义,需要结合“功能需求”确定适合的定义,常见有3种。

    在用以衡量续驶里程、续航时间等与功率相关的场景下可定义为:SOC = 剩余容量_(Wh_RT)/ 总容量_(Wh_N_Age)。首先该定义选择了以能量(Wh)进行比较,同时剩余容量选取了实际温度(RT)下的状态,而总容量选择了25℃(N)的基准,目的在于给用户一个相对稳定的参照坐标系。并且在该定义下总容量可随着电池寿命的衰减及时调整至实际寿命(Age)。需要注意的是在进行能量积分运算时必须将能量效率η系数代入,从而在剩余能量中减去电池运行产生的热能。因此该SOC值可描述为SOE(State of Energy)。

    在电池健康状态(SOH)算法中可定义为:SOC = 剩余容量_(Ah_N)/ 总容量_(Ah_N_BOL)。始终以常温下BOL状态为基准,当电池系统满充时刻则可求得SOH(State of Health)= SOC / 100%。

    在电池功率边界(SOP)算法中需要输入当前温度和SOC值进行查表,从而确定实时的充放电功率边界。可定义SOC = 剩余容量_(Ah_N)/ 总容量_(Ah_N_Age)。选择该定义方式是由于电池功率边界通常是根据不同温度下的HPPC实验计算和标定的,所以代入的SOC值可忽略温度对剩余容量的影响。

    4.电池一致性维度

    前三个维度主要讨论了理想情况的SOC定义(电池系统内的电池一致性程度高),但在实际情况下一定需要考虑一致性差异对SOC计算的影响。一致性差异可以分两个方面展开讨论,第一种情况是Charge Mismatch,通常是电池之间自放电差异造成的电池荷电态不同。

      

    第二种情况是Capacity Mismatch,可能是电池本身的差异或是电池使用环境、温度差异等因素造成的容量差异。

      

    正常情况下我们认为电池系统符合短板效应,即应该以Min_Cell(最低荷电态单体)的SOC为准。但在充电过程中当Max_Cell(最高荷电态单体)至100%SOC时充电停止,而此时SOC却不到100%。这对于用户而言就意味着电池无法充满电(想象一下睡前你给手机充上电,第二天一早醒来看到电量还是90%是什么感觉,一定认为手机出什么故障了),显然这是不可接受的。而如果我们以Max_Cell的SOC为准,那么很可能用户在看到还有10%电量的情况下突然失去电池系统的功率输出了。如果以电池系统所有电池的平均SOC为准,那上述两个问题将同时存在。因此可以通过权重系数调节SOC的选取倾向,即当电池系统整体荷电态较高时偏重Max_Cell,反之偏重Min_Cell(举例:SOC=Max_Cell * SOC+Min_Cell *(1 - SOC))。

    对于情况一:Charge Mismatch在放电过程中的SOC曲线将如下图变化。

      

    对于情况二:Capacity Mismatch在放电过程中的SOC曲线将如下图变化。

      

    总结:

    本文以SOC = 剩余容量/总容量 的公式为出发点,分析了分子和分母在不同维度上的可能性,并设计了几何模型用以描述,从而实现了对SOC更为具体的定义。同时将电池系统的不一致性作为SOC计算的一个重要考虑因素,提出了权重系数计算方法。作者认为只有明确了SOC的定义才能为BMS算法在实际应用中提高SOC精度提供依据和基础。

    参考文献:

    [1] John Wang, Ping Liua, Jocelyn Hicks-Garnera.Cycle-life model for graphite-LiFePO4 cells [J].Power Sources, 196 (2011) 3942–3948.

    [2] 2004年10月 第34卷第五期 《电池》电动汽车SOC 估计方法原理与应用,林成涛, 王军平, 陈全世。来源:叶磊Ray

     

    转自: https://www.sohu.com/a/144381022_526255

    展开全文
  • 详解NVMe SSD存储性能影响因素

    千次阅读 2018-11-03 07:21:50
    导读: NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进...

    640?wx_fmt=jpeg

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

    导读: NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进数据中心闪存化进程。本文从NVMe SSD的性能影响因素进行分析,并给出存储系统设计方面的一些思考。


    目录


    1 存储介质的变革    
    2 NVME SSD成为主流    
    2.1 NAND FLASH介质发展    
    2.2 软件层面看SSD——多队列技术    
    2.3 深入理解SSD硬件    
    3 影响NVME SSD的性能因素    
    3.1 GC对性能的影响    
    3.2 IO PATTERN对性能的影响    
    3.2.1 顺序写入Pattern对SSD性能优化的奥秘    
    3.2.2 读写冲突Pattern对性能的影响    
    4 SSD写性能分析模型    
    5 小结


    NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进数据中心闪存化进程。本文从NVMe SSD的性能影响因素进行分析,并给出存储系统设计方面的一些思考。


    1 存储介质的变革 


    近几年存储行业发生了翻天覆地的变化,半导体存储登上了历史的舞台。和传统磁盘存储介质相比,半导体存储介质具有天然的优势。无论在可靠性、性能、功耗等方面都远远超越传统磁盘。目前常用的半导体存储介质是NVMe SSD,采用PCIe接口方式与主机进行交互,大大提升了性能,释放了存储介质本身的性能。通常NVMe SSD内部采用NAND Flash存储介质进行数据存储,该介质本身具有读写不对称性,使用寿命等问题。为此在SSD内部通过FTL(Flash Translation Layer)解决NAND Flash存在的问题,为上层应用软件呈现和普通磁盘相同的应用接口和使用方式。

    640?wx_fmt=png


    如上图所示,随着半导体存储介质的发展,计算机系统的IO性能得到了飞速发展。基于磁介质进行数据存储的磁盘和处理器CPU之间一直存在着棘手的剪刀差性能鸿沟。随着存储介质的演进与革新,这种性能剪刀差将不复存在。从整个系统的角度来看,IO性能瓶颈正从后端磁盘往处理器和网络方向转移。如下图性能数据所示,在4KB访问粒度下,NVMe SSD和15K转速磁盘相比,每秒随机读IO处理能力提升了将近5000倍;每秒随机写IO处理能力提升了1000多倍。随着非易失性存储介质的进一步发展,半导体存储介质的性能将进一步提升,并且会具有更好的IO QoS能力。


    640?wx_fmt=png


    存储介质的革命一方面给存储系统性能提升带来了福音;另一方面对存储系统的设计带来了诸多挑战。原有面向磁盘设计的存储系统不再适用于新型存储介质,面向新型存储介质需要重新设计更加合理的存储软件堆栈,发挥存储介质的性能,并且可以规避新介质带来的新问题。面向新型存储介质重构存储软件栈、重构存储系统是最近几年存储领域的热门技术话题。


    在面向NVMe SSD进行存储系统设计时,首先需要对NVMe SSD本身的特性要非常熟悉,需要了解SSD性能的影响因素。在设计过程中需要针对SSD的特性通过软件的方式进行优化。本文对SSD进行简要介绍,并从性能影响因素角度出发,对NVMe SSD进行深入剖析,在此基础上给出闪存存储设计方面的一些思考。


    2 NVMe SSD成为主流


    2.1 NAND Flash介质发展


    目前NVMe SSD主流采用的存储介质是NAND Flash。最近几年NAND Flash技术快速发展,主要发展的思路有两条:第一,通过3D堆叠的方式增加NAND Flash的存储密度;第二,通过增加单Cell比特数来提升NAND Flash的存储密度。3D NAND Flash已经成为SSD标配,目前主流发布的SSD都会采用3D NAND Flash技术工艺。从cell的角度来看,目前单个cell可以表示3bit,这就是通常所说的TLC NAND Flash。


    今年单个cell的bit存储密度又提升了33%,可以表示4bit,向前演进至QLC NAND Flash。NAND Flash的不断演进,推动了SSD存储密度不断提升。截止到今天,单个3.5寸SSD盘可以做到128TB的容量,远远超过了磁盘的容量。下图是近几年NAND Flash技术的发展、演进过程。


    640?wx_fmt=png


    从上图可以看出,NAND Flash在不断演进的过程中,一些新的非易失性内存技术也开始发展。Intel已经推出了AEP内存存储介质,可以预计,未来将会是非易失性内存和闪存共存的半导体存储时代。


    2.2 软件层面看SSD——多队列技术


    从软件接口的角度来看,NVMe SSD和普通的磁盘没有太多的区别,在Linux环境下都是标准块设备。由于NVMe SSD采用了最新的NVMe协议标准,因此从软件堆栈的角度来看,NVMe SSD的软件栈简化了很多。在NVMe标准中,和传统的SATA/SAS相比,一个重大的差别是引入了多队列机制,如下图所示。


    640?wx_fmt=png


    何为多队列技术?主机(X86 Server)与SSD进行数据交互的模型采用“生产者-消费者”模型,采用生产者-消费者队列进行数据交互。在原有的AHCI规范中,只定义了一个交互队列,那么主机与HDD之间的数据交互只能通过一个队列通信,多核处理器也只能通过一个队列与HDD进行数据交互。在磁盘存储时代,由于磁盘是慢速设备,所以一个队列也就够用了。


    多个处理器核通过一个共享队列与磁盘进行数据交互,虽然处理器之间会存在资源竞争,但是相比磁盘的性能,处理器之间竞争所引入的开销实在是微乎其微,可以忽略。在磁盘存储时代,单队列有其他的好处,一个队列存在一个IO调度器,可以很好的保证提交请求的IO顺序最优化。


    和磁盘相比,半导体存储介质具有很高的性能,AHCI原有的规范不再适用,原有的假设也已经不复存在,在此背景下NVMe规范诞生了。NVMe规范替代了原有的AHCI规范,并且软件层面的处理命令也进行了重新定义,不再采用SCSI/ATA命令规范集。在NVMe时代,外设和处理器之间的距离更近了,不再需要像SAS一样的面向连接的存储通信网络。相比于以前的AHCI、SAS等协议规范,NVMe规范是一种非常简化,面向新型存储介质的协议规范。该规范的推出,将存储外设一下子拉到了处理器局部总线上,性能大为提升。并且主机和SSD处理器之间采用多队列的设计,适应了多核的发展趋势,每个处理器核与SSD之间可以采用独立的硬件Queue Pair进行数据交互。


    从软件的角度来看,每个CPU Core都可以创建一对Queue Pair和SSD进行数据交互。Queue Pair由Submission Queue与Completion Queue构成,通过Submission queue发送数据;通过Completion queue接受完成事件。SSD硬件和主机驱动软件控制queue的Head与Tail指针完成双方的数据交互。


    2.3 深入理解SSD硬件


    和磁盘相比,NVMe SSD最大的变化在于存储介质发生了变化。目前NVMe SSD普遍采用3D NAND Flash作为存储介质。NAND Flash内部有多个存储阵列单元构成,采用floating gate或者charge trap的方式存储电荷,通过存储电荷的多少来保持数据存储状态。由于电容效应的存在、磨损老化、操作电压干扰等问题的影响,NAND Flash天生会存在漏电问题(电荷泄漏),从而导致存储数据发生变化。因此,从本质上讲,NAND Flash是一种不可靠介质,非常容易出现Bit翻转问题。SSD通过控制器和固件程序将这种不可靠的NAND Flash变成了可靠的数据存储介质。


    为了在这种不可靠介质上构建可靠存储,SSD内部做了大量工作。在硬件层面,需要通过ECC单元解决经常出现的比特翻转问题。每次数据存储的时候,硬件单元需要为存储的数据计算ECC校验码;在数据读取的时候,硬件单元会根据校验码恢复被破坏的bit数据。ECC硬件单元集成在SSD控制器内部,代表了SSD控制器的能力。在MLC存储时代,BCH编解码技术可以解决问题,4KB数据中存在100bit翻转时可以纠正错误;在TLC存储时代,bit错误率大为提升,需要采用更高纠错能力的LDPC编解码技术,在4KB出现550bit翻转时,LDPC硬解码仍然可以恢复数据。下图对比了LDPC硬解码、BCH以及LDPC软解码之间的能力, 从对比结果可以看出,LDPC软解码具有更强的纠错能力,通常使用在硬解码失效的情况下。LDPC软解码的不足之处在于增加了IO的延迟。

    640?wx_fmt=png


    在软件层面,SSD内部设计了FTL(Flash Translation Layer),该软件层的设计思想和Log-Structured File System设计思想类似。采用log追加写的方式记录数据,采用LBA至PBA的地址映射表记录数据组织方式。Log-structured系统最大的一个问题就是垃圾回收(GC)。因此,虽然NAND Flash本身具有很高的IO性能,但受限于GC的影响,SSD层面的性能会大受影响,并且存在十分严重的IO QoS问题,这也是目前标准NVMe SSD一个很重要的问题。


    SSD内部通过FTL解决了NAND Flash不能Inplace Write的问题;采用Wear Leveling算法解决了NAND Flash磨损均衡问题;通过Data Retention算法解决了NAND Flash长时间存放漏电问题;通过Data Migration方式解决Tead Diatribe问题。FTL是NAND Flash得以大规模使用的核心技术,是SSD的重要组成部分。


    640?wx_fmt=png


    NAND Flash内部本身具有很多并发单元,如上图所示,一个NAND Flash芯片由多个Target构成,每个Target包含多个Die。每个Die是一个独立的存储单元,一个Die由多个Plane构成,多个Plane之间共享一套操作总线,多个Plane可以组成一个单元并发操作,构建Multi-plane。一个Plane由若干个Block构成,每个Block是一个擦除单元,该单元的大小也决定了SSD软件层面的GC回收粒度。每个Block由多个page页构成,每个Page是最小写入(编程)单元,通常大小为16KB。SSD内部软件(固件)需要充分利用这些并发单元,构建高性能的存储盘。


    一块普通NVMe SSD的物理硬件结构简单,由大量的NAND Flash构成,这些NAND Flash通过SOC(SSD控制器)进行控制,FTL软件运行在SOC内部,并通过多队列的PCIe总线与主机进行对接。为了提升性能,企业级SSD需要板载DRAM,DRAM资源一方面可以用来缓存数据,提升写性能;另一方面用来缓存FTL映射表。企业级SSD为了提升性能,通常采用Flat mapping的方式,需要占据较多的内存(0.1%)。


    内存容量的问题也限制了大容量NVMe SSD的发展,为了解决内存问题,目前一种可行的方法是增大sector size。标准NVMe SSD的sector size为4KB,为了进一步增大NVMe SSD的容量,有些厂商已经开始采用16KB的sector size。16KB Sector size的普及应用,会加速大容量NVMe SSD的推广。


    3 影响NVMe SSD的性能因素


    NVMe SSD 厂商Spec给出的性能非常完美,前面也给出了NVMe SSD和磁盘之间的性能对比,NVMe SSD的性能的确比磁盘高很多。但在实际应用过程中,NVMe SSD的性能可能没有想象中的那么好,并且看上去不是特别的稳定,找不到完美的规律。和磁盘介质相比,SSD的性能和很多因素相关,分析SSD的性能影响因素,首先需要大体了解SSD构成的主要部分。如下图所示,其主要包括主机CPU、PCIe互连带宽、SSD控制器及FTL软件、后端NAND Flash带宽、NAND Flash介质。影响SSD性能的主要因素可以分成硬件、软件和客观环境三大部分,具体分析如下。


    640?wx_fmt=png


    1,硬件因素


    a)    NAND Flash本身。不同类型的NAND Flash本身具有不同的性能,例如SLC的性能高于MLC,MLC的性能优于TLC。选择不同的工艺、不同类别的NAND Flash,都会具有不同的性能。


    b)    后端通道数(CE数量)及总线频率。后端通道数决定了并发NAND Flash的数量,决定了并发能力。不同的SSD控制器支持不同数量的通道数,也决定了SSD的后端吞吐带宽能力。NAND Flash Channel的总线频率也决定了访问Flash的性能。


    c)    SSD控制器的处理能力。SSD控制器中会运行复杂的FTL(Flash Translation Layer)处理逻辑,将逻辑块读写映射转换成NAND Flash 读写请求。在大数据块读写时,对处理器能力要求不是很高;在小数据块读写时,对处理器能力要求极高,处理器能力很容易成为整个IO系统的性能瓶颈点。


    d)    SSD控制器架构。通常SSD控制器采用SMP或者MPP两种架构,早期的控制器通常采用MPP架构,多个小处理器通过内部高速总线进行互连,通过硬件消息队列进行通信。内存资源作为独立的外设供所有的处理器进行共享。这种架构和基于消息通信的分布式系统类似。MPP架构的很大优势在于性能,但是编程复杂度较高;SMP架构的性能可扩展性取决于软件,编程简单,和在x86平台上编程相似。不同的控制器架构会影响到SSD的总体性能,在SSD设计时,会根据设计目标,选择不同类型的SSD控制器。


    e)    内存支持容量。为了追求高性能,SSD内部的映射资源表会常驻内存,映射表的内存占用大小是盘容量的0.1%,当内存容量不够大时,会出现映射表换入换出的问题,影响到性能。


    f)    PCIe的吞吐带宽能力。PCIe前端带宽体现了SSD的前端吞吐能力,目前NVMe SSD采用x4 lane的接入方式,上限带宽为3GB/s,当后端NAND Flash带宽和处理器能力足够时,前端PCIe往往会成为性能瓶颈点。NAND Flash具有很高的读性能,目前来看,SSD的读性能在很大程度上受限于PCIe总线,因此需要快速推进PCIe4.0标准。


    g)    温度对性能造成影响。在NAND Flash全速运行的情况下,会产生较大的散热功耗,当温度高到一定程度时,系统将会处于不正常的工作状态,为此,SSD内部做了控温系统,通过温度检测系统来调整SSD性能,从而保证系统温度维持在阈值之内。调整温度会牺牲性能,本质上就是通过降低SSD性能来降温。因此,当环境温度过高时,会影响到SSD的性能,触发SSD内部的温度控制系统,调节SSD的性能。


    h)    使用寿命对性能造成影响。NAND Flash在不断擦除使用时,Flash的bit error会不断上升,错误率的提升会影响到SSD的IO性能。


    2、软件因素


    a)    数据布局方式。数据布局方法需要充分考虑NAND Flash中的并发单元,如何将IO操作转换成NAND Flash的并发操作,这是数据布局需要考虑的问题。例如,采用数据交错的方式在多通道page上进行数据布局,通过这种方式可以优化顺序带宽。


    b)    垃圾回收/wear leveling调度方法。数据回收、wear leveling、data retention等操作会产生大量的NAND Flash后端流量,后端流量直接反应了SSD的写放大系数,也直接体现在后端带宽的占用。垃圾回收等产生的流量也可以称之为背景流量,背景流量会直接影响到前端用户性能。因此需要对背景流量和用户流量之间进行合理调度,使得用户IO性能达到最佳。


    c)    OP预留。为了解决坏块、垃圾回收等问题,在SSD内部预留了一部分空闲资源,这些资源被称之为OP(Overprovisioning)。OP越大,GC过程中平均搬移的数据会越少,背景流量会越小,因此,写放大降低,用户IO性能提升。反之,OP越小,性能会越低,写放大会越大。在SSD容量较小的时代,为了提升SSD的使用寿命,往往OP都设置的比较大。


    d)    Bit error处理影响性能。在SSD内部采用多种机制来处理NAND Flash所产生的Bit error。ECC纠错、read retry、soft LDPC以及RAIN都是用来纠正bit翻转导致的错误。当Bit错误率增加时,软件处理的开销越大,在bit控制在一定范围之内,完全可以通过硬件进行纠正。一旦软件参与到bit纠正的时候,会引入较大的性能开销。


    e)    FTL算法。FTL算法会影响到SSD性能,对于不同用途的SSD,FTL的设计与实现是完全不同的,企业级SSD为了追求高性能,通常采用Flat mapping的方式,采用大内存缓存映射表;消费级SSD为了追求低成本,通常采用元数据换入换出的方式,并且采用pSLC+TLC的组合方式进行分层存储,也可以采用主机端内存缓存元数据信息,但是这些方式都会影响到性能。


    f)    IO调度算法。NAND Flash具有严重的性能不对称性,Flash Erase和Program具有ms级延迟,Flash read的延迟在us级。因此,如何调度Erase、Program以及read是SSD后端设计需要考虑的问题。另外,前端IO以及背景IO之间的调度也是需要权衡考虑,通过IO调度可以达到最佳性能表现。在IO调度过程中,还需要利用NAND Flash的特性,例如Program Suspension,通过这些特性的利用,最优化SSD前端IO性能。


    g)    驱动软件。驱动软件运行在主机端,通常分为内核态和用户态两大类,内核态驱动会消耗较多的CPU资源,存在频繁上下文切换、中断处理,因此性能较低;用户态驱动通常采用Polling IO处理模式,去除了上下文切换,可以充分提升CPU效率,提升整体IO性能。


    h)    IO Pattern对性能产生影响。IO Pattern影响了SSD内部的GC数据布局,间接影响了GC过程中的数据搬移量,决定了后端流量。当IO Pattern为全顺序时,这种Pattern对SSD内部GC是最为友好的,写放大接近于1,因此具有最好的性能;当IO Pattern为小块随机时,会产生较多的GC搬移数据量,因此性能大为下降。在实际应用中,需要通过本地文件系统最优化IO Pattern,获取最佳性能。


    3、客观因素


    a)    使用时间越长会导致SSD性能变差。使用时间变长之后,SSD内部NAND Flash的磨损会加重,NAND Flash磨损变大之后会导致bit错误率提升。在SSD内部存在一套完整的bit错误恢复机制,由硬件和软件两大部分构成。当bit错误率达到一定程度之后,硬件机制将会失效。硬件机制失效之后,需要通过软件(Firmware)的方式恢复翻转的bit,软件恢复将会带来较大的延迟开销,因此会影响到SSD对外表现的性能。在有些情况下,如果一块SSD在掉电情况下放置一段时间之后,也可能会导致性能变差,原因在于SSD内部NAND Flash中存储电荷的漏电,放置一段时间之后导致bit错误率增加,从而影响性能。SSD的性能和时间相关,本质上还是与NAND Flash的比特错误率相关。


    b)    环境温度也会对性能造成影响。为了控制SSD温度不能超过上限值,在SSD内部设计有一套温度负反馈机制,该机制通过检测的温度对NAND Flash后端带宽进行控制,达到降低温度的效果。如果一旦温度负反馈机制开始工作,那么NAND Flash后端带宽将会受到限制,从而影响前端应用IO的性能。


    下面从软件的角度出发,重点阐述GC以及IO Pattern对SSD性能的影响。


    3.1 GC对性能的影响


    SSD内部有一个非常厚重的软件层,该软件层用来解决NAND Flash的问题,采用log-structured的方式记录数据。Log-structured方式引入了GC的问题,对于前端业务来讲,GC流量就是背景噪声。GC流量不是时时刻刻存在的,因此,SSD对外体现性能大幅度波动。当SSD为空盘时,性能会非常好,为最佳性能;当SSD被用过一段时间之后,性能会大幅降低。其中GC起到了很重要的作用。企业级SSD在发布Spec的时候,都会发布SSD盘的稳态性能。在性能测试的时候,需要对盘进行老化预处理。通常预处理的方法是顺序写满盘,然后再随机两遍写盘,预处理完成之后,再对盘进行随机读写测试,得到Spec中定义的值。稳态值基本可以认为是盘的下限性能。


    640?wx_fmt=png


    上图所示是多个厂商的盘在空盘和稳态情况下的性能对比,由此可见稳态情况和空盘情况下的性能差距很大。在稳态情况下,SSD内部的GC会全速运行,会占用较多的NAND Flash后端带宽。背景流量和前端数据流的比例也就体现了SSD盘的写放大系数,写放大系数越大,背景流量占用带宽越多,SSD对外体现的前端性能也就越差。写放大系数很多因素相关,例如OP、应用IO Pattern等。如果应用IO Pattern比较好,那么可以降低写放大系数,背景噪声流就会减少,前端业务的性能会提升。例如,在SSD完全顺序写入的情况下,写放大系数可以接近于1,此时GC产生的数据流很少,背景流量基本没有,后端带宽基本被业务数据流占用,因此对外体现的性能会很好。


    GC是影响性能的重要因素,除了影响性能之外,GC会增大写放大,对SSD的使用寿命产生影响。从软件层面的角度考虑,可以通过优化应用IO Pattern的方式优化SSD内部GC,从而进一步提升SSD的性能,优化使用寿命。对于下一代更为廉价的QLC SSD介质,就需要采用这种优化思路,否则无法很好的满足实际业务的应用需求。


    3.2 IO Pattern对性能的影响


    IO Pattern会对SSD的性能产生严重影响,主要表现在如下几个方面:


    1,    不同的IO Pattern会产生不同的写放大系数,不同的写放大系数占用后端NAND Flash带宽不同。当前端应用对SSD采用完全顺序的方式进行写入时,此时是最佳的IO Pattern,对于SSD而言写放大系数接近1,SSD内部的背景流量基本可以忽略,前端性能达到最佳。在实际应用中,很难采用这种完全顺序的数据写模型,但可以通过优化逼近顺序写入。


    2,    不同请求大小的IO之间会产生干扰;读写请求之间会产生干扰。小请求会受到大请求的干扰,从而导致小请求的延迟增加,这个比较容易理解,在HDD上同样会存在这种情况。由于NAND Flash介质存在严重的读写不对称性,因此读写请求之间也会互相干扰,尤其是写请求对读请求产生严重的性能影响。


    3.2.1 顺序写入Pattern对SSD性能优化的奥秘


    在针对闪存系统的设计中,需要考虑IO Pattern对性能产生的影响,通过软件的优化来最优化SSD的使用。在实际应用中完全顺序写入的IO Pattern基本上是不存在的,除非用作顺序写入的日志设备。对于顺序写入优化性能这个结论,需要从SSD内部实现来深入理解,知道根源之后,可以采用合理的方式来逼近顺序写入的模式,从而最优化SSD的性能。


    SSD内部采用log-structured的数据记录模式,并发写入的IO数据按照时间顺序汇聚成大数据块,合并形成的大数据块以Page stripe的方式写入NAND Flash。多个Page stripe会被写入同一个GC单元(Chunk or Superblock),当一个GC单元被写完成之后,该GC单元进入sealed模式(只读),分配新的GC单元写新的数据。在这种模式下,如果多个业务的数据流并发随机的往SSD中写入数据,那么多个应用的数据就会交错在一起被存储到同一个GC单元中。如下图所示,不同应用的数据生命周期不同,当需要回收一个GC单元的时候,会存在大量数据的迁移,这些迁移的数据就会形成写放大,影响性能和使用寿命。


    640?wx_fmt=png


    不同应用的数据交错存储在同一个GC单元,本质上就是不同冷热程度的数据交错存储的问题。从GC的角度来讲,相同冷热程度的数据存储在同一个GC单元上是最佳的,为此三星推出了Multi-stream SSD,该SSD就允许不同应用的数据存储到不同的Stream单元(GC单元),从而提升GC效率,降低写放大。Multi-stream是一种显式的设计方式,需要更改SSD接口以及应用程序。从IO Pattern的角度考虑,可以通过顺序大块的方式也可以逼近类似的效果。


    假设操作SSD只存在一个线程,不同的应用都采用大数据块的方式写入数据,那么在一个时间片段内只存在一个应用的数据往SSD中写入数据,那么在一个GC单元内存储的数据会变得有序和规则。如下图所示,采用上述方法之后,一个GC单元内存储的数据将会变得冷热均匀。在GC过程中会大大减少数据的搬移,从而减少背景流量。


    640?wx_fmt=png


    在实际应用中,上述IO Pattern很难产生,主要是应用很难产生非常大粒度的请求。为此在存储系统设计过程中,可以引入Optane高性能存储介质作为SSD的写缓存。前端不同业务的写请求首先写到Optane持久化介质中,在Optane持久化介质中聚合形成大数据块。一旦聚合形成大数据块之后,再写入SSD,通过这种方式可以最大程度的逼近SSD顺序写入过程,提升SSD的性能和使用寿命。


    3.2.2 读写冲突Pattern对性能的影响


    如下图所示,NAND Flash介质具有很强的读写不对称性。Block Erase和Page Program的延迟会远远高于Page Read所耗费的时间。那么在这种情况下,如果read请求在同一个Flash Channel上和Erase、Program操作冲突,那么read操作将会被Erase/program操作影响。这是在读写混合情况下,读性能会受到影响的重要因素。


    640?wx_fmt=png


    在实际应用过程中,经常会发现应用的测试结果和SSD Spec对不上,会比Spec给出的值要来的低。Spec给出的值通常为纯读或者纯写情况下的性能指标,在读写混合的场景下,性能表现和Spec给出的值就会存在非常大的出入。


    对于不同的SSD,通过测试可以发现在读写混合情况下的性能表现差距会比较大。在SSD处于稳态条件下,应用随机读的情况下,如果引入一个压力不是很大的顺序写,那么会发现不同SSD的抗干扰能力是不同的。有些SSD在写干扰的情况下,读性能会急剧下降,延迟快速上升,QoS性能得不到保证。下图是两个SSD在相同情况下的测试结果,从结果来看,有些SSD的抗写干扰能力比较强,读性能不会急剧下降。


    640?wx_fmt=png


    为什么有些SSD会具备比较强的抗写干扰能力呢?其中的奥秘就在于SSD内部的IO调度器。IO调度器会对write、read 和Erase请求进行调度处理,该调度器算法的不同就会表现出不同的抗干扰能力。目前很多NAND Flash可以支持Program/Erase Suspension的功能,在IO调度处理的过程中,为了提升读性能,降低读请求延迟,可以采用Suspension命令对Program/Erase命令暂停,对read请求优先调度处理。


    读写冲突是SSD内部影响IO QoS的重要因素。在SSD内部通过IO调度器的优化可以提升SSD性能的QoS能力,但是还是无法与存储软件结合来协同优化QoS。为了达到最佳的SSD性能QoS,需要关注Openchannel技术。Openchannel其实只是一种软硬件层次划分的方法,通常来讲,SSD内部的逻辑可以划分为面向NAND资源的物理资源管理层以及面向数据布局的资源映射层。物理资源管理由于和NAND Flash密切相关,因此可以放到SSD内部。


    传统的NVMe SSD需要对外暴露标准的块设备接口,因此需要在SSD内部实现资源映射层。从端至端的角度来看,资源映射层可以与存储软件层结合起来,为此将资源映射层从SSD内部剥离出来,集成至存储软件层。一旦资源映射层从SSD内部剥离之后,需要定义一个新的SSD接口,其中的一种接口方式就是Openchannel。


    盘古分布式存储针对SSD QoS问题进行了大量研究,提出了Object SSD的概念,Object SSD也是一种新的SSD接口方式,其采用对象方式对SSD进行读写删操作,每个对象采用Append write操作方式。这种接口方式可以很好的与分布式存储无缝结合。采用Object SSD之后,SSD内部的大量工作被简化,IO的调度会更加灵活,存储软件与SSD协同配合,达到IO性能的最优化,以及QoS的最大化。


    640?wx_fmt=png


    4 SSD写性能分析模型


    SSD内部的数据流分成两大类,一类为前端用户数据流;另一类为内部背景数据流。前端用户数据流和背景数据流会汇聚成NAND Flash后端流量。当背景数据流不存在时,NAND Flash带宽会被用户数据流全部占据,此时SSD对外表现的性能达到最佳。当SSD具有较大写放大时,会产生很大的背景数据流,背景流会抢占NAND Flash带宽,导致前端用户IO性能降低。为了稳定前端IO性能,在SSD内部的调度器会均衡前端和背景流量,保证前端性能的一致性。背景流量的占比反应了SSD的写放大系数,因此,站在NAND Flash带宽占用的角度可以分析SSD在稳态情况下的性能。


    在此,假设写放大系数为WA,顺序写情况下的总带宽数为B,用户写入流量(随机写入流量)为U。那么,由于GC写放大造成的背景流量为:(WA - 1)* U
    写放大流量为一读一写,都会占用带宽,因此,总带宽可以描述为:


    2  (WA - 1)  U + U = B
    因此,可以得到:
    U = B / (2(WA - 1) + 1) = B / (2  WA - 1)
    上述公式表述了前端用户流量和NAND Flash总带宽、写放大系数之间的关系。


    根据Spec,Intel P4500的顺序写带宽为1.9GB/s,按照上述公式,在随机访问模式下的带宽为: 1900 / (2 * 4 - 1) = 270MB/s,IOPS为67K,根据该公式推导的结果和Spec给出的结果相同。


    下图是Intel P4500和Samsung PM963随机写延迟和推导公式之间的对比。结果非常吻合。


    640?wx_fmt=png


    由此可以推出,随机写性能由SSD内部后端带宽以及写放大系数来决定。因此,从存储软件的角度出发,我们可以通过优化IO Pattern的方式减小写放大系数,从而可以提升SSD的随机写性能。


    5 小结


    闪存存储技术正在飞速发展,闪存介质、SSD控制器、存储系统软件、存储硬件平台都在围绕闪存日新月异的发展。闪存给数据存储带来的价值显而易见,数据中心闪存化是重要发展趋势。NVMe SSD性能受到很多因素的影响,在软件层面可以通过IO Pattern优化SSD的性能,使得整体存储系统的性能达到最佳。

    文章来源:云栖社区


    更多技术已经整理成电子书

    十一期间优惠活动相详细信息如下

    (如满足优惠条件下单可联系修改价格)

    640?wx_fmt=jpeg


    温馨提示:

    请搜索“ICT_Architect”“扫一扫”二维码关注公众号,点击原文链接获取更多电子书详情

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    求知若渴, 虚心若愚

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

    展开全文
  • 10 财政收入影响因素分析及预测模型

    万次阅读 多人点赞 2017-09-15 15:48:04
    4 10 财政收入影响因素分析及预测模型 10.1背景与挖掘目标  本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较...

    4 10 财政收入影响因素分析及预测模型

    10.1背景与挖掘目标

      本案例通过研究发现影响目前以及未来地方财源建设的因素,并对其进行深入分析,提出对该市地方财源优化的具体建议,供政府决策参考,同时为其他发展较快的城市提供借鉴。本案例对1994-2013年财政收入以及相关因素的数据,数据来自统计年鉴。

    目标:

    (1) 梳理影响地方财政收入的关键特征,分析识别影响地方财政收入的关键特征的选择模型

    (2) 结合(1)的分析,对某市2015年财政总收入以及各个类别收入进行预测。

    10.2分析方法与过程

       本案例在已有的研究基础上运用Adaptive-Lasso变量选择方法来研究影响地方财政收入的因素。

       Lasso是在1996年提出的将参数估计与变量选择同时进行的一种正则化方法,参数估计被定义为如下:

     

    10.2.1 灰色预测与神经网络的组合模型

    在Lasso变量的选择基础上,鉴于灰色预测对小数据量数据预测的优良性能,对单个选定的因素建立灰色预测模型,得到他们在2014-2015年的预测值,由于神经网络较强的适应性和容错能力,对历史数据建立训练模型,把灰色预测的结果带入训练好的模型中,就得到了充分考虑历史信息的预测结果,即2015年某市财政收入及各个类别收入

    主要步骤如下:

    (1) 对数据进行预处理

    (2) 将预处理好的数据,建立Lasso变量选择模型

    (3) 在(2)的基础上建立单变量的灰色预测模型,以及人工神经网络预测模型

    (4) 在(3)的预测值带入建立好的人工神经网络模型中,从而得到2014、2015年某市财政收入以及各类别收入的预测值。

    10.2.2数据探索分析

    影响财政收入(y)的因素很多,经查阅资料选以下因素为自变量

    社会从业人数(x1)

    在岗职工工资总额(x2)

    社会消费品零售总额(x3)

    城镇居民人均可支配收入(x4)

    城镇居民人均消费性支出(x5)

    年末总人口(x6)

    全社会固定资产投入(x7)

    地区生产总值(x8)

    第一产业产值(x9)

    税收(x10)

    居民消费价格指数(x11)

    第三产业与第二产业产值比(x12)

    居民消费水平(x13)

    10.2.2.1描述性分析

       我们要对数据有个大体认识,要对其进行简单的描述性统计分析

    # encoding=utf-8
    #
    描述性分析
    import pandas as pd
    import numpy as np

    inputfile=
    'demo/data/data1.csv'
    outputfile='demo/tmp/datagaikuo.csv'
    data=pd.read_csv(inputfile)
    r=[data.min()
    ,data.max(),data.mean(),data.std()]#依次计算最小值、最大值、均值、标准差
    r=pd.DataFrame(r,index=['MIN','MAX','MEAN', 'STD']).T
    np.round(r
    ,2).to_csv(outputfile)#保留2位小数,并输出

     

    10.2.2.2相关性分析

    现在要分析一下因变量与解释变量之间的关系,它们之间是否存在相关性,下面来求一下相关系数。

    #相关系数
    np.round(data.corr(method='pearson'),2).to_csv('demo/tmp/datapearson.csv')

    从上图中的相关系数中我们可以发现居民消费价格指数(x11)与财政收入的线性关系不显著,而且呈现负相关,其余变量与财政收入呈高度正相关。

    这种表格的形式看起来不太直观,现在我们以图的形式进行可视化,首先要对数据进行0-1标准值化处理。

    #标准化处理
    dataNM=(data-data.min())/(data.max()-data.min())
    dataNM.to_csv(
    'demo/tmp/dataNM.csv')


    从图中我们可以看出x11总体呈下降趋势,与y呈负相关关系,而其他因变量都与y呈正相关关系。

    10.2.3模型构建

    10.2.3.1Lasso变量选择模型

    #Lasso变量选择
    from sklearn.linear_model import Lasso
    model=Lasso()
    model.fit(data.iloc[:
    ,0:13],data['y'])
    q=model.coef_
    #各特征的系数
    q=pd.DataFrame(q,index=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x12','x13']).T
    np.round(q
    ,4).to_csv('demo/tmp/dataLasso.csv')

     

    观察表格中的数据我们发现x11居民消费水平为0,也就是说该因素对财政收入的影响非常小,可以忽略不计。

    10.2.4财政收入及各类别收入预测模型

     (1)某市财政收入预测模型

    对Lasso变量选择方法识别的影响财政收入的因素建立灰色预测与神经网络的组合预测模型,其参数设置为误差精度0.0000001,学习次数为10000次,输入层神经元的个数为12(除x12之外)。

    #地方财政收入灰色预测
    from GM11 import GM11
    outputfile=
    'demo/tmp/data1_GM11.xls'
    data.index=range(1994,2014)#行索引
    data.loc[2014]=None
    data.loc[2015]=None
    l=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']
    for i in l:
        f=GM11(data[i][
    range(1994,2014)].as_matrix())[0]
        data[i][
    2014]=f(len(data)-1)
        data[i][
    2015]=f(len(data))
        data[i]=data[i].round(
    2)
    data[l+[
    'y']].to_excel(outputfile)

     


    预测出了这11个变量在2014和2015年的因变量,下面就要利用神经网络预测财政收入了。

    经过多次试验发现神经网络模型:输入层的节点为11,隐层节点为12,输出节点为1的效果较好,神经网络预测代码如下:

    #地方财政收入神经网络预测模型
    inputfile='demo/tmp/data1_GM11.xls'
    outputfile='demo/tmp/revenue.xls'
    modelfile='demo/tmp/1-net.model'
    data=pd.read_excel(inputfile)
    feature=[
    'x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x13']#特征所在列
    data_train=data.loc[range(1994,2014)].copy()#2014年前的建模数据
    data_mean=data_train.mean()
    data_std=data_train.std()
    data_train=(data_train-data_mean)/data_std
    #数据标准化
    x_train=data_train[feature].as_matrix()#特征数据
    y_train=data_train['y'].as_matrix()#标签数据
    from keras.models import Sequential
    from keras.layers.core import Dense,Activation
    model=Sequential()
    #建立模型
    model.add(Dense(input_dim=12,output_dim=12))
    model.add(Activation(
    'relu'))#激活函数
    model.add(Dense(input_dim=12,output_dim=1))
    model.compile(
    loss='mean_squared_error',optimizer='adam')#编译模型,目标函数是均方差
    model.fit(x_train,y_train,nb_epoch=10000,batch_size=16)#训练模型
    model.save_weights(modelfile)#保存模型
    #预测并还原结果
    x=((data[feature]-data_mean[feature])/data_std[feature]).as_matrix()
    data[
    u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
    data.to_excel(outputfile)
    #画出预测图
    import matplotlib.pyplot as plt
    p=data[[
    'y','y_pred']].plot(subplots=True,style=['b-o','r-*'])
    plt.show()

     


    当我们把y和y_pred放在一个图上的时候,发现它们“重合”,它们只是差别小而已……并没重合……这些差别我们可以观察具体数据看出,可见我们的模型预测效果还是ganggang滴!

     




    展开全文
  • 影响作业疲劳的因素及对策研究,郭晓波,郭海林,本文重点讨论了疲劳的定义,对现代作业疲劳提出了新的定义,使对疲劳的研究更切合多元化的社会发展方向,并且对人体疲劳的特点进
  • 排序功能实现及测试影响因素

    千次阅读 2010-06-09 21:08:00
    在设计排序功能测试用例时我们会考虑各种影响因素:节点名称上的特性,节点属性,其他功能模块对数据的影响,其他功能模块对UI展现的影响等几个方面。 那么排序效果到底是如何实现的呢?这里不得不说到一个函数...
  • 论文 介绍方块电阻的定义,测量及其计算方法。通过分析电阻式触摸屏回路电阻的构成,给出其经验公式,简述影响回路电阻的主要因素及其原因,为触摸屏组值计算和制程控制提供参考
  • 本文给出了印刷电路板(PCB)特性阻抗的定义,分析了影响特性阻抗的因素及PCB的构造参数对特性阻抗精度的影响.最后给出了一些对策。
  • 本文给出了印刷电路板(PCB)特性阻抗的定义,分析了影响特性阻抗的因素及PCB的构造参数对特性阻抗精度的影响.最后给出了一些对策。
  • 算法速度影响因素的本质 一

    千次阅读 2005-02-08 14:25:00
    算法速度影响因素的本质表面上,算法速度的影响因素繁多,但事实上,如果我们穷根究底的话,也会在这个看似繁乱无序的世界里找出一些本质的东西。先考虑这么一个问题:如果b地在a地正东方,一个人要从a地去b地,那他...
  • 影响数据库性能的常见因素

    千次阅读 2015-03-22 18:39:39
    1、影响数据库性能的常见因素: -> 读写竞争 -> 事务竞争 -> 频繁的事务处理 2、数据库需要保证数据的准确与安全,提出来事务(transactio)的概念 严格的定义:满足原子性、一致性、持久性和隔离性的操作成为事务。...
  • 傅伯杰院士发表nature文章关于黄河中游输沙变化影响因素分析中方法分析...为了研究输沙量的相对变化率S的影响因素,引入了降水P,产水能力r(即径流/降水)和含沙量s (即年输沙量/径流)这三个因素对其贡献公式定义如下:
  • 软件质量因素 6个The different elements, which impact the product, are named as software factors. They can be extensively partitioned into two software quality management process. The principal class ...
  • 不良贷款拨备覆盖率的作用笔者不再赘述,在上一篇里笔者已经对拨备覆盖率的定义和作用做了解释,拨备覆盖率对于商业银行的重要性不言而喻,今天笔者就影响不良贷款拨备覆盖率的因素做出分析,以此来更好的防范信用...
  • 影响辐射生物学效应的因素

    千次阅读 2019-04-30 22:42:30
    影响辐射生物学效应的因素主要有: (一)辐射因素 1.辐射类型:高LET辐射在组织内能量分布密集,生物学效应相对较强。故在一定范围内,LET愈高,RBE愈大。 2.剂量和剂量率:照射剂量大小是决定辐射生物效应强弱的...
  • 如何定义数据指标

    千次阅读 2019-01-02 22:20:30
    数据指标的定义,是培养数据思维要闯的第一道关。比如常见的以下指标定义: 1、激活,如何定义一个激活? 下载、安装并打开APP的用户数?我们暂且这么定义。根据定义,下载没安装或者安装没打开的用户,都不计入激活...
  • 采购信息记录(包括手工、自动创建及相关影响因素
  • 数字电路基础知识——反相器的相关知识(噪声容限、VTC、转换时间、速度的影响因素、延时等) 反相器是数字电路中最基本的门电路之一,由NMOS和PMOS组成。学过半导体器件的都对此结构比较清楚。 下面我总结了一些...
  • 你想要提升性能,首先肯定要知道哪些因素对于系统性能的影响最大,然后再针对这些具体的因素想办法做优化,是不是这个逻辑? 那么,哪些因素对性能有影响呢?在回答这个问题之前,我们先定义一下“性能”,服务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,834
精华内容 85,933
关键字:

影响因素的定义