标签: disk-io

快速Linux文件计数用于大量文件

当有大量文件(> 100,000)时,我正试图找出找到特定目录中文件数量的最佳方法.

当存在那么多文件时,执行"ls | wc -l"需要相当长的时间才能执行.我相信这是因为它返回了所有文件的名称.我试图占用尽可能少的磁盘IO.

我已经尝试了一些shell和Perl脚本无济于事.有任何想法吗?

linux shell disk-io

119
推荐指数
8
解决办法
9万
查看次数

如何在不缓存的情况下测量文件读取速度?

我的java程序花了大部分时间来阅读一些文件,我想优化它,例如,通过使用并发,预取,内存映射文件或其他.

没有基准测试的优化是无意义的,所以我进行了基准测试.但是,在基准测试期间,整个文件内容都缓存在RAM中,与实际运行时不同.因此,基准测试的运行时间要小得多,而且很可能与现实无关.

我需要以某种方式告诉操作系统(Linux)不要缓存文件内容,或者更好地在每次基准测试运行之前清除缓存.或者可能消耗大部分可用的RAM(32 GB),因此只有一小部分文件内容适合.如何操作?

我正在使用卡尺进行基准测试,但在这种情况下我认为没必要(它绝不是微基准测试),我不确定这是个好主意.

java benchmarking caching disk-io caliper

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

存储/检索数据结构

我在Python中实现了一个后缀树来进行全文搜索,并且它的工作非常好.但是有一个问题:索引文本可能非常大,因此我们无法将整个结构放在RAM中.

在此输入图像描述

图像:单词的后缀树BANANAS(在我的场景中,想象一棵大100000倍的树).

所以,研究一下它我找到了一个pickle模块,一个很好的Python模块,用于从文件中"加载"和"转储"对象,然后猜猜是什么?它与我的数据结构完美配合.

因此,长话短说:在磁盘上存储和检索此结构的最佳策略是什么?我的意思是,一个解决方案可能是将每个节点存储在一个文件中,并在需要时从磁盘加载它,但这不是最好的想法(太多的磁盘访问).


脚注:虽然我已将此问题标记为,但编程语言并不是问题的重要部分,磁盘存储/检索策略确实是重点.

python ram disk-io data-structures

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

是否可以从多个线程写入同一文件的不同部分?

我可以从多个线程(在典型的PC上)同时写入同一文件的不同部分吗?我的意思是只有一个磁头,所以写入只能以某种顺序执行,即不是并行执行,对吧?

编辑:

我正在编写一个对大型二进制文件进行排序的程序,但大部分时间仍然花在磁盘I/O上,所以我只是想知道通过并行执行I/O可以获得额外的速度.

c io disk-io

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

性能:BufferedOutputStream与FileWriter

我一直用a FileWriter来用Java写文件到文件.显然你也可以使用一个BufferedOutputStream.在仔细阅读了两个javadoc之后,我似乎无法分辨哪个是更快/更有效.

所以我问:这两种文件I/O方法之间是否存在性能差异(即使是最小的)?如果是这样,它们是什么?为什么?如果没有,为什么它们实际上是一样的?

是否存在一个优先于另一个的情况?提前致谢!

java performance file-io filewriter disk-io

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

I/O延迟会导致简单的UPDATE在MySQL中占用几秒钟吗?

我的MySQL应用程序遇到性能降低运行时的一些UPDATE,INSERTDELETE查询.在这个问题中,我只讨论一个特定问题UPDATE,因为它足以证明问题:

UPDATE projects SET ring = 5 WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

UPDATE通常足够快,大约0.2ms,但是时不时(足以成为一个问题)需要几秒钟.这是日志的摘录(见第4行):

 ~ (0.000282) UPDATE `projects` SET `ring` = 5 WHERE `id` = 1
 ~ (0.000214) UPDATE `projects` SET `ring` = 6 WHERE `id` = 1
 ~ (0.000238) UPDATE `projects` SET `ring` = 7 WHERE `id` = 1
 ~ (3.986502) UPDATE `projects` SET `ring` = 8 WHERE `id` = 1
 ~ (0.000186) UPDATE `projects` SET `ring` …
Run Code Online (Sandbox Code Playgroud)

mysql vps disk-io

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

C磁盘I/O - 在读取文件的相同偏移量后写入将使读取吞吐量非常低

背景:

我正在开发一个与数据库相关的程序,我需要按顺序将脏元数据从内存刷新到磁盘./ dev/sda1是volumn格式,因此将逐块访问/ dev/sda1上的数据,如果按顺序访问,则块在物理上相邻.我使用直接I/O,因此I/O将绕过文件系统的缓存机制并直接访问磁盘上的块.

问题:

在打开/ dev/sda1之后,我将读取一个块,更新块并将块重新写回/ dev/sda1开头的相同偏移量.

代码如下 -

//block_size = 256KB
int file = open("/dev/sda1", O_RDWR|O_LARGEFILE|O_DIRECT);
for(int i=0; i<N; i++) {
    pread(file, buffer, block_size, i*block_size);
    // Update the buffer
    pwrite(file, buffer, block_size, i*block_size);
}
Run Code Online (Sandbox Code Playgroud)

我发现如果我不做pwrite,读取吞吐量是125 MB/s.

如果我执行pwrite,读取吞吐量将为21 MB/s,写入吞吐量为169 MB/s.

如果我在pwrite之后pread,写吞吐量是115 MB/s,读吞吐量是208 MB/s.

我也试过read()/ write()和aio_read()/ aio_write(),但问题仍然存在.我不知道为什么在读取文件的相同位置后写入会使读取吞吐量如此之低.

如果一次访问更多的块,就像这样

pread(file, buffer, num_blocks * block_size, i*block_size);
Run Code Online (Sandbox Code Playgroud)

问题会缓解,请参阅图表.

c performance read-write disk-io throughput

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

写入数据库时​​,Python 3中的SQLite3出现磁盘I / O错误

我是一名刚开始使用python的学生,我的任务是创建一个关系数据库管理系统。我想我走的很远,但是我似乎撞墙了。这是我的代码:

import csv
import sqlite3

conn = sqlite3.connect('unfccc.db')
c = conn.cursor()

c.execute('''CREATE TABLE unfccc (
        Country TEXT, 
        CodeCountryFormat TEXT, 
        NamePollutant TEXT, 
        NameYearSector TEXT, 
        NameParent TEXT, 
        Sector TEXT, 
        CodeSector TEXT, 
        CNUEDSPD TEXT
        )''')

def insert_row(Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD):
    c.execute("INSERT INTO unfccc VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD))
    conn.commit()

with open('UNFCCC_v20.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter='\t')

    counter = 0

    for row in readCSV:
        insert_row(row[0], row[1], row[2], …
Run Code Online (Sandbox Code Playgroud)

python sqlite relational-database disk-io

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

谁能解释一下 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
查看次数