我的SD卡似乎运行缓慢。我有一张ADATA 16 GB SDHC Class 10卡。我检查了兼容性列表,该列表列出了具有相似规格的卡,并指出该卡“正在工作”。即使是一些简单的任务,例如在小目录中获取目录列表,也可能在我第一次请求时花费几秒钟。有什么工具可以用来验证我从SD卡中获得什么样的性能?另外,是否可以进行任何配置更改以使SD卡更快地响应?

我将Raspberry Pi用作无头BitTorrent种子箱,所以我遇到的所有内容都是只是在命令行上运行。我使用240/16分割以确保具有最大的可用内存量。

更新

以@Krzysztof Adamski的身份进行一些测试后,建议使用“ dd ”,我收到了一些不错的结果,读取速度为20 MB / s,写入速度为10 MB / s。但是,它似乎仍然存在一些I / O速度问题。测试时,我在后台运行了“ dd”命令,然后在顶部运行,以查看发生了什么。我注意到“ mmcqd”进程占用了相当多的处理器使用率,介于5%和10%之间。我在Internet上四处张望,发现许多人报告说“ mmcqd”用尽了很多CPU。然后我运行以下命令以同时测试读写操作

sudo dd if=/dev/mmcblk0 of=test.dat bs=1M count=1024


运行此命令时,我的吞吐量仅为977 kB / s,而“ mmcqd ”报告说,处理器的使用率每5到10秒介于10%到25%之间,在此之后,处理器使用率将降至零。因此,我进行了更多测试。我在后台运行了以下两个命令,然后观察顶部的运行情况。

sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 &
sudo dd if=/dev/zero of=test.dat bs=1M count=1024 &


在这种情况下,“ mmcqd”的峰值将达到35%的处理器使用率,但是吞吐量要好得多,读取速度约为7.5 MB / s,写入速度约为5.3 MB / s。

似乎这里发生了某种问题,大量写入导致“ mmcqd”锁定系统。这会导致传输守护程序在等待SD卡时,一旦速度过快,就会将其减慢到几乎为零。运行传输守护程序时,我还看到“ mmcqd”的使用率很高。

评论

您确定SD卡会导致此问题吗?您首先可以尝试使用另一张卡来排除系统的其他部分吗?

您是否检查了系统日志和内核日志中与mmc设备相关的消息?有些卡根本无法在Raspberry Pi中使用。其他一些则需要一些调整才能可靠地工作。

SD卡链接已移动

@ Ray023谢谢。我更新了链接。将来,您可以只编辑问题。我想是因为您是新手,所以修改不会立即进行,而是会保存下来,以供原始海报或其他高级用户批准。

#1 楼

测试卡读取速度:

有两种简单的方法来测试读取速度(列出目录仅是读取操作):



使用dd命令:

sudo dd if=/dev/mmcblk0 of=/dev/null bs=8M count=100

这将从您的SD卡中读取800MB数据并将其丢弃到/ dev / null。如果花费大量时间,则可以将count = 100更改为count = 10,以仅读取80MB。命令完成后,它应该以读取速度打印一条消息。您应该至少达到几MB MB / s。


使用hdparm命令:

sudo hdparm -t /dev/mmcblk0

这应该为您提供与第一个命令相似的速度结果,并且至少应为几MB / s。


测试卡的写入速度:

没有简单的方法可以测试写入速度,因为这样做必须将一些数据实际写入卡中。如果您想在较低级别(忽略文件系统)上执行此操作,则必须覆盖卡上的某些数据,并且您可能不想执行此操作。如果您有交换分区,则可以执行此操作,因为它可以轻松停用(使用swapoff -a),使用dd测试(使用dd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25)然后重新创建(使用mkswap /dev/{yourswappartitionnanehare})。

如果没有交换分区,还可以使用dd命令测试文件系统的写入速度:

dd if = / dev / zero of = / home / pi / testfile bs = 8M count = 25

这将在/home/pi/testfile中创建200MB文件。您可以使用所需的任何其他文件名。

注意:


虽然测试速度快,但请确保系统中没有其他程序在运行(例如torrent应用程序等)。 。
测试后,您可以检查dmesg命令的输出以查看是否有有关mmc子系统的消息。
确保已安装了最新的固件。不论SD卡速度如何,都有补丁。
您可能还需要检查一些较旧的固件,因为可能会有一些退化。最简单的方法(但不是最好的方法)是测试基于不同日期构建的不同系统映像。较难的方法是使用github并签出固件文件的历史版本。


评论


我的赞美在MacBook Air上,将img文件写到6级4GB SD卡上时,速度为1.4 MB /秒。对PI的读取测试报告为20 MB /秒!

– ScrollerBlaster
2012年10月15日在22:23

我有相同的东西。我的读取速度约为500MB /秒。我错了吗?

–最暗的N2O
17年11月27日在14:59

#2 楼

对于SD卡性能而言,访问是顺序访问(如dd)还是小块随机访问非常重要。 SD卡,尤其是高级SD卡,似乎已针对顺序访问进行了优化,这对于存储照片或视频非常有用。但是,由于要读取和写入许多小文件,因此对于运行SD卡OS来说,随机访问更为重要。我想bittorrent也会产生一些随机访问。

这两个讨论线程包含许多SD卡基准测试和讨论。通常,发现随机写入速度对于运行卡OS的响应能力具有决定性作用。该速度通常远低于顺序写入的速度,后者是制造商喜欢报告的速度。 SD卡类别基于连续速度,实际上较低的类别(4或6)可能更适合于树莓派使用。

iozone工具可测量许多不同访问模式的速度。我在这里发布了在树莓上编译iozone的简要说明。

评论


有趣的答案。好一个。

–活动
2012年10月24日,下午5:29

非常有趣,因为我刚买了10倍的4倍...当当! :-(

–BerggreenDK
13年2月28日在9:09

@BerggreenDK:也许将来您可以将这些卡用于其他目的,然后也许您会很高兴购买10类卡。

–梦幻岛
15年6月27日在18:24

随机写入速度在诸如启动顺序或目录列表之类的典型任务中影响不大。即使对于torrent,4KB写入的测试结果也无关紧要:典型的块大小约为1MB,除非您没有可用的RAM,否则磁盘缓存会将这些分组为更大的顺序写入。

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年2月8日在11:48

#3 楼

对于RasPI板载插槽,在RasPI网站上有大量讨论:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=63&t=5057&sid=ee346e3e7cea48d2858a143bcf086362

没有时间阅读所有12页的讨论内容,但是CLK信号似乎有问题。

#4 楼

您写“ bittorrent”,这触发了我的猜测/答案。

torrent协议从随机播种机中随机接收软件包。

一旦您开始在任何文件系统上使用torrent,它就会变得零散。这将严重损害性能。

根据我对SDCARD的了解,其运行的FAT / FAT32和更糟的碎片处理能力。

,所以请找到一种对碎片进行碎片整理的方法SDCARD,或从中复制所有文件,然后重新安装操作系统。

最后,编写一个LOT(就像Bittorrent引擎一样)会比正常使用更快地撕开SDCARD。我并不是说这样做是错误的,事实上我已经考虑过要和自己相似。但是-这可能是您遇到问题的原因。
我希望有一个torrent客户端,一旦下载+“保留的上载时间”达到标准,该客户端便会自动将下载的文件传输/移动到整个其他目标完成。

然后进行碎片整理会更快。

评论


碎片如何应用于SD卡?我认为碎片只是旋转磁盘上的一个问题,因为文件将位于非顺序扇区上,从而导致读/写头必须在整个位置移动才能访问文件。在固态存储(例如SD卡)上,这不是问题。但是,我将同意您关于bittorrent造成的写入操作数量的意见。我认为这与问题有关。将其与RPi上的少量内存结合使用(我的内存有256 MB),这似乎是导致磁盘访问缓慢的秘诀。 SD卡通常也很慢。

– Kibbee
13年2月27日在13:28

好的,一旦您有很多文件片段,FAT / FAT32结构就会变得很糟糕而且很慢。而且,小树莓没有太多的动力可以移动。因此,任何阻碍其前进的速度都会减慢它的速度。但是,这只是我的猜测。我对此没有任何事实。

–BerggreenDK
13年2月27日在23:20

RPi甚至不使用FAT / FAT32。文件系统为EXT4。

– Kibbee
13年2月28日在0:35

答案很有意思,因为bittorrent可能会以随机顺序将数据小片段地写入文件。这种类型的随机写入在SD卡上效率很低。但是我认为整理碎片不会有所帮助。实际上,FAT是在Pi上使用的,但仅用于引导分区。

–Frepa
13年2月28日在9:28

@Kibbee:请参阅raspberrypi.stackexchange.com/questions/8850/…上的回答,以了解SD卡为何自身存在碎片问题。许多避免物理磁盘碎片化的软件技术(例如预分配文件)对于SD卡都是无用的,因为在写入数据时(而不是在分配时)放置(或移动)了扇区。

–超级猫
13年8月23日在15:02