标签: disk-io

谁能解释一下 docker stats 中 NET I/O 与 BLOCK I/O 之间的区别?

我在运行命令时获得了以下 redis 统计信息docker stats

docker 统计输出

我想了解 NET I/O 和 BLOCK I/O。我读了一些文档,他们说 BLOCK I/O 与磁盘操作相关。但我不确定这个 NET I/O 是什么。任何人都可以帮助我了解这些吗?

networking operating-system virtual-machine disk-io docker

6
推荐指数
1
解决办法
1万
查看次数

getExternalCacheDir() 应该在主线程之外调用吗?

我在 Android 应用程序上调用函数getExternalCacheDir(),这导致某些拥有以下设备(HUAWEI P30 lite、Galaxy A40、Xperia XZ3)的 Android 10 用户出现 ANR。

我的 ANR 的堆栈跟踪如下

The "main" (tid=1) thread is performing disk I/O.
"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x72dfcb58 self=0x73e23a5000
  | sysTid=12158 nice=0 cgrp=default sched=0/0 handle=0x73e3913ee8
  | state=D schedstat=( 378582885 304333911 539 ) utm=23 stm=14 core=7 HZ=100
  | stack=0x7fc28de000-0x7fc28e0000 stackSize=8192KB
  | held mutexes=
  at libcore.io.Linux.access (Native method)
  at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
  at libcore.io.BlockGuardOs.access (BlockGuardOs.java:71)
  at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
  at android.app.ActivityThread$AndroidOs.access (ActivityThread.java:7816)
  at java.io.UnixFileSystem.checkAccess (UnixFileSystem.java:281)
  at java.io.File.exists (File.java:815) …
Run Code Online (Sandbox Code Playgroud)

java android disk-io android-anr-dialog

6
推荐指数
0
解决办法
516
查看次数

任何人都可以为Windows推荐磁盘I/O基准测试软件吗?

我想测试不同条件下文件系统的性能.

具体来说,我想在没有压缩的情况下测试Windows虚拟机的性能,并且在"普通硬盘"和USB磁盘上都进行压缩测试,因为看看到底有什么区别会很有趣.

我需要的是一个程序,可以测试文件系统的不同方面(随机访问,顺序读/写等),并制作与我的博客很好的漂亮图表.优选地,应用程序应该是自动化的,因此我可以将其添加到启动,这样每次运行的时间相同,我可以重复运行以进行验证.

当我开始测试时,我可以在这里发布一个结果链接.现在正处于规划阶段.

windows filesystems benchmarking hard-drive disk-io

5
推荐指数
1
解决办法
2万
查看次数

如何在 Linux 上安全地、事务性地替换文件?

我能想到的替换文件内容的最天真、最糟糕的方法是:

f = open('file.txt', 'w')
f.write('stuff')
f.close()
Run Code Online (Sandbox Code Playgroud)

显然,如果该操作在关闭之前的某个时刻失败,您将丢失原始文件的内容,而不一定完成新内容。

那么,什么是完全正确的方法来做到这一点(如果有的话)。我想它是这样的:

f = open('file.txt.tmp', 'w')
f.write('stuff')
f.close()
move('file.txt.tmp', 'file.txt') # dangerous line?
Run Code Online (Sandbox Code Playgroud)

但这是完全原子的和安全的吗?实际执行移动的正确命令是什么?如果我有另一个进程打开了连接file.txt我假设它将保留指向原始文件的指针,直到关闭。file.txt如果另一个进程试图在移动过程中打开怎么办?

我并不关心我的进程获得的文件版本,只要它们获得完整的、未损坏的版本即可。

linux filesystems file disk-io

5
推荐指数
1
解决办法
550
查看次数

为什么Mongodb在Linux上的性能比在Windows上好?

我创建了一个程序来测试Linux(Ubuntu)和Windows(Server2008)上的分片MongoDB性能.随着插入大量记录,Windows的磁盘活动时间非常高(100%),那么性能非常糟糕.但在Ubuntu上,磁盘的util%为60%~70%,性能优于Windows.我可以说Linux上的MongoDB性能更好吗?

linux windows performance mongodb disk-io

5
推荐指数
1
解决办法
7973
查看次数

Postgres创建/恢复在亚马逊ec2上花费了大量时间

我有一个亚马逊ec2实例(SAY S1)(4核-7GB内存)使用Ubuntu 12.04,它正在运行我的网络应用程序postgresql 9.1.所有postgres数据都存储在100 GB的不同ssd卷(非root)上.(现在写下它目前只有26%满).

突然间,一天或两天的postgres行动开始耗费大量时间.创建命令(52秒)并恢复数据库(现在9分钟,最多50秒).

通过在运行postgres命令时运行iostat,我可以确认其ec2卷的IOPS已达到其限制(3 IOPS/GB等于100 IOPS的300 IOPS).运行此命令后可以在下面看到它iostat -d 5 -x -p xvdf.

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdf              0.35     2.28    1.20  298.99    19.65 13082.19    87.29    23.42   78.03   64.19   78.09   3.29  98.75

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdf              0.00     1.80    0.00  297.40     0.00 13067.20    87.88   126.47  420.75    0.00  420.75   3.35  99.76

Device:         rrqm/s   wrqm/s     r/s     w/s …
Run Code Online (Sandbox Code Playgroud)

postgresql optimization amazon-ec2 iostat disk-io

5
推荐指数
1
解决办法
109
查看次数

Linux fread() 上的预读效果

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

我的策略是

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

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

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

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

结果: 在此处输入图片说明

在结果中可以看到,当块大小较小且休眠时间足够长以进行预读时,读取时间较短。块大小越大或睡眠时间越短,读取时间越接近约 20 秒。

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

c linux fread disk-io

5
推荐指数
0
解决办法
186
查看次数

Windows 10 docker-compose 占用 100% 磁盘使用率

Docker 在 Windows 10 上非常慢。我执行了很多任务以使索引不在文件夹上运行,并尝试加快速度。该进程似乎占用了 100% 的 CPU,这很好,但也占用了 100% 以上的磁盘 IO,这是一个巨大的瓶颈。在 Linux 或 Mac 上运行不到 10 秒的任务在 Windows 上需要 40 分钟以上才能完成。

这根本无法以任何有意义的方式使用。docker-compose 坚持以 150MB/s 的速度写入磁盘而不是使用 ram 是否有原因?我有大量的内存。我实际上可以将整个 docker-container 系统存储在 ram 中,并且还剩下大约 10GB。

顺便说一句,虽然坚持 docker 只在 Linux 服务器上运行是可行的,但开发必须支持 windows、linux 和 mac。我不敢相信测试没有揭示 Windows 10 支持严重缺乏,不,关闭防病毒软件绝对不是一个选择。许多 docker 开发人员没有适当的权限来执行此操作,建议 docker 用户禁用防病毒功能是一个令人难以置信的请求。还有,禁用杀毒之类的还是不能解答为什么docker占用100%的磁盘IO。

disk-io docker docker-compose

5
推荐指数
2
解决办法
7609
查看次数

合并数百万文件的最快方法

有 8100 万个文件 (!) 存储在远程机器上的一个目录中。所有文件都以“.paintedHaploDiversity”结尾。我想将这些文件合并到一个allOutputs_3.5在父目录中调用的文件中。更具体地说,每个文件包含两行或三行。第一行是我可以忽略的标题。在剩下的一两行中,其中之一具有2第四列中的值。对于每个文件,我想复制2第二列中有 a 的整行,并向其中添加文件名(不包括扩展名“.paintedHaploDiversity”)。我将此文件名称为“simID”。

有关信息,远程计算机在 MAC OS X 10.11.6 (15G22010) 上运行。这是一个简单的桌面。因此不涉及网络(在我的 ssh 命令之外访问远程机器)。

我第一次尝试

for f in *;
do
   simID=${f%.paintedHaploDiversity}
   awk -v simID=${simID} 'NR>1{if ($4==2) {printf simID"\t"; print}}' $f >> ../allOutputs_3.5
done
Run Code Online (Sandbox Code Playgroud)

但它很慢。我估计需要的时间要几个月甚至几年!然后,我试过了

awk 'FNR==1{simID=substr(FILENAME, 1, length(FILENAME)-22)}FNR>1{if ($4==2) {printf simID"\t"; print}}' * >> ../allOutputs
Run Code Online (Sandbox Code Playgroud)

但它似乎并没有更快。只是作为速度测试,我也考虑过

find . -exec cat '{}' ';' > out
Run Code Online (Sandbox Code Playgroud)

但它又很慢。考虑到问题可能来自正则表达式扩展*,我尝试通过两个 C 样式循环再现每个文件的名称来循环遍历每个文件。

for ((bigID=1; bigID <= 9 ;++bigID)); do
   for ((rep=1; rep <= 9000000 ;++rep)); …
Run Code Online (Sandbox Code Playgroud)

bash performance merge file disk-io

5
推荐指数
1
解决办法
366
查看次数

SCAN和CSCAN算法

我很难理解SCAN和CSCAN磁盘调度算法的工作.我理解FCFS,Closest Cylinder Next但是听说SCAN类似于电梯机制而感到困惑.我的书说,对于收到的订单:[10 22 20 2 40 6 38](当盘位于20时)SCAN在开始时移动服务[(20)20 22 38 40 10 6 2]; 这需要移动[0 2 16 2 30 4 4]个气缸,总共58个气缸.模式[(20)20 22 38 40 10 6 2]如何出现?

computer-science operating-system disk disk-io

4
推荐指数
1
解决办法
2万
查看次数

用top和awk获取iowait

对于基准脚本,我需要在进行一些操作后立即提取iowait%。

目前,我发现的最好方法是:IOWAIT =top -bn2 | awk '$1~/Cpu/ {print $6}' | sed -n '2p' | tr -d '%wa,'

正确的输出类似于2.1:

首先,如果我不精确地定义“ -bn2”,那么我不知道为什么,如果我只捕获1次,它总是0.1%。所以我进行了两次捕获,然后awk获取iowait字段,然后sed第二行,然后删除了“%wa”

仅供参考,这是输出 top -bn2 | grep Cpu

Cpu(s):  2.8%us,  0.4%sy,  0.0%ni, 96.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st<br>
Cpu(s):  0.2%us,  2.9%sy,  0.0%ni, 87.1%id,  9.5%wa,  0.0%hi,  0.3%si,  0.0%st
Run Code Online (Sandbox Code Playgroud)

我的问题如下:当我得到100.0%的一列(例如空闲)时,它移动了列号,因此我的awk不再起作用,我得到了“ 0.0%hi”字段。

我的问题如下:

-如何告诉awk使用“%wa”进入列?

如果有人对我要做的事情有最好的方法,那么我当然很愿意提出建议!

谢谢

regex bash awk iowait disk-io

2
推荐指数
1
解决办法
1965
查看次数

StrictMode:创建SharedPreference时的StrictModeDiskReadViolation

我有一个带有匕首设置的项目,具有以下提供者方法:

@Module(...)
abstract class AppModule {

  @Module
  companion object {
    ...
    @Provides
    @Singleton
    @JvmStatic
    fun provideSharedPreferences(@AppContext context: Context): SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
  }

  @Binds
  @AppContext
  @Singleton
  abstract fun provideAppContext(application: Application): Context

}
Run Code Online (Sandbox Code Playgroud)

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

override fun onCreate() {
  if (BuildConfig.DEBUG) {
    StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDialog()
        .build())

    StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .build())

    Timber.plant(Timber.DebugTree())
  }
  ...
  super.onCreate()
}
Run Code Online (Sandbox Code Playgroud)

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

使用以下日志:

D/StrictMode:StrictMode策略违规; 〜duration = 275 ms:android.os.StrictMode $ StrictModeDiskReadViolation:policy = 196671 violation = 2 at android.os.StrictMode $ AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440)at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java: 251)在java.io.File.exists(File.java:807)的android.app.ContextImpl.getDataDir(ContextImpl.java:2197)在Android上的android.app.ContextImpl.getPreferencesDir(ContextImpl.java:517).在Android.pretent.PreferenceManager.getDefaultSharedPreferences的android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)的android.app.ContextImpl.getSharedPreferences(ContextImpl.java:368)上的app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:714) (PreferenceManager.java:526)com.some.package.di.module.AppModule $ Companion.provideSharedPreferences(AppModule.kt:112)...

这意味着,是 …

android disk-io kotlin android-sharedpreferences android-strictmode

1
推荐指数
1
解决办法
1622
查看次数

c#磁盘I\O效率提升一次读取多行

众所周知,磁盘 I\O 很昂贵。我通常使用 C# 从 .txt 文件中一次读取一行。我突然想到,如果 C# 为您提供一种一次读取 100 行的方法,它需要更少的磁盘往返次数,从而减少时间。这可能吗?有没有人对如何提高效率有任何想法。我在大约一个小时内浏览了一个 100 万行的文件,一次读取和处理一行。我想看看我是否可以大大减少这个时间。

c# text-files disk-io

0
推荐指数
1
解决办法
44
查看次数