问题标签 [raid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 提高高速文件复制的写入速度?
我一直在尝试找出最快的方法来编写文件复制例程以将大文件复制到 RAID 5 硬件上。
平均文件大小约为 2 GB。
有 2 个窗口框(都运行 win2k3)。第一个框是源,大文件所在的位置。第二个盒子有一个 RAID 5 存储。
http://blogs.technet.com/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx
上面的链接清楚地解释了为什么 windows 复制、robocopy 和其他常见的复制实用程序会在写入性能方面受到影响。因此,我编写了一个 C/C++ 程序,它使用带有NO_BUFFERING
&WRITE_THROUGH
标志的 CreateFile、ReadFile 和 WriteFile API。该程序模拟ESEUTIL.exe,从某种意义上说,它使用2个线程,一个用于读取,一个用于写入。读取器线程从源读取 256 KB 并填充缓冲区。一旦填充了 16 个这样的 256 KB 块,写入器线程就会将缓冲区中的内容写入目标文件。如您所见,写入器线程在 1 个镜头中写入 8MB 数据。该程序分配了 32 个这样的 8MB 块……因此,写入和读取可以并行发生。ESEUtil.exe 的详细信息可以在上面的链接中找到。注意:我在使用NO_BUFFERING
.
我使用了 ATTO 等基准标记实用程序,发现我们的 RAID 5 硬件在写入 8MB 数据块时的写入速度为每秒 44MB。大约是每分钟 2.57 GB。
但我的程序每分钟只能达到1.4 GB。
谁能帮我确定问题是什么?是否有其他更快的 APICreateFile
可用?ReadFile
WriteFile
windows - 如何从 Windows 应用程序监控英特尔控制器上 RAID 阵列的状态?
我需要定期从我的 Windows 应用程序检查英特尔控制器上的 RAID 阵列的状态(或收到有关状态更改的通知)。具体来说,我需要查明 RAID 5 阵列是否正常,或者其中一个磁盘是否丢失。
我尝试解析raidcfg32
(可从英特尔站点获得,请参阅此自述文件)的输出,但它仅适用于我的应用程序需要监控的服务器之一。在其他服务器上raidcfg32
报告“不受支持的硬件”错误。我也试过CmdTool2
了,但是完全找不到控制器。
英特尔提供的唯一剩下的 RAID 阵列监控选项是一堆 GUI 应用程序(英特尔矩阵存储管理控制台、英特尔快速存储技术)。
有问题的控制器是:ESB2、631xESB/632xESB。
我相信我已经阅读了 Stack Overflow 上与我的问题相关的几篇文章,但没有一篇包含答案。在回答问题'<a href="https://stackoverflow.com/questions/2501855/can-i-get-raid-disk-status-by-using-ps">我可以通过以下方式获取 Raid 磁盘状态吗?使用 PS?',例如,所建议的实际上允许检查控制器而不是阵列是否健康(总是如此)。
我正在寻找的是一种访问状态信息的自动化方式(具体而言,来自 .NET 应用程序)。任何选项都是好的,无论是通过 WMI、.NET 或本机 API、控制台输出解析或其他方式。
我发现监视 RAID 状态的建议方法是通过 GUI 应用程序令人困惑。在具有数十台服务器的企业部署中使用哪些方法以编程方式执行此操作?
python - 使用 python 从磁盘处理大量数据的最有效方法是什么?
我正在编写一个简单的 python 脚本来读取和重建失败的 RAID5 阵列的数据,我无法以任何其他方式重建该阵列。我的脚本正在运行,但速度很慢。我的原始脚本以大约 80MB/分钟的速度运行。此后我改进了脚本,它以 550MB/分钟的速度运行,但这似乎仍然有点低。python 脚本位于 100% CPU,所以它似乎是 CPU 而不是磁盘受限,这意味着我有机会进行优化。因为脚本根本不是很长,所以我无法有效地分析它,所以我不知道是什么在吃掉它。这是我现在的脚本(或者至少是重要的部分)
粗体表示这个巨大文本块中的实际问题:
我可以做些什么来使这更快/更好吗?如果什么都没想到,我能做些什么来更好地研究是什么让这件事进展缓慢?(有没有办法在每行级别上分析 python?)我是否以正确的方式处理这个问题,还是有更好的方法来处理大量二进制数据?
我问的原因是我有一个 3TB 驱动器重建,即使它工作正常(我可以挂载图像 ro,循环和浏览文件很好)它需要很长时间。我用旧代码测量它需要到一月中旬,现在它要到圣诞节(所以它要好得多,但它仍然比我预期的要慢。)
Before you ask, this is an mdadm RAID5 (64kb blocksize, left symmetric) but the mdadm metadata is missing somehow and mdadm does not allow you to reconfigure a RAID5 without rewriting the metadata to the disk, which I am trying to avoid at all costs, I don't want to risk screwing something up and losing data, however remote the possibility may be.
linux - 在 Linux 中编写由多个文件组成的环回设备
嘿嘿,
losetup
在 Linux中使用文件来模拟块设备相对容易:
如果我想根据我从中获取内容的几个文件对自己的块设备进行编程,谁能给我一个提示?为了您的理解,我想假设从 file1 中获取字节 1-500 和 1.000-3.000,从 file2 中获取字节 501-999 和字节 3.001 到 5.000,以将它们作为组合块设备提供。我最喜欢的编程语言是 Python,我想尽可能在用户空间中编写我的程序。
对于 Windows,我找到了这样的实现。它被称为 FileDisk 和 HttpDisk,可以在这里找到:
在此先感谢和问候,雷纳
performance - PAGEIOLATCH_SH 与部分驱动器故障有关?
相关技术:SQL Server 2008 R2 RAID 5 (4 disk) Windows Server 2008
首先,我们的 RAID 5 阵列有一个磁盘部分故障。未检测到故障,但在周末意外断电和 UPS 发生故障后,驱动器指示灯周期性地呈琥珀色闪烁(稳定的琥珀色表示驱动器故障)。停电发生在星期六,在注意到“PAGEIOLATCH_SH”错误并阅读SQL Server 中的 PAGEIOLATCH_SH 等待类型是什么?(除其他外)。我们已经更换了驱动器并让它重建,但我仍然看到错误。
该查询通过一个在基础表上具有多个索引的视图来针对一个大表。我重建了索引,重新保存了视图以期获得更好的执行路径,并简化了查询。什么都没有解决这个问题。该查询自 2006 年以来一直运行没有问题,升级到 SQL Server 2008 或 R2 也没有问题,这两者在首次可用时都已应用。
最初执行计划显示出相当均匀的分布,但现在它显示在第二项“排序(Distinct Sort)”上占多数,在Index Seeks中分配了大约30%。过去的时间在 2 到 10 秒之间,但现在超过 2 分钟。
在这一点上,我不确定如何找出导致问题的原因。我认为要么是我没有找到损坏的数据,要么是查询已将自身重新优化为远非最佳的东西,或者 RAID 出现问题而不会发出任何灯或警告。
我已经完成了 PAGEIOLATCH_SH 和类似问题通常需要的操作,并且索引不仅看起来正确,而且到目前为止已经工作了多年。我还尽我所能确保驱动器正常工作。我的问题基本上是在这种情况下如何诊断问题的根源?
编辑:发现服务器实际上并没有因停电而关闭,但它旁边的机架却发生了。不知道为什么驱动器部分故障,但在这一点上,它似乎与中断是巧合的。
cassandra - cassandra 复制或突袭
使用传统的 RDBMS,我们在大多数情况下习惯于 RAID10,但如果使用 cassandra RF=2,那么我们正好有一个副本作为备份,那么在这种情况下为什么不使用或为什么使用 RAID10。
我认为这将减少 cassandra 的复制开销。
此外,在 RAID10 中,如果硬盘驱动器发生故障,则整个节点将继续工作,但如果使用复制,那么一个硬盘驱动器故障会导致整个节点停机?
虽然我认为使用 RAID10 每次写入都会有开销,但是当 SSTABLE 已满时会完成刷新,因此不会一直感觉到。
amazon-web-services - 您知道如何使用 EBS 设置 Raid 10 的指南吗?
我找到了一篇文章http://alestic.com/2009/06/ec2-ebs-raid,但是我应该怎么做才能在 EBS 上设置 Raid 10?
io - 优化在自定义 c 平台上运行的自定义 c 应用程序的性能
这个问题是软件和硬件相关问题的混合体。
我有一个使用 VS2010 用 c 语言编写的自定义应用程序,它需要一些高端硬件(该应用程序需要每分钟咬住大约 50 GB 的数据)。它在 64 位 Win 7 下运行。现在我有一个带有双氙气 5690 芯片(每个十六进制核心)的戴尔 t7500,所以有 12 个物理核心和 24 个逻辑核心。该设置有 48 gig 的 ram,它需要它,因为该应用程序一次使用大约 30-40 gig 的数据。
该应用程序是多线程的(很高兴看到所有 24 个逻辑核心都以 100% 最大化!),所以事情已经从 cpu-bound 变成了 io-bound。(在我将应用程序重写为多线程之前,数据回载大约需要 36 小时;现在大约需要 1.5 小时,但我仍然需要将其缩短到 15 分钟以下)。
我能够修改软件,以便它可以利用多驱动器配置。
我可以在 24 个核心之间拆分 io 工作。我需要大约 3 TB 的存储空间。最好的方案,虽然不切实际,是拥有 48 个独立的 SSD,以便运行的 24 个线程中的每一个都有自己的专用驱动器用于读取和写入吗?(该应用程序不会执行大量小文件读取/写入操作;相反,它会读取/写入 1-2 GB 的块。)
假设在一个系统上获得那么多驱动器是不可能的,那么就驱动器数量而言,这种设置的限制是什么?我在 t7500 主板上有 5 个插槽。什么样的控制器/配置在这里最快?SATA?SCSI?突袭0?
还是我可以在软件中做一些事情来让很多硬件问题变得不那么重要?谢谢。
c - 优化大量写入磁盘
我有一个 C 应用程序(VStudio 2010,win7 64 位)在具有双至强芯片的机器上运行,这意味着 12 个物理内核和 24 个逻辑内核,以及 192 gig 的内存。编辑:操作系统是 win7(即 Windows 7、64 位)。
该应用程序有 24 个线程(每个线程都有自己的逻辑核心)进行计算并填充大量 C 结构的不同部分。当所有线程都完成时(并且线程都完全平衡,因此它们同时完成),该结构约为 60 GB。
(我可以控制硬件设置,因此我将使用 6 个运行 RAID 0 的 2tb 驱动器,这意味着写入的物理限制大约是平均顺序写入速度的 6 倍,或大约 2 gig/秒。)
将其写入磁盘的最有效方法是什么?显然,I/O 时间将使计算时间相形见绌。从我对这个主题的研究来看,似乎 write() (而不是 fwrite() )是要走的路。但是在设置缓冲区大小等方面,我可以在软件方面进行哪些其他优化。 mmap 会更有效吗?
linux - 当组件设备可能已经包含 ext2 文件系统时编写 mdadm 脚本
我想使用 mdadm 编写 m1.large EC2 实例上的两个临时存储设备的条带化脚本(显然,amis 并不总是包含设备信息,因此一旦启动阵列,我就不能只创建一个新的 ami)。
问题是,EC2 实例上的临时存储通常使用文件系统预先格式化,导致 mdadm 说:
并等待输入。我确信有一种方法可以在 mdadm 中针对非交互式情况(例如在 fsck -y 中)自动回答这些类型的提示,但我似乎无法弄清楚(这不是 --force)。我知道我可以使用 dd 将设备归零,但这似乎是一个相当大锤的解决方案,我确信很容易完成。