嵌入式系统的性能优化设计_第1页
嵌入式系统的性能优化设计_第2页
嵌入式系统的性能优化设计_第3页
嵌入式系统的性能优化设计_第4页
嵌入式系统的性能优化设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统的低功耗设计内容低功耗设计概述功耗控制技术Moblin的功耗控制技术8.1低功耗设计概述嵌入式低功耗的重要性嵌入式系统的功耗组成CMOS电路的基本功耗模型8.1.1嵌入式低功耗的重要性HotPlateNuclearReactor386486PentiumPentiumProPentium2Pentium3Pentium4(Prescott)Pentium4为什么功耗问题这么重要?电池容量不遵循摩尔定律增长Processor(MIPS)HardDisk(capacity)Memory(capacity)Battery(energystored)012345616x14x12x10x8x6x4x2x1xImprovement

(comparedtoyear0)Time(years)8.1.2嵌入式系统的功耗组成CPU不再是唯一的功耗的组成处理器、无线通信、屏幕是嵌入式系统的3个主要功耗部件8.1.3CMOS电路的基本功耗模型分为静态功耗和动态功耗——回顾第3章关于处理器的知识,实际上这一点对所有CMOS电路都适用。静态功耗曾经微不足道,但现在随着工艺制程(130nm、90nm、60nm)向深纳米发展,问题已经变得非常突出。动态功耗=aCFV2a为与电路有关的一个调整参数;C为一个时钟周期内的总栅电容,对于一个处理器来说它是固定的。V最关键,因为动态功耗与其平方成正比。此外随着工艺制程(130nm、90nm、60nm)的发展,工作电压要求越来越低。F为时钟频率。V与F的制约关系V越高,可以支持的F越高8.2功耗控制技术功耗控制可以从不同层次来实现,根据实现效果,从高到低可分为:系统设计软件算法设计硬件的设计8.2.1系统设计的低功耗考虑待机模式的设计卸载计算密集任务到专用硬件动态电源管理(DynamicPowerManagement)动态电压/频率调整(DynamicVoltage/FrequencyScaling)时钟门控(ClockGating)技术8.2.1.1待机模式的设计对于大多数家电希望能用遥控器控制开关所以待机时,不能完全断电。常用的实现方法包括两种:伪待机方案待机时就是程序不运行,关闭显示待机功耗很大备份MCU方案用一个非常低功耗的MCU来负责遥控器的响应,并且控制主CPU的电源待机时主CPU完全断电8.2.1.2卸载计算密集任务到专用硬件通过把复杂的计算卸载(offloading)到专门的硬件上,放低对主处理器的主频要求比如一视频播放器里的YUV→RGB转换环节如果用CPU来做,对于720p的可能要用掉一个嵌入式处理器(400Mhz左右)的全部计算能力,功耗10瓦左右。但是如果用一个专门的硬件电路来做(并行的多个乘加单元),可能10Mhz的工作频率就够了,也许几十个mW功耗就够了采用具有专门对你的计算密集应用有专门加速模块的SoC比如TIOMAP2420里的Imaging/VideoAccelerator模块如果价格不敏感,可以直接利用FPGA设计加速模块8.2.1.3动态电源管理(DynamicPowerManagement)很多处理器或者外设支持多种不同的睡眠模式一般是通过关断部分电路的电源实现睡眠不同的睡眠模式下,关断的范围不一样,从而从睡眠恢复所需的时间也不一样尽量让系统在没有活动任务时进入尽可能深的睡眠模式需要操作系统和应用软件的配合才能实现模式切换的频度的折中从睡眠模式恢复到正常状态的这个过程往往比正常模式还要费电比如硬盘从静止→启动到规定的转速过于激进的切换,可能导致频繁的恢复,所以反而更耗电过于保守的切换,节电效果也不好8.2.1.3动态电源管理处理器功耗管理策略处理器的运行方式可以用一个电源状态机来描述:8.2.1.3动态电源管理处理器功耗管理策略(续)

处理器的电源(即功耗)有两种不同类型的管理策略:一种是静态电源管理机制。它由用户调用,不依赖于处理器活动。一个静态机制的例子是通过节电模式来节省电源。这种方式用一条指令来进入,通过接收一个中断或其他事件来结束。另一种是动态电源管理机制。它是基于处理器的动态活动来对功耗来进行控制的。例如,当指令运行时,如果处理器某些部分的逻辑不需运行,那么处理器也许会关掉这些特定部分。8.2.1.3动态电源管理APM、ACPI标准实现嵌入式计算系统的低功耗,需要硬件和操作系统协同地工作。为协调操作系统和硬件对功耗和电源的管理,需要为两者制定一套统一的接口规范。最早的规范是APM(Advancedpowermanagement,高级功耗管理),它是由Intel和微软联手发布的一组API,使运行于与IBM兼容的个人计算机上的操作系统能与BIOS协同实现功耗管理。目前的规范是ACPI(AdvancedConfigurationandPowerInterface,高级配置和电源接口),它是从APM发展过来的。ACPI是一个电源管理服务的开放工业标准。它与多种操作系统兼容,最初目标是针对个人计算机的。ACPI提供了一些电源管理的基本工具并抽象出硬件层。操作系统有自己的电源管理模型,它通过ACPI向硬件发送需求控制,然后观察硬件状态将其作为电源管理的输入,从而实现对计算机和外围设备的电源的控制。8.2.1.3动态电源管理APM、ACPI标准ACPI在整个计算机系统中结构目前一些流行操作系统和软件平台,如WindowsXP、Moblin等,都是支持ACPI。8.2.1.3动态电源管理操作系统支持的常见低功耗状态当任务空闲(或称处于非活跃状态)时,计算机系统可通过进入各种低功耗的工作模式的方式来节能,这些低功耗的工作模式有时又统称为“睡眠”模式。系统的这些低功耗工作模式,介于系统完全启动和完全关闭状态之间,拥有多种形式,每种形式拥有自己的特点,能满足不同角度的用户需求。这些工作模式包括:待机(Standby)系统处于“待机(Standby)”模式时,将切断所用硬件组件的电源,从而减少计算机的电源消耗。“待机”可切断外围设备、显示器甚至硬盘驱动器的电源,但会保留计算机内存的电源,以不至于丢失工作数据。8.2.1.3动态电源管理操作系统支持的常见低功耗状态待机(Standby)(续)待机模式的主要优点在于恢复时间短,只需数秒时间系统就可恢复到之前的状态。缺点在于待机模式仍需要对内存供电。这样内存内容将不会被保存到文件夹中,因而也就不会因为内存重新加载而影响运行速度。但是,如果在该模式下发生电源中断,所有未保存的内存内容都将丢失。因此,待机又称为挂起到内存(SuspendtoRAM,简称STR)。处于待机状态的系统,除硬盘外,其他设备还是处于加电等待状态(也就是说唤醒时无须重新加电,通俗地说就是原地待命),所以电源、处理器、显卡等设备的风扇还是处于工作中,键盘指示灯也是亮着的。我们可以通过按键盘任意键或动一下鼠标来唤醒电脑,这时硬盘就会重新加电并启动,然后和内存、处理器等设备交换数据,从而完成返回到原来工作模式的任务。8.2.1.3动态电源管理操作系统支持的常见低功耗状态休眠(Hibernate)系统处于“休眠(Hibernate)”模式时,将保存运行状态的一份映像到外部存储器中,然后关闭计算机电源。这样重启电源时,运行就会恢复到按原来离开时的样子,如文件和文档就会按原来离开时的样子在桌面上打开。休眠模式比待机模式的脱机程度更深,因此有助于节省更多的电量,但重启时间更长。此外,休眠模式还具备更高的安全性。这是因为该模式不仅会像睡眠模式那样关闭对外设和硬盘的供电,而且还会切断对RAM内存芯片的供电。因此,又称为挂起到硬盘(SuspendtoDisk,简称STD)。8.2.1.3动态电源管理操作系统支持的常见低功耗状态休眠(Hibernate)(续)由于休眠模式会在关闭电源之前,将内存中的所有数据保存至(写入)外部存储器(一般是硬盘)上的参考文件中。退出休眠模式时,系统将恢复(读取)该文件,并将相应的数据重新加载到内存中。这样,系统就恢复到了之前的工作模式。由于休眠模式需要保存内存数据,因此与睡眠模式相比,该模式的恢复(唤醒)时间要更长。这种模式的优势在于其完全不耗电,因此不怕休眠后供电异常,但代价是需要一块和物理内存一样大小的硬盘空间。而这种模式的恢复速度较待机模式慢。休眠状态的计算机系统几乎和通常关机一样安静,用户还可以完全切断电源,而内存的数据(即运行状态)不会由于断电而丢失。与待机相比,休眠一般难以通过外部设备来唤醒的,它需要和正常开机一样启动系统;不过和开机相比,休眠后启动系统无需一个一个进程地来启动,只须要将硬盘中的内存镜像读取到内存中即可,因此速度较开机还是快得多。8.2.1.3动态电源管理操作系统支持的常见低功耗状态睡眠(Sleep)“睡眠(Sleep)”模式结合了待机和休眠的所有优点。将系统切换到睡眠状态后,系统会将内存中的数据全部转存到硬盘上的休眠文件中,然后关闭除了内存外所有设备的供电,让内存中的数据依然维持着。这样,当用户想要恢复的时候,如果在睡眠过程中供电没有发生过异常,就可以直接从内存中的数据恢复,速度很快;但如果睡眠过程中供电异常,内存中的数据已经丢失了,还可以从硬盘上恢复,只是速度会慢一点。不过无论如何,这种模式都不会导致数据丢失。此外,睡眠模式也不是一直不变地持续下去的,如果系统进入睡眠模式一段时间后没有被唤醒,那么还会自动被转入休眠状态,并关闭对内存的供电,进一步节约能耗。8.2.1.3动态电源管理操作系统支持的常见低功耗状态实现这些低功耗状态节能,一方面需要操作系统的支持,另一方面也要求硬件提供相应的支持,如支持高级配置和电源接口(ACPI),这样的协同才能实现上述功能。当空闲时间(又称非活跃时间)达到指定长度,或者检测出电池电量不足时,操作系统可自动将计算机系统置于各种相应的低功耗状态,从而达到整个系统节能的目的。8.2.1.4动态电压/频率调整(DynamicVoltage/FrequencyScaling)某些新的CPU可以让软件动态的改变工作电压和频率通常两者按一定比例同步的修改,电压上升,可以运行的最高频率上升某些时候CPU上执行的任务并不一定要求很快完成比如在Windows事件循环中idle阶段的一些处理此时可以将CPU频率改慢,同时CPU电压改低→两者都对降低功耗有贡献8.2.1.4动态电压/频率调整动态电压/频率调整技术实例:SpeedStep、EIST、C&Q技术SpeedStep是由Intel公司推出的,对IntelCPU进行功耗控制的一项技术。后来Intel发展了该技术,现在一般统称为EIST(EnhancedIntelSpeedStepTechnology,增强型智能变频)。此技术最早用在IntelPentium3-M处理器上,现在IntelPentium46xx、PentiumM、PentiumD、酷睿(Core)、Atom等多种系列上都采用了此技术。此技术的基本原理是通过调整处理器的电压和频率,来减少其功耗和发热,当然随着电压和频率的降低,处理器的处理速度也会随之有所降低。采用此技术的系统,不仅更加节能,而且不需要安装大功率散热器来散热,也不用担心长时间使用因温度过高导致电脑不稳定。8.2.1.4动态电压/频率调整动态电压/频率调整技术实例:SpeedStep、EIST、C&Q技术对于AMD处理器,该公司推出了两种与EIST类似的CPU节流技术。一个是C&Q(Cool'n'Quiet)技术,俗称“凉又静”。该技术用在了它的桌面和服务器处理器生产线上。其目标不是去延长电池寿命,因为它并没有用在AMD移动处理器上,而是为了产生少的热量。当处理器的任务不是很重时,该技术会根据处理器的任务量的多少来调用和关闭一些晶体管,这样可减少散热需求,并据此将系统风扇逐渐下降到较低速度,从而产生更凉爽、更安静的操作,这恰好是该项技术的名字来由。8.2.1.4动态电压/频率调整动态电压/频率调整技术实例:SpeedStep、EIST、C&Q技术同样,要实现C&Q功能,系统必须满足以下条件:支持C&Q的处理器、支持C&Q的主板和相应的BIOS、适当的BIOS设置、操作系统的支持和正确的系统设置。另一种CPU节流(CPUthrottling)技术是AMDPowerNow。该技术主要用在移动处理器上,而在桌面系统上也能找到一些支持的CPU,如AMDK6-2+。该技术以每秒30次的频率“侦察”处理器的负荷情况,根据实际情况动态更改工作频率和电压,从而达到降低发热和功耗的目的。8.2.1.5时钟门控(ClockGating)技术时钟门控技术是通过另一种途径来实现节能的,它通过关闭和开启相关模块的时钟来实现功耗控制的。此技术最早在诸如OMAP3之类的手机传统芯片家族中应用,而Intel从Pentium4处理器也开始采用它来实现节能。采用时钟门控技术,如果在当前的时钟周期内,系统没有用到某些逻辑模块,则切断这些模块的时钟信号,关闭模块的电路使其逻辑开关不改变状态,这样仅需要保留漏电流而其切换功率消耗接近于零,从而达到降低功耗的效果。而当有工作要做时,重新激活模块的时钟。以上过程又称裁剪时钟树(pruneclocktree)。从某种意义上来说,时钟门控实际上是可变频率时钟的一种极限情况——即只有零和最高频率两种值。为实现此技术,要求每个模块——又称功能单元块(FunctionalUnitBlock,FUB)——都包含有时钟门逻辑电路,也就是说,要实现时钟树的裁剪必须有附加逻辑部件来保证。时钟门控有几种实现形式。一种是通过软件的手工时钟门控,此方法中,由驱动来开启或关闭指定空闲控制器所使用的不同时钟。另一种是自动时钟门控,此方法中,硬件能被告知或自己检测到是否有工作在做,然后如果指定时钟不再需要的话则关闭它。这些模式互相影响、融合。例如,一个内部桥或总线可能会使用自动门控,这样它始终被门控关闭着,直到处理器或DMA引擎需要使用它才结束。而总线上的外围设备如果在软件上没有使用到的话,则可能被驱动程序中的门控相关代码关闭。8.2.2软件的考虑

程序设计中的低功耗遵循的主要的原则和建议有:1.低功耗优化的最基本原则低功耗优化的最基本原则尽量减少处理器和各种外设的工作时间。当不需要某个外设和不需要处理器运算时,尽可能地把处理器和外设的功耗降低或关闭。由于处理器的功耗在系统的总功耗中所占比例较大,因此要尽可能缩短处理器的工作时间,较长地处于空闲方式或掉电方式是软件设计降低嵌入式系统功耗的关键。8.2.2软件的考虑2.总体建议是:高性能=低功耗基本上所有软件层次的性能优化的措施对于降低功耗都是有积极作用的:算法层次优化→减少运算次数→降低CPU频率要求实现层次优化减少完成同样的运算次数所需的CPU时钟数→降低CPU频率要求减少内存数据搬运次数→减少总线、内存的功耗一般来说,在电压固定的大多数情况下,短暂时间内以峰值速度运行而长时间地处于深度空闲状态,比长时间以低时钟率(即工作频率)运行而仅以短时间处于轻度空闲状态,节能的效率要高得多。因此,同样的任务以最短的时间运行完,然后进入空闲状态,比以较长的时间运行完,然后才进入短暂的空闲状态,消耗的电能要少得多。采用快速算法也可以降低功耗,这实际上也是遵循了高性能等于低功耗这条建议。8.2.2软件的考虑3.尽量使用功耗低的硬件来实现任务完成同样的任务可以选择不同的硬件来实现,然而不同的硬件的功耗开销是不一样,应该选择功耗低的硬件来实现。一般地,寄存器访问的能耗是最低的,高速缓存访问的能耗比主存访问的能耗低。因此在程序设计时应该尽量遵循以下建议:尽量有效使用寄存器。分析高速缓存行为来发现主要的高速缓存冲突。尽可能在存储系统中使用页模式访问。8.2.2软件的考虑4.轮询是低功耗优化的大敌。程序在等待状态改变或者访问外设时可能会采用轮询(poll)的方法,此方法有时又称“飞速旋转”(spinning)代码。轮询让处理器重复执行几条指令,其功率消耗与繁重计算任务基本相当,而其作用仅仅是等待状态改变,却无法让等待期进入空闲状态,造成功耗的大量浪费。因此,在低功耗设计中,应该尽量避免使用轮询,而使用替代方法。例如,对外设的访问使用中断方式来代替轮询;客户-服务器协作模型中,将客户端不停地查询服务,改为服务器主动推(push)服务给客户端;在线程同步时,如果需要查询状态改变,可以使用操作系统提供的事件量(event)、信号量(semaphore)等服务来实现。8.2.2软件的考虑5.事件驱动的程序设计方法从软件设计方法来说,低功耗程序应该尽量遵循事件驱动的程序设计。所谓事件驱动的程序设计就是程序设计成响应事件的模式:当有事件来就运行处理事件;当没有事件到达,或事件处理完程序放弃处理器处于“休眠”状态。这里说的事件是广义的事件,包括用户的输入、网络通信事件、进程/线程同步时的事件等。在Windows系统中,事件驱动被称为消息驱动。采用事件驱动设计的程序,使处理器的利用率特别高:只有真正有事情要处理时才运行,无事情处理时,让出处理器,这样操作系统和硬件就能在处理器让出的时间内及时地侦测到处理器处于空闲状态,从而做出降低功耗的操作。事件驱动的程序设计方法在嵌入式系统的一个特殊分支领域——无线传感器网络——中几乎被当做铁的纪律。8.2.2软件的考虑6.减少程序中类似于轮询的周期性操作前面说轮询操作使系统消耗不必要的电能,而实际上,程序中一些不必要的周期性触发或运行的操作同样有着与轮询类似的消耗不必要的电能的效果。Moblin中的TicklessIdle技术实际上是操作系统内核程序遵循此原则采取的改进,即去除内核中周期性的定时操作。此外还有很多Linux应用程序中常见的不必要的周期性触发或运行的操作。例如鼠标移动(每秒1次,在屏保中常用)、音量改变(每秒10次,在混频器程序中常用)。这些常见的不必要的周期性触发或运行的操作,会导致系统从空闲状态中不必要地唤醒,应该引起我们的注意,小心地加以避免或改进,否则它们会轻易地抵消掉各种节能技术带来的功耗节省。8.2.2软件的考虑7.通信、数据采集上的低功耗建议在数据采集中,A/D转换需要消耗功率,采集的速度越快,则消耗的功率越多,而产生的数据量也越大,处理器需要花费越多的时间来处理数据,从而功耗越大。因此数据采集时中尽量降低采集的速率。在通信模块设计中,尽量地提高传送的波特率(每秒钟串行口传送的数据位数)。提高通信速率,就意味着通信时间的缩短,因而减少了通信时高功耗的时间,降低了总的功耗。同理,在使用WiFi通信时,应多使用突发(burst)模式来传输数据,这样可以缩短通信(特别是发送数据)的时间,便于WiFi设备尽快进入空闲状态。传感器网络中,此建议的形式稍微有所变化:减少网络中传输的数据的容量就能节省网络内部处理所消耗的能量。因此在传感器网络中应该尽量减少通信数据量,而不是单纯地缩短通信时间。8.2.2软件的考虑8.外设通信和界面设计上的低功耗建议如果外设支持动态电源调整,尽量用突发(burst)模式来访问数据比如本来播放一个大小为2MB的视频文件以每秒200KB读数据的话需要10s的时间,但是如果在第一秒以2MB速率读数据的话,后9秒相应外设可以进入休眠状态。GUI如果不是一定需要用16位色就够了,24位/32位色意味着更多的计算和内存数据的搬移→更高的功耗8.2.2软件的考虑9.建立电源感知的程序嵌入式系统(如MID、上网本等)的电源经常在连接外接电源和未连接外接电源(即使用电池电源)状态之间切换,这两种电源状态对软件的功耗要求完全不同,前者对功耗不敏感,但多半也会要求性能优先,而后者对功耗敏感,因此需要在性能和功耗之间进行平衡。对此,应用程序应当检测出设备当前使用电源的类型,做出与电源相关变化相适应的调整,即达到电源感知(power-aware)的效果。此外电源管理中存在一些潜在的可能会影响软件行为的因素,如设备电池低于特定阈值时转入关闭状态,以及自动休眠等。应用设计时也应考虑这些电源管理事件带来的环境变化,重视这些因素给运行可能带来的影响,做出相应的应对,这就达到某种电源管理感知的效果。例如,应用正在进行耗时的运算(如冗长的浮点运算、查询循环系统、复杂的图形重现等),就可能被这些电源管理事件所中断或暂停,作为应对措施之一是需要及时地保存现场,在环境允许时,及时从中断状态中恢复。此外还可以针对电源进行某种防御性编程。如提前考虑到用户将会启动的任务(例如,播放电影)。提前确定是否有足够的电池电量来完成该任务,并且如果根据电池电量的当前状态不能成功完成,则要在任务启动时向用户报警。程序通过多种可能的方式开来读取电源的状态,来决定程序应该采取的行动。8.2.3硬件的设计使用低功耗工艺的器件改善芯片的电路设计和制造工艺,是一种在物理级别上获得节能效果的技术。如:SoI(绝缘体上硅结构),High-K(高介电常数)等。在保证吞吐率的情况下,降低总线宽度总线越宽,需要驱动的信号越多,功耗越大尽量选用低电压版本的器件例如:1.8vMobileDDRSDRAMvs2.5V标准DDRSDRAM8.2.3硬件的设计节能的电路设计和制造工艺例子其中之一是采用超低电压(UltraLowVoltage,ULV)技术的处理器。ULV系列处理器一方面降低处理器核心电压,另一方面有选择地缩减处理器的核心数量甚至尺寸,从而从硬件上(物理上)实现功耗的控制。此外,与ULV处理器类似,45纳米制造工艺也是从硬件层面上降低处理器的功耗,只不过其技术涉及面更广一点。总体来说,45纳米制造工艺能将处理器内部晶体管间的切换功耗降低近30%,将晶体管切换速度提高20%,而减少栅极漏电流10倍以上,源极向漏极的漏电流5倍以上。这就为芯片带来更低的功耗和更持久的电池续航时间,同时拥有更多的晶体管数目以及更小尺寸。IntelAtom就采用了45纳米制造工艺节能技术。随着制造工艺的发展,制造精度的进一步提升,芯片在其尺寸越来越小的同时,其物理功耗也就越来越低。8.3Moblin的功耗控制技术Moblin作为基于IntelAtom的软件平台,其突出的特点之一是对低功耗的重视和支持。Moblin功耗控制和管理包括了多个方面的技术和组成部分,这些组件实现的层次不同,有的集成在Linux内核中,如TicklessIdle;有的作为Moblin基础层的一个模块出现,如设备和总线功耗管理;有的则以工具的形式出现,如PowerTOP、BLTK等。这些组件大部分不是Moblin所特有的,如TicklessIdle技术已应用于当前各种Linux中,很多Linux也配备了BLTK。8.3Moblin的功耗控制技术

下面我们其中几个组件重点介绍一下:1.TicklessIdle无滴答空闲(TicklessIdle),有的翻译成“非固定频率”、“没有空循环”等,是一种用在Linux内核中用以提高功耗节省能力的技术。传统的Linux内核对处理器使用一个周期定时器,来记录系统状态,调度负载平衡、维持各种处理器定时器事件等。早期的定时器频率一般是100Hz,而新内核则使用250Hz或1000Hz。然而,当处理器空闲时,这些周期定时事件却消耗着大量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论