问题标签 [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 投票
1 回答
5569 浏览

android - StrictMode:创建 SharedPreference 时的 StrictModeDiskReadViolation

我有一个带有以下提供程序方法的匕首设置项目:

这是来自应用程序的代码onCreate()

在 API 27 模拟器上运行项目会导致以下行为:

使用以下日志:

D/StrictMode:StrictMode 策略违规;~duration=275 毫秒:android.os.StrictMode$StrictModeDiskReadViolation:策略=196671 违规=2 在 android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440) 在 java.io.UnixFileSystem.checkAccess(UnixFileSystem.java: 251) 在 java.io.File.exists(File.java:807) 在 android.app.ContextImpl.getDataDir(ContextImpl.java:2197) 在 android.app.ContextImpl.getPreferencesDir(ContextImpl.java:517) 在 android。 app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:714) 在 android.app.ContextImpl.getSharedPreferences(ContextImpl.java:368) 在 android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167) 在 android.preference.PreferenceManager.getDefaultSharedPreferences (PreferenceManager.java:

这意味着,从磁盘读取以下内容: res.exists()

因为这发生在 UI 线程上 -StrictModeDiskReadViolation结果。

Afaik,不存在从 StrictMode 配置中排除某些代码块(例如按包名称)的 API。实际上,我可以将SharedPreferences相关内容留在 UI 线程上从磁盘读取。

由于这个问题,我不想关闭读/写 StrictMode 规则。

问题

从这种情况中正常恢复的正确方法是什么?

0 投票
1 回答
391 浏览

python - 何时触发写入磁盘?

在 Python 中,我可以使用f= open(<filename>,<permissions>). 这将返回一个对象f,我可以使用f.write(<some data>).

如果此时我访问原始最终文件(例如cat从终端访问),它会显示为空:Python 存储了我写入对象的数据,f而不是实际的磁盘文件。如果我然后调用f.close(),则其中的数据f将持久保存到磁盘文件中(并且我可以从其他程序访问它)。

我假设数据被缓冲以改善延迟。但是,如果缓冲的数据增长很多,会发生什么?Python会发起写操作吗?如果是这样,内部细节(什么影响缓冲区大小?磁盘 I/O 是在 Python 中处理还是由另一个程序/线程处理?Python 是否有可能在写入期间挂起?)将不胜感激。

0 投票
0 回答
24 浏览

filesystems - 修改原始磁盘会损坏文件系统吗?

一些操作系统允许程序编辑原始磁盘,绕过文件系统。如果我错了(即只允许原始读取,而不是原始写入),请纠正我。

如果我是正确的,那么如果程序修改原始磁盘,修改一些块,但不更新磁盘表(空闲块列表,FAT 等)会发生什么?文件系统会自动更新或通知程序、损坏或其他原因吗?

例如,如果什么都不做,文件系统可能会向包含这些数据的块写入一个新文件,认为它们当前是空闲的(如果空闲块列表没有被程序更新)。

0 投票
1 回答
504 浏览

linux - 如何实现与fio一样高的磁盘写入速度?

我买了一张Highpoint的HBA卡,里面有4个三星960PRO。正如官网所说,这张卡可以执行7500MB/s的写入和13000MB/s的读取。

当我在我的 ubuntu 16.04 系统中使用 fio 测试这张卡时,我得到了大约 7000MB/s 的写入速度,这是我的测试参数:

我在卡里做了一个raid0,做了一个xfs文件系统。如果我想使用诸如“open(),read(),write()”之类的函数,我想知道如何达到fio执行的磁盘写入速度或我的控制台应用程序中的“fopen()、fread()、fwrite()”等函数。

0 投票
0 回答
202 浏览

c - Linux fread() 上的预读效果

我对大型二进制文件的预读性能有疑问。

我的策略是

  • 使用 fread() 从大型二进制文件中读取固定大小的块。(例如 10MB)
  • 使用 usleep() 休眠 n 毫秒,仅用于预读性能测量。

  • 重复此操作,直到读取整个文件。

然后,我对上述策略进行了实验,以测量预读性能。环境是

  • CentOS 7
  • 4GB 二进制文件
  • 块大小为每 2MB 2 ~ 300MB
  • 我测试的睡眠时间是 5、10、50、100、300 毫秒并且没有睡眠

结果: 在此处输入图像描述

正如您在结果中看到的,当块大小较小且睡眠时间足够长以进行预读时,读取时间很短。chunk size 越大或 sleep time 越短,读取时间越接近 20 秒左右。

然后,我想对该图进行回归分析。我应该使用什么功能?我的策略的复杂性是什么?

0 投票
1 回答
25 浏览

amazon-web-services - 亚马逊实例上的磁盘缓存/性能问题

我观察到 EC2 实例上的一些行为,我认为这是由于磁盘缓存造成的。基本上:我有一个计算任务需要顺序访问大量数据(约 60 个 1GB 文件)。我已将这些文件包含在我的亚马逊图片中。我还使用 mpi 启动约 30 个进程来同时访问不同的文件。顺便说一句,该程序受计算限制,但磁盘 IO 需要相当大的运行时间。我注意到,当我启动实例并在第一次尝试时执行计算时,速度非常慢。top 命令将显示进程不时挂起,cpu 使用率约为 60%。但是,一旦该运行完成,如果我开始另一次运行,它会快得多,并且 cpu 大约是 99%。那是因为我的数据仍在网络驱动器 (EBS) 上并且自动加载到本地实例磁盘缓存(SSD 驱动器?)?我在 C5n.18xlarge 上运行它,但它仅被列为 EBS。有没有人有类似的经历?还是其他解释?

0 投票
1 回答
704 浏览

amazon-web-services - 为什么 IO 99.99 % 即使磁盘读写看起来很小

我们的一个 Kafka 代理在 8 核机器上的平均负载非常高(平均约为 8)。虽然这应该没问题,但我们的集群似乎仍然面临问题,并且生产者未能以通常的速度刷新消息。

经过进一步调查,我发现我的 java 进程等待 IO 的时间太长了,几乎 99.99% 的时间,到目前为止,我相信这是一个问题。

请注意,即使负载相对较低(大约 100-150 Kbps)也会发生这种情况,我已经看到即使在集群中输入 2 Mbps 数据时它也能完美运行。

我不确定这个问题是否是因为 Kafka,我假设这不是因为所有其他代理在此期间都运行良好,并且我们的数据在 5 个代理之间完美分配。

请帮助我找到问题的根本原因。我应该去哪里寻找问题?有没有其他工具可以帮助我调试这个问题?

我们在 m5.2x 大型机器上使用 1 TB 安装的 EBS 卷。

请随时提出任何问题。

itop 快照

在此处输入图像描述

GC 日志快照 在此处输入图像描述

0 投票
1 回答
345 浏览

c++ - 如何在 Ubuntu 上提高我的程序磁盘读取速度?

我有一个 C++ 程序read_bin来读取磁盘上数百个 200MB 的二进制文件。读取文件的程序使用ifstream

我在终端中启动数百个read_bin进程以同时读取单个二进制文件。

例如

它是一个SSD磁盘,但我iotop用来监控读取速度通常25MB/s很慢。

我可以看到 IO 已满 99%。

并运行top

我试图增加缓冲区bytesToRead,但读取速度仍然很慢25MB/s。通常,SSD 速度可以快到500MB/s.

如何修复我的程序以最大化磁盘读取速度?

0 投票
0 回答
31 浏览

php - 处理过期缓存文件(磁盘 io 使用)的最佳做法是什么?

我有一个 web php 应用程序,我使用文件缓存,我以这种格式存储我的数据

因此,如您所知,我不使用 mfiletime,而是使用文件中写入的“时间”。

每次文件过期我都删除了。我现在没有任何问题,但我正在挖掘更多用于教育目的

我的问题是,每次缓存文件过期时,使用 DISK IO 的最佳做法是什么:

  • A)删除文件并用新数据写入新文件
  • B)直接用新数据重写文件
  • C) I/O Disk 使用率没有太大差异
0 投票
1 回答
362 浏览

insert - mybaits Batch ExecutorType 和 for_each Xml 性能对比

我有一个要使用我的诱饵插入数据库的记录列表。以前,我的代码是这样的:

Mysql使用这种方法是可行的,但我发现由于项目数量的原因,服务器上存在动态增量 DiskIO 。

由于我很少访问 MySql 配置,并希望解决这个高磁盘 io 问题,我找到了一些可能的解决方案:

  1. 用于ExecutorType.BATCH_sqlSession
  2. 在单个插入语句中插入多个值,例如: insert into Item values <foreach collection="list" item="item" index="index" separator=","> (#{item.a}, #{item.b}...) </foreach>

有谁知道哪一个适合解决我的高磁盘IO问题以及这两种解决方案之间的主要区别是什么?谢谢。