当前位置:主页 > 云通信 > 正文

游戏 cdn_国内_建站网站系统

时间:2021-04-09 00:29 来源:埃里克云 编辑:埃里克云

核心提示

在前面的文章中,我讨论了遗留的ZFS write throttle的问题,这些问题会导致性能下降和延迟变化很大。然后,我介绍了Matt Ahrens和我设计的新OpenZFS write throttle和I/O调度器。除了解决ZFS中...

游戏 cdn_国内_建站网站系统

在前面的文章中,我讨论了遗留的ZFS write throttle的问题,这些问题会导致性能下降和延迟变化很大。然后,我介绍了Matt Ahrens和我设计的新OpenZFS write throttle和I/O调度器。除了解决ZFS中的几个问题外,新方法还设计为易于推理、测量和调整。在这篇文章中,我将介绍性能分析和调优——当然要使用DTrace。这些细节是为那些使用OpenZFS并试图优化性能的人准备的——如果你对ZFS只是一个偶然的兴趣,那就警告你自己!缓冲脏数据OpenZFS根据可调的zfs_dirty_data_max来限制系统上的脏数据量。它的默认值是内存的10%,最高4GB。权衡很简单:为OpenZFS保留的内存越少,为OpenZFS保留的内存越多,在限制之前,OpenZFS能够吸收较少的工作负载变化;在限制每个事务组中的数据之前,能够吸收更多的工作负载变化;每个事务组中的数据越多;同步每个事务组所用的时间越少;同步每个事务组所用的时间越多同步出每个事务组由于摊销更少而写入的元数据更少由于摊销更多而写入的元数据。大多数工作负载包含可变性。把脏数据看作是这种可变性的缓冲区。假设分配给OpenZFS存储池的LUN总共能够维持100MB/s。如果工作负载的写入速度始终为100MB/s,那么只需要非常小的缓冲区。如果工作负载在200MB/s和0MB/s之间振荡10秒,那么一个小的缓冲区将限制性能。800MB的缓冲区足以吸收整个20秒的周期,平均为100MB/s。只有200MB的缓冲区会导致OpenZFS在客户端尝试生成400MB时,在不到2秒的时间内,LUN可以刷新200MB的脏数据,从而开始限制写操作——插入人工延迟。跟踪存储池中未处理的脏数据量,以了解调整zfs_dirty_data_max的方法:一旦脏数据量超过限制的zfs_delay_min_dirty_百分比(默认为60%),写入限制就会生效。如果脏数据量在该阈值上下波动,那么可以通过增加缓冲区的大小来避免限制。如果指标保持在较低水平,则可能会减少zfs_dirty_data_max。请将此调整与系统上内存的其他使用进行权衡(较大的值意味着应用程序或OpenZFS ARC的内存更少)。更大的缓冲区也意味着刷新事务组将花费更长的时间。这与事务组提交到稳定存储(如创建或克隆新数据集)时发生的某些OpenZFS管理操作(同步任务)相关。如果这些命令的交互延迟很重要,请考虑将zfs_dirty_data_max bytes刷新到磁盘需要多长时间。您可以测量同步事务组的时间(回想一下,在任何给定时间最多有三个活动的事务组),如下所示:请注意,在调整单独的意向日志设备(SLOG)的大小时,zfs_dirty_data_max的值是相关的。zfs_dirty_data_max对内存中已写入主池的数据量设置了硬限制;最多,在任何给定的时间,大量数据都处于活动状态。这就是为什么像dddrive这样的小而快的设备是优秀的日志设备的原因。顺便说一句,想想几年前Oracle给ZFS存储设备带来的表面上的升级,用73GB的升级取代了18GB的"Logzilla"。I/O调度程序ZFS为所有IO类型提供了一个IO队列,而OpenZFS则为每种不同的IO类型提供了五个IO队列:同步读取(用于普通的按需读取)、异步读取(从预取器发出)、同步写入(到意向日志)、异步写入(大容量写入脏数据)和清理(清理和重新定位操作)。请注意,上面描述的大容量脏数据是在异步写入队列中调度的。有关相关可调参数,请参见vdev_queue.c:这些队列中的每个队列都具有可调值,可用于指定类型的未完成操作的最小和最大数量,这些操作可发送给叶vdev(LUN)。可调的zfs_vdev_max_active限制向单个vdev发出的IO数。如果其值小于zfs_vdev_Umax_活动可调参数之和,则最小值起作用。将调度每个队列的最小数量,并按优先级顺序从队列发出剩余的zfs_vdev_max_active。在较高的级别上,这些可调参数的适当值将特定于您的LUN。更高的最大值导致更高的吞吐量和潜在的更高的延迟。在某些设备上,例如具有不同硬件进行读写的存储阵列,可以将某些队列视为独立的;在其他设备(如传统的hdd)上,读和写可能会相互影响。调整这些值的一个简单方法是监视负载下的I/O吞吐量和延迟。将值增加20-100%,直到找到吞吐量不再增加但延迟可接受的点。异步写入由zfs_Dirty_data_max管理的脏数据通过异步写入写入磁盘。I/O调度程序处理异步写入与其他操作稍有不同。计划的并发异步写入数取决于系统上的脏数据量。回想一下,内存中的脏数据有一个固定的(但可调的)限制。对于少量脏数据,调度程序将只调度单个操作(zfs_vdev_async_write_min);其思想是在系统上没有太多写负载时保持同步操作的低延迟。随着脏数据量的增加,调度程序将通过发出更多的并发操作,使LUN更难清除这些数据。旧的行为是计划固定数量的操作,而不考虑负载。这意味着同步操作的延迟可能会大幅波动。在写出脏数据时,ZFS会用写操作攻击LUN,与同步操作争用,并增加它们的延迟。同步事务组完成后,会有一段时间的异步写入活动相对较低,在此期间同步操作将更快地完成。这种潜伏期的现象被称为"栅栏波"。新的OpenZFS I/O调度器针对一致性进行了优化。除了调整发送到设备的最小和最大并发操作数之外,还有两个与异步写入相关的可调参数:zfs_vdev_async_write_active_min_dirty_percent和zfs_vdev_async_write_active_max_dirty_percent。除了最小和最大操作计数(zfs_vdev_async_write_min_active和zfs_vdev_aysync_write_max_active),这四个可调参数定义了一个分段线性函数,该函数确定计划的操作数,如从注释中摘录的可爱ASCII艺术图所示:在相对稳定的状态下,我们希望看到未处理的脏数据量保持在最小和最大百分比之间的窄范围内,默认分别为30%和60%。如上所述,调整zfs_vdev_async_write_max_active,以在不影响延迟的情况下最大化吞吐量。增加zfs_vdev_async_write_min_active的唯一原因是附加写入对延迟几乎没有影响。虽然这可以用来确保数据更快地到达磁盘,但另一种方法是降低zfs_vdev_async_write_active_min_dirty_百分比,从而开始刷新数据,尽管脏数据积累较少。要调整最小和最大百分比,请同时观察延迟和计划的异步写入操作数。如果操作计数波动很大并影响延迟,您可能需要通过减小最小值和/或增加最大值来平缓斜率(请注意,如果您增加了zfs_vdev_async_write_active_max_dirty_percent,则可能需要增加zfs_delay_min_dirty_percent(请参阅下文)。写入延迟在LUN无法跟上传入写入速率的情况下,OpenZFS会人为地延迟写入以确保一致的延迟(请参阅本系列的上一篇文章)。在积累一定数量的脏数据之前,没有任何延迟。当有足够多的脏数据积累时,OpenZFS会逐渐增加延迟。通过延迟写操作,OpenZFS有效地推后客户端,通过人为地提高延迟来限制写入速率。有两个与延迟相关的可调参数:延迟开始前需要多少脏数据,以及延迟随着未处理脏数据量的增加而增加的因素。可调的zfs_delay_min_dirty_percent确定OpenZFS何时开始延迟写入。默认值为60%;请注意,在IO调度程序尽可能快地推出数据之前,我们不会开始延迟客户端写入(zfs_vdev_async_write_active_max_dirty_percent也默认为60%)。另一个相关的可调参数是zfs_delay_scale实际上是这里唯一的神奇数字。它大致相当于每秒最大操作数的倒数(以纳秒为单位),并用作比例因子。延迟写入是确保一致延迟的一个积极步骤。如果客户端确实推送的数据超出了系统的处理能力,那么就需要这样做,但是不必要的延迟写入会降低总体吞吐量。调优延迟有两个目标:减少或消除不必要的延迟,并在需要时确保一致的延迟。首先检查写入延迟的频率。这个简单的DTrace one liner实现了以下目的:如果延迟写入的百分比相对较小,则会增加允许的脏数据量(zfs_dirty_data_max),甚至推掉延迟开始的时间点(zfs_delay_min_dirty_percent)。当增加zfs_dirty_data_max时,请考虑系统上DRAM的其他用户,并注意少量的小延迟不会显著影响性能。如果许多写操作被延迟,客户机实际上是在尝试快速地推送数据

  • 企业云_哪里买_大数据网站 企业云_哪里买_大数据网站

    Delphix最近与AWS合作,帮助人们和团队加快并确保迁移到业界领先的Amazon Web服务云平台。AWS市场上的Delphix结合了AWS,加快了重要的迁移项目,并将时间从几周、几个月缩短到几天。客...

  • 云存储服务器_网站_云存储文件上传 云存储服务器_网站_云存储文件上传

    数据操作帮助人们与数据连接的方式因技术、用户和用例的不同而有很大差异。例如,数据民主化一直是分析界的话题,专注于为非技术用户提供回答关键问题和推动业务新见解所需...

  • 带宽和网速的关系_如何租用_工业大数据 带宽和网速的关系_如何租用_工业大数据

    在大多数人可能会做噩梦,梦到上班时忘了穿裤子,数据库管理员(DBA)的噩梦围绕着出现在工作中,被告知生产系统出现严重故障或其他高影响情况,而完全不知道。监控和警觉是...

  • 阿里服务器_如何选_物联网开发套件 阿里服务器_如何选_物联网开发套件

    几天前,在旧金山的纳斯达克中心,我见到了首席信息官Ken Piddington先生,他也是首席信息官的执行顾问。Ken说:"我和首席信息官和IT部门的首要任务是数据转换。"事实上,他经常听...

  • 阿里服务器_阿里云_国内物联网操作系统 阿里服务器_阿里云_国内物联网操作系统

    "对创新的需求正在增长,而且增长迅速,"埃森哲的吉滕德拉·卡瓦特卡尔(Jitendra Kavathekar)最近在旧金山举行的Delphix数据活动上评论道我们需要将人们与技术联系起来,推动全球的...

  • <strong>香港cn2服务器_什么是_大数据分析软件有</strong> 香港cn2服务器_什么是_大数据分析软件有

    数据的使用应该是无摩擦的,让数据消费者能够看到和访问所有版本的授权数据,而不必考虑位置、云平台或存储供应商。为了确保这些能力,企业实施解决方案,在管理数据的运营...

  • 数据云_怎么购买_云服务器哪便宜 数据云_怎么购买_云服务器哪便宜

    上周,我们的一个主要合作伙伴给我发了一封信,帮助他了解在Oracle和SQL Server上实现Delphix的方式之间的差异。如果您不熟悉Delphix动态数据平台(DDP),那么在您阅读完Oracle的支持和...

  • 负载均衡_如何租用_人工智能用的什么技 负载均衡_如何租用_人工智能用的什么技

    德尔菲斯工程和支持是非常了不起的人。他们继续寻求解决方案,不管需要多少时间,也不管他们面临支持异构环境、硬件配置和客户需求的复杂挑战。这篇文章是为了支持我们的团...

  • 大宽带服务器_海外_关系型数据库和非关 大宽带服务器_海外_关系型数据库和非关

    大家好!我又回到了"演示马鞍"上,来展示将数据从一个云复制到另一个云是多么容易。数据摩擦比比皆是,很少有地方像云迁移项目那样感受到数据摩擦。将数据传输到云中可能是一...