标签: io

找出瓶颈:Windows XP 上的磁盘 I/O

我们的一个开发箱出现了一个问题,即性能偶尔会下降。发生这种情况时,您可以听到硬盘抖动的声音,但我不知道是什么原因造成的。

这发生在高磁盘访问期间(读取/写入多 GB 文件),但不是每次或整个磁盘访问期间。这些文件也经过严格的碎片整理,以防止似乎正在发生的那种“寻求颠簸”。

我怀疑问题在于系统的防病毒软件或某些我不知道的磁盘索引服务(AFAIK,没有任何运行,但是......)。不幸的是,我的 Performance Monitor-fu 非常非常弱(好吧,几乎不存在),我不知道如何确认/反驳我的怀疑或找出真正的罪魁祸首。

更新:

Process Explorer为我找到了罪魁祸首——Java 快速入门和 Windows 搜索服务。关闭前者对性能有显着影响,而关闭后者则产生巨大影响(尽管没有获得任何文件访问权限)。两者执行的磁盘访问量都是其他任何进程的 5-20 倍。

感谢你的帮助!

performance windows-xp perfmon io bottleneck

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

经常访问的文件和 I/O 使用情况

我很好奇,从性能的角度来看,将所有文件存储在一个目录中与将每个文件存储在一个单独的目录中是否有优势?我不关心组织。

此外,这是假设文件将被经常访问——因此 I/O 使用率会很高。不涉及目录列表,文件将通过绝对路径拉取。

系统环境为Linux,CentOS 5.3。

linux hard-drive directory centos io

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

I/O 性能基准测试 Linux

刚刚用 iSCSI 设置了一个穷人的 SAN 并想对其进行基准测试。除此以外,还有哪些适用于 Linux 的良好 I/O 性能基准测试:

hdparm -tT /dev/sda1
Run Code Online (Sandbox Code Playgroud)

如何获得 IOPS 测量值?

谢谢。

io benchmark

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

如何测量每个设备的 IOwait?

我有一个服务器,它通过 NFS 导出主目录。它们位于软件 RAID1(/dev/sdb 和 /dev/sdc)上,操作系统位于 /dev/sda 上。我注意到我的%iowait报告topsar相对较高(与其他服务器相比)。值范围在 5-10% 之间,至于其他服务器(比这台服务器负载更多)与 0-1% 相同。当%iowait达到 12% 以上时,所谓的用户体验就会下降。然后我们会经历延迟。

我在日志中没有任何驱动器错误。我想避免使用试错法来玩驱动器。

如何找出哪个设备(/dev/sda、/dev/sdb 或 /dev/sdc)是瓶颈?

谢谢!

编辑:我使用 Ubuntu 9.10 并且已经iostat安装。我对 NFS 相关问题不感兴趣,但更多的是如何找到使系统变慢的设备。NFS 没有加载,我有 32 个线程可用,结果是

grep th /proc/net/rpc/nfsd
th 32 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Run Code Online (Sandbox Code Playgroud)

Edit2:这是iostat -x 1输出的一部分(我希望我没有在这里违反一些规则):

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          45.21    0.00    0.12    4.09    0.00   50.58

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz …
Run Code Online (Sandbox Code Playgroud)

linux nfs io iowait drbd

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

最大化虚拟文件系统的吞吐量

我一直在使用QEMU系统来构建软件。我已经遇到的问题是,该系统似乎从遭受极其缓慢的磁盘访问。这不一定是一个问题,因为它并不是真正耗时的操作,但我希望它尽可能快地工作。

以下是我为加速 I/O 所做的一切:

  • KVM 已启用。就仿真处理器速度而言,这就是白天和黑夜之间的区别。

  • Qemu-display none通过转发的 SSH 端口以模式运行,因此没有模拟 SDL 显示占用 CPU 周期。

  • 安装虚拟硬盘-o noatime,nodiratime以减少不必要的写入。

  • 硬盘映像(分别为 8 和 12 个演出)采用 qcow2 格式,并使用-o cluster_size=2M(这是最大值 - 默认为 65,536 字节)创建。引用手册页:“较小的簇大小可以提高图像文件的大小,而较大的簇大小通常提供更好的性能。”

  • 文件系统是带有-o extents选项的EXT4,手册页声称“这是一种更有效的编码,可以加快文件系统访问速度,尤其是对于大文件。”

  • 虚拟磁盘映像中没有存储任何快照。我不确定这是否会减慢他们的速度,但似乎会;记录快照时实际文件图像大小不会增加,所以我的猜测是数据以某种复杂的方式存储,因此快照和“工作”驱动器将共享一个集群,直到它被更改,然后整个 2 MB 集群被复制到新空间,然后数据被更改。巧妙但完全低效。

我的问题是我是否缺少提高硬盘效率的任何东西,或者过去人们为了实现接近本机的 I/O 速度而工作的方法。


以下是我观察到的其他一些事情:

  • 当我在虚拟主机上挂载硬盘时-o sync,系统速度变慢。这对我来说似乎违反直觉,因为写入虚拟硬盘驱动器(它只是我实际硬盘驱动器上的一个文件)在写入之前已经缓冲在 RAM 中。这本质上是对磁盘的双缓冲,使用两倍的 RAM。戏剧性的加速特别奇怪,因为执行 agrep ^Dirty /proc/meminfo从来没有超过 1 MB …

virtual-machines io qemu

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

Linux下如何防止视频服务的IO负载?

我目前正在 3 台服务器上通过 Nginx 提供会议视频;4 个内核、足够的内存(不使用交换)和 RAID-10,每台服务器有 8 个驱动器。不幸的是 iostat -xd 1 在所有 3 个服务器上都给了我 100% 并且 iotop 显示 Nginx 吃掉了 99-100%。

我一直在考虑分布式 FS(但哪一个有帮助?);除了购买新服务器(涉及所有开销......)之外,还有其他方法可以防止这种情况发生吗?

请注意,无法将视频放入内存中;太多了,而且太大了。分配也不能只在内存中放入几个。

performance hard-drive io performance-tuning

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

具有软件 RAID、LUKS 加密和 LVM 分区 KVM 设置的高 I/O 延迟

我发现了一个 Mumble 服务器的性能问题,我在上一个问题中描述了是由未知来源的 I/O 延迟问题引起的。由于我不知道是什么导致了这种情况以及如何进一步调试它,因此我在询问您对这个主题的想法。

我正在运行Hetzner EX4S 根服务器作为 KVM 管理程序。该服务器运行 Debian Wheezy Beta 4,并通过 LibVirt 使用 KVM 虚拟化。

服务器有两个不同的 3TB 硬盘,因为在报告 SMART 错误后更换了其中一个硬盘。第一个硬盘是 Seagate Barracuda XT ST33000651AS(512 字节逻辑,4096 字节物理扇区大小),另一个是 Seagate Barracuda 7200.14 (AF) ST3000DM001-9YN166(512 字节逻辑和物理扇区大小)。有两个 Linux 软件 RAID1 设备。一个用于未加密的引导分区,另一个用作加密其余部分的容器,使用两个硬盘驱动器。

后一个 RAID 设备内部有一个 AES 加密的 LUKS 容器。在 LUKS 容器内有一个 LVM 物理卷。虚拟机管理程序的 VFS 在描述的 LVM 物理卷上分为三个逻辑卷:一个用于 /,一个用于 /home,一个用于交换。

下面是块设备配置栈的示意图:

sda (Physical HDD)
- md0 (RAID1)
- md1 (RAID1)

sdb (Physical HDD)
- md0 (RAID1)
- md1 …
Run Code Online (Sandbox Code Playgroud)

io software-raid luks kvm-virtualization debian-wheezy

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

postgresql 服务器上奇怪的高 CPU I/O 等待

我目前真的在为一个性能问题而苦苦挣扎,当我的数据库服务器处于“重”负载时,我所有的数据库查询比平时多花费 1000 倍。

我有一台运行 ubuntu 12.04 并托管我的 postgresql 9.2 数据库的服务器。服务器在 Hetzner.de 上,它是 EX6s(8 核氙气,32Gb ram 和两个 3T HDD,在使用 ubuntus 软件 raid 的 RAID1 设置中)。当我运行大量查询(我经常在晚上完成)时,我发现几乎所有 CPU 使用量都花在了 CPU I/O 等待上。我安装了新的遗物监控,我似乎找不到任何其他迹象表明可能是这种 CPU I/O 等待的根本原因,这显然是我的性能和吞吐量的瓶颈。

所以问题是,这个 CPU I/O 等待是什么,它在等待什么?

我添加了所有我可以从下面的新遗物中获得的概览图表。我在看什么?一定有明显的瓶颈吧?我应该在哪里潜水?

数据库服务器 CPU 使用率 - 告诉我有问题的邪恶者 https://rpm.newrelic.com/public/charts/cEdIvvoQZCr

数据库服务器平均负载 https://rpm.newrelic.com/public/charts/cMNdrYW51QJ

数据库服务器物理内存 https://rpm.newrelic.com/public/charts/c3dZBntNpa1

数据库服务器磁盘 I/O 使用 - 如您所见,磁盘似乎没有被充分利用(几乎没有) https://rpm.newrelic.com/public/charts/9YEVw6RekFG

数据库服务器网络 I/O (Mb/s) - 该网络是一个千兆内部网络,所有通信都在其上进行。 https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7

按挂钟时间排名前 5 位的数据库操作 https://rpm.newrelic.com/public/charts/dCt45YH12FK

数据库吞吐量 https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI

数据库响应时间 https://rpm.newrelic.com/public/charts/fPcNL8WA6xx

更新:

做完之后,sudo iostat -k 1我开始怀疑了。我得到了很多这样的输出,这是我在 NR 中看不到的:

Device:            tps    kB_read/s    kB_wrtn/s …
Run Code Online (Sandbox Code Playgroud)

postgresql central-processing-unit io performance-tuning

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

将 SSD 缓存设备添加到我的 ZFS 存储会提高性能吗?

服务器有 4GB 的 RAM,我的 zpool 由 15.5k SAS 驱动器组成,排列如下:

    NAME          STATE     READ WRITE CKSUM
    tank          ONLINE       0     0     0
      raidz1-0    ONLINE       0     0     0
        c0t2d0    ONLINE       0     0     0
        c0t3d0    ONLINE       0     0     0
        c0t4d0    ONLINE       0     0     0
        c0t5d0    ONLINE       0     0     0
        c0t6d0    ONLINE       0     0     0
        c0t7d0    ONLINE       0     0     0
        c0t8d0    ONLINE       0     0     0
      raidz1-1    ONLINE       0     0     0
        c0t10d0   ONLINE       0     0     0
        c0t11d0   ONLINE       0     0     0
        c0t12d0   ONLINE       0     0     0
        c0t13d0 …
Run Code Online (Sandbox Code Playgroud)

zfs ssd cache io

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

关于Page Cache和dirty_background_bytes的误解

我已经研究了一段时间了,但事情并不符合我的期望,但我不知道是因为有什么不对,还是我的期望是错误的。

所以,我有一个内存超过 100GB 的系统,我将我的内存设置dirty_background_bytes为 9663676416(9GB)和dirty_bytes两倍(19327352832 或 18GB)

在我看来,这应该让我最多可以将 9GB 写入文件,但实际上它只是位于内存中,不需要访问磁盘。Mydirty_expire_centisecs是默认值3000(30 秒)。

所以当我运行时:

# dd if=/dev/zero of=/data/disk_test bs=1M count=2000
Run Code Online (Sandbox Code Playgroud)

并跑了:

# while sleep 5; do egrep 'Dirty|Writeback' /proc/meminfo | awk '{print $2;}' | xargs; done
Run Code Online (Sandbox Code Playgroud)

(以 kb 为单位打印脏字节,以 kb 为单位打印回写,在 5 秒快照时以 kb 为单位打印 WritebackTmp)

我本来希望看到它转储 2GB 到页面缓存中,在那里等待 30 秒,然后开始将数据写入磁盘(因为它从未超过 9GB 背景比率)

相反,我看到的是:

3716 0 0
4948 0 0
3536 0 0
1801912 18492 0
558664 31860 0
7244 0 0
8404 0 …
Run Code Online (Sandbox Code Playgroud)

linux performance io performance-tuning linux-kernel

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