gpt4 book ai didi

c - 使用 malloc、memtest 和 dd 了解 RAM 速度

转载 作者:行者123 更新时间:2023-12-04 02:57:04 25 4
gpt4 key购买 nike

尝试使用新硬件,我编写了一段 C 代码来测试 RAM 速度和磁盘速度。本质上它是 3 行,将 5 GB 写入 RAM 并将其写入文件,我围绕它设置了一些计时器:

long long int AMOUNT = 5*1024*1024*1024l;
FILE *file_handle = fopen('test.bin', 'wb');
handle = malloc(AMOUNT);
memset(handle, 0, AMOUNT);
fwrite(handle, AMOUNT, 1, file_handle);

然后我尝试使用 dd 使用 ramdisk 或 tempfs:

mount -t tmpfs /mnt/temp1 /mnt/temp1
dd if=/dev/zero of=/mnt/temp1/test bs=1M

然后,回到磁盘:

dd if=/mnt/temp1/test of=/home/user/test bs=1M

在下表中,我的结果,我还插入了 speed memtest 7.5。我不明白 9.0 以及 memtest 和其他数字之间的巨大区别...谁能解释一下?

Results

最佳答案

有很多因素在起作用,我无法重复其中的大部分,也无法理解它们。但这里有一些背景中发生的事情的一些概况:

虚拟内存

在大多数现代用户系统上,您实际上无法直接访问 RAM。您有多个间接层,其中之一是虚拟内存。 VM 是您的进程访问的内存,就好像它是正常的连续 RAM,但实际上底层系统将其转换为 RAM 中的正确地址。因此,使用虚拟地址访问物理内存几乎肯定不会为您提供所需的数据。

虚拟内存也有层。现代处理器包括对虚拟内存的 native 支持,它通常由 MMU 控制。与处理器靠近或位于同一芯片上。

许多操作系统也有自己的虚拟内存层,然后它们要么转换为处理器上 MMU 管理的虚拟内存,要么直接转换为物理 RAM。

只是兔子洞有多远的一个例子,Linux 实际上有惰性内存分配。因此,当您第一次分配内存时,它不会与 CPU 通信,而只会保存在内核数据结构中,当您稍后访问内存时,CPU 会生成一个 Page Fault。 .内核的页面错误处理程序然后查看该内存是否被延迟分配,如果是,则实际分配它。

内核空间与用户空间

用户空间程序不允许直接修改物理内存,在 *nixes 的情况下,它们调用 System Calls为他们做那件事。系统调用改变了CPU的运行模式,而且往往是一个比较慢的操作。

库函数

malloc 这样的库函数实际上必须做大量的簿记工作,以确保当你在一个指针上调用 free 时,你只释放了那部分。但他们也批量分配。 *nixes 上的 malloc 调用系统调用 mmap 来分配页面。随后的 malloc 调用将继续使用该页面,直到您需要更多。

这与这个问题有什么关系?

以上只是您使用内存时发生的事情的一瞥,因此您如何分配内存,传递给系统的内存数量和标志会改变很多事情,并且可以解释结果之间的差异。

建议

尝试在这些进程上运行 strace 以查看它们将大部分时间花在哪里!

关于c - 使用 malloc、memtest 和 dd 了解 RAM 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com