AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 25653
In Process
Bill Gray
Bill Gray
Asked: 2009-06-15 19:06:42 +0800 CST2009-06-15 19:06:42 +0800 CST 2009-06-15 19:06:42 +0800 CST

交换分区与文件以获得性能?

  • 772

什么对性能更好?靠近磁盘内部的分区将具有较慢的访问时间,我们必须等待驱动器在操作系统和交换分区之间切换。

另一方面,交换分区绕过所有文件系统,允许直接写入磁盘,这可能比文件更快。

什么是性能权衡?

拥有固定大小的交换文件有多大影响?

是不是换成交换分区会更长,但是如果它是交换文件,它在交换分区上时性能会更好?

windows linux pagefile swap virtual-memory
  • 6 6 个回答
  • 97199 Views

6 个回答

  • Voted
  1. Shay
    2011-06-08T05:48:11+08:002011-06-08T05:48:11+08:00
    1. 在硬盘上,吞吐量和查找通常在靠近磁盘的开头更快,因为该数据存储在更靠近磁盘的外部区域,每个柱面有更多的扇区。因此,在磁盘开头创建交换可能会提高性能。

    2. 对于 2.6 Linux 内核,交换分区和未分段交换文件之间没有性能差异。当 swapon 启用交换分区/文件时,2.6 内核会查找交换文件存储在哪个磁盘块上,因此当需要交换时,它根本不必处理文件系统。

    因此,如果交换文件没有碎片化,就好像在它的同一位置有一个交换分区。或者换一种说法,如果您使用原始交换分区,或者使用文件系统对其进行格式化,然后创建一个填充所有空间的交换文件,您将获得相同的性能,因为在该磁盘上的任何一种方式都有一个用于交换的连续区域,内核直接使用。

    因此,如果在文件系统新鲜时创建交换文件(从而确保它没有碎片并且在卷的开头),则性能应该与在卷之前有一个交换分区相同。此外,如果有人在卷的中间创建交换文件,并且文件在任一侧,则可能会获得更好的性能,因为寻求交换的次数更少。

    在 Linux 上,如果交换文件是未分段创建的,并且从不扩展,则它不会变成碎片,至少对于像 ext3/4 这样的普通文件系统来说是这样。它将始终使用相同的磁盘块,这些磁盘块是连续的。

    我的结论是,专用交换分区的唯一好处是在您需要扩展它时保证不碎片化。如果您的交换永远不会扩展,则在新文件系统上创建的文件不需要额外的分区。

    • 50
  2. Martin M.
    2009-06-16T00:28:53+08:002009-06-16T00:28:53+08:00

    实际上,只要您不使用稀疏文件,它并没有太大的区别。

    使用 dd 创建一个“普通”文件将在一次运行中分配文件(如果可能的话),而创建一个稀疏文件会告诉你你有一个 10GB 的文件,但实际上并没有用完所有空间。我不太确定 mkswap 是否不会分配空间,但通常交换文件会及时增长,因此不会分配连续扇区(如磁盘的一部分),而是根据需要分配块导致随着时间的推移碎片(当然取决于您对磁盘的使用)

    在内部,Linux 内核或多或少会直接访问交换文件的底层块——我现在找不到链接,幕后发生了什么,除非有人能找到更官方的东西,否则你必须相信我。我现在能想到的只有:

    • 关于 slashdot 的讨论
    • 维基百科分页文章
    • 关于 ubuntu 的一些常见问题解答

    这一切仅适用于 2.6 行的 Linux 内核。

    如果您想要最佳性能(那是什么,真的吗?...交换很慢,期间。增加 RAM 以便您不会交换以获得最佳性能),您会想要使用分区。

    • 28
  3. Viky
    2009-06-15T19:27:44+08:002009-06-15T19:27:44+08:00

    这是一个有趣的问题,并且已经阅读了很多相同的内容。由于底层文件系统,通常交换分区优于文件。但是,如果您总是需要增加交换的大小,那么文件是一个更好的选择。在 kernel 2.4 之前,人们认为交换分区比文件快,但现在随着 kernel 2.6 的改进,性能几乎相同。

    我也在网上找到的东西。

    http://www.go2linux.org/swap-file-vs-swap-partition

    和

    http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html

    • 3
  4. sysadmin1138
    2009-06-15T21:12:38+08:002009-06-15T21:12:38+08:00

    我们工作的想法是,由于交换文件可能会变得碎片化,并且碎片会减慢交换访问的速度,因此分区是一种更好的方法。当然,定义一个静态大小的交换文件做同样的事情,但这只是主观上看起来更整洁。

    这种方法是一种真正的方法吗?可能不会,因为这种做法是在将近 10 年前建立的。在这几年中,驱动技术的唯一重大变化是我们使用的 RAID 控制器的复杂性(我们对 SSD 的支持还不够丰富)。驱动器大小的增加意味着我们创建的交换分区比 18GB 驱动器标配时更接近驱动器的起始位置,因此交换速度甚至比过去更快。

    当然,在我们基于 ESX 的 Windows 系统上,交换文件的位置完全没有实际意义。交换文件和物理磁盘盘片之间有很多虚拟化层,这无关紧要。但是我们将它保存在一个单独的分区上,因为这只是标准。

    • 3
  5. Matt Simmons
    2009-06-15T19:21:00+08:002009-06-15T19:21:00+08:00

    我认为在我们现在所处的阶段,除非您运行的笔记本电脑具有在挂起/睡眠时将数据写入交换的配置,否则交换应该被视为“最后的手段”。最好的办法是在一个盒子里放足够的 RAM,这样它就不会分页到磁盘。

    话虽如此,分区可能是更好的方式,性能方面,虽然文件更灵活。只要确保它在 7200+ RPM 主轴上。

    • 2
  6. Crass Spektakel
    2015-07-15T08:22:55+08:002015-07-15T08:22:55+08:00

    使用交换文件可能会为文件到内存的转换使用一些额外的内存。我们谈论的是每 1GB 交换不到 1MB 的内存。文件系统缓存不缓存交换的数据,只缓存组织数据,这应该是大部分额外的内存需求。

    除此之外,我怀疑你会失去任何合理的性能,除非在 1000 次额外的头部搜索中可能只有一次。

    有趣的事实是,将 zswap 与动态扩展的交换文件一起使用,可以在未使用时以非常低的成本显着加快交换操作。

    • 0

相关问题

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve