问题标签 [disk-io]

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.

0 投票
2 回答
1219 浏览

.net - 将日志写入 SSD 的最佳方式

我们有一个执行大量日志记录的应用程序。我们登录的介质是 SLC SSD 驱动器,但是我们开始在现场看到一些故障。我们可以关闭日志(我们这样做),有日志级别(我们有)但是有时工程师打开日志以诊断故障并忘记将其关闭,这会导致一段时间后 SSD 出现故障。

查看日志代码,我们将日志条目保存到队列中,每 5 秒迭代一次集合并使用File.AppendAllText将行写入文件。

根据MSDN,这会写入文件然后关闭它。

什么是更好的机制来实现相同的功能但防止(或减少)对 SSD 的损坏?

在软件启动时打开一个FileStream,在使用期间写入流并在软件退出之前关闭会更好吗?这将如何缓解磁盘级别的情况?涉及哪些过程以及这比打开文件并立即关闭它更好。使用FileStream“感觉”更好,但在进行更改之前我需要更具体的理由。

也许还有我们没有考虑过的更好的方法。

0 投票
0 回答
91 浏览

disk - QEMU 中的辅助 IDE 通道似乎不起作用

当我尝试在 QEMU 中等待辅助 IDE 控制器中的第一个磁盘空闲时,inb(0x177) 总是返回 0)

后续步骤:

我尝试通过执行以下操作将第三个磁盘添加到 QEMU:

1) 创建一个新的空白磁盘映像 2) 在 QEMU 选项中将映像添加为 hdc 3) 创建一个名为 ide.c 的新文件来处理辅助通道。(使用端口 0x17* 而不是硬件手册中指定的 0x1F*)

在 ide.c 中,我有以下内容来检查辅助控制器是否存在:

&它表明它确实如此。

但是检查设备不忙不起作用。有人知道这是为什么吗?

0 投票
1 回答
155 浏览

c++ - C++ - 在基于磁盘的向量中管理引用

我正在开发一组向量类,它们都派生自一个抽象向量。我这样做是为了在我们使用这些向量的软件中,我们可以在向量之间快速切换而不会破坏任何代码(或者至少将故障最小化,但我的目标是完全兼容)。所有的向量都匹配。

我正在研究一个基于磁盘的向量,该向量主要符合 STL 向量实现。我这样做是因为我们需要处理包含各种格式数据的大量内存不足文件。磁盘向量通过使用序列化和反序列化类的模板专业化/多态性来处理对磁盘的数据读/写。数据序列化和反序列化已经过测试,并且可以正常工作(到目前为止)。在处理对数据的引用时会出现我的问题。

例如,

给定一个 DiskVector dv,调用dv[10]将获得磁盘上的一个点,然后在那里寻找,读出字符流。该流被传递给反序列化器,它将字节流转换为适当的数据类型。一旦我有了价值,我就归还它。

这是我遇到问题的地方。在 STL 中,他们将其作为引用返回,所以为了匹配他们的风格,我需要返回一个引用。我所做的是将值存储在具有给定索引(在本例中为 10)的 unordered_map 中。然后我返回对 unordered_map 中值的引用。

如果这种情况在没有清理的情况下继续下去,那么 DiskVector 的用途就会丢失,因为所有数据都刚刚加载到内存中,这对数据大小来说是很糟糕的。因此,我稍后在进行其他调用时通过删除索引来清理此地图。不幸的是,如果用户决定长时间存储此引用,然后它在 DiskVector 中被删除,我们就会遇到问题。

所以我的问题

  • 有没有办法查看是否正在使用对某个实例的任何其他引用?
  • 由于开头描述的原因,有没有更好的方法来解决这个问题,同时仍然保持多态风格?
  • 是否可以构建一个可以作为引用的特殊类,但动态处理磁盘 IO,以便我可以直接返回它?
  • 还有其他想法吗?
0 投票
2 回答
523 浏览

assembly - 调试bochs中引导扇区的int 13h 02h函数

我想调试一个引导扇区,它会读取软盘。我在 bochs 中调试它并想检查它是读取成功还是失败。我知道AH寄存器可以返回代码,但我也想看看它读到了什么,所以我想检查物理内存中的es:bx堆栈,但它都传播了0x00。为什么?

此代码由 as86 编写并由 ld86 链接。我使用 bochs 磁盘映像创建工具创建了软盘映像,并使用命令创建dd bs=32 if=boot of=/dev/fd0 skip=1了这个可启动的软盘映像。

我注意到标志重新返回了 0x00000046,因此 CF 为 0,表明该操作没有错误。但是ax寄存器是0x0201。啊寄存器是 0x02 是错误码。我不知道为什么?

以下是我的 bochs 文件:

这是代码:

as86写的代码,我在第二个扇区的开头加了一个字。

我将调试信息粘贴到 bochs 中。

0 投票
1 回答
397 浏览

bash - Get current disk load

Since I can't use watch on iostat -dx 1 to get the current disk load, I'd like to know if there is an alternative way to do this, e.g., doing calculations with the values contained in /proc/diskstats and/or some other files.

0 投票
1 回答
414 浏览

disk-io - 如何获取具有实际输入值的磁盘 IO 跟踪?

我想从磁盘 IO 生成一些跟踪文件,但问题是我需要实际的输入数据以及时间戳、逻辑地址和访问块大小等。

我一直在尝试通过在 ubuntu VirtualBox 环境中使用“ blktrace | blkparse ”和“ iozone ”来解决这个问题,但它似乎不起作用。

blkparse 中有一个选项用于设置输出格式以显示数据包数据,-f "%P",但它不打印任何内容。

下面是我使用的命令:

在打印格式“%-12C\t\t%p\t%d\t%S:%n:%N\t\t%P\n”中,其他的都打印好了,但是“%P " 根本不打印。

有谁知道为什么不显示数据包数据?或者任何知道其他方法来获取具有实际输入值的磁盘 IO 数据包数据的人?

0 投票
0 回答
49 浏览

c# - 是处理多个进程的密集日志记录的标准方法

我的问题本质上是一般性的(没有提供代码)但我把它放在这个论坛上,因为我相信我可以得到明确的答案。

我有一台 Windows 8 机器,有 32 个内核。

我有一个主“应用程序”和 50 个独立客户端“应用程序”,它们都通过套接字 IPC 进行通信。

每个应用程序都需要记录它的活动,这会导致每个应用程序每秒产生 3/4 行文本。它们都写入同一个磁盘驱动器,但写入不同的文件。

我担心(尽管实际上不知道)由于每个应用程序都在等待写入磁盘的机会,可能会出现严重的阻塞。

任何人都可以建议这是否可能是一个瓶颈?有没有标准的方法来处理这类问题?

0 投票
1 回答
933 浏览

python - Python Writing a 512-byte block of zeros to /dev/sda works, but doesn't behave like it is working

Here I am trying to create a function to (eventually) support the wiping of drives using multiple specifications. The problem I am running in to, is when I try to write ZeroBlock to the disk, it gets written, but the code behaves as thou it has failed. the reason i say it worked is that it cleared the boot sector from the drive in my testing system

0 投票
3 回答
1474 浏览

c++ - C/C++ 的数据库写入与磁盘 I/O

所以我正在为一个新项目生成工作流。在第一阶段,将有一个 C/C++ 代码生成大量数据(大约 1TB 基于测试用例的二进制文件格式)。然后,该数据将被导入数据库,以便与将驻留在那里的另一个数据集进行比较。

我的问题是打开数据库软件的端口并直接写入那里或磁盘写入许多小文件(约 10 亿)并稍后导入数据库会更快吗?C 代码将在时间有限的集群上运行,因此需要快速完成。

0 投票
1 回答
1103 浏览

c# - Filestream.SetLength() "参数不正确"

所以我试图以增量方式填充媒体设备并测量速度,直到我将数据从 75% 写入 95% (我们没有完全填充它)

当我去设置文件长度时(例如:当磁盘有 3.72 GB 可用时,我试图制作一个 3.1GB 的文件,我得到以下异常

“参数不正确。”

堆栈跟踪

这是代码

我正在使用它以 25% 的增量将块写入可移动媒体,但在 75% 之后,我只写入 20% 的块。从 0-75% 可以正常工作,这是引发此错误的最后一个块。是的,我已经仔细检查了文件大小,还有空间!!!

有没有人有任何想法?我不知所措,我似乎无法在网上找到任何东西。