RAM 和交换

RAM 和交换

即使 CPU 负载低于 100%,我的系统也会变慢,我认为这是因为它正在写入交换分区。是的,我的交换分区与我的操作系统位于不同的磁盘上。我记得 Windows 使用 ATA 磁盘时也存在这种类型的减速问题。它是通过使用 DMA 模式解决的。我不确定我的磁盘是否使用 DMA 模式。它们是 SATA 驱动器,所以我假设它们是。这是 hdparm 的输出

/dev/sda:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 182401/255/63, sectors = 2930277168, start = 0

ev/sdb:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 30401/255/63, sectors = 488397168, start = 0

我上次看到这种类型的减速行为是在 Windows 3.1 中!

hdparm -i /dev/sda /dev/sdb 的输出如下:

/dev/sda:

 Model=ST31500541AS, FwRev=CC34, SerialNo=6XW0N2LJ
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=2930277168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-4,5,6,7

 * signifies the current active mode


/dev/sdb:

 Model=HDT722525DLA380, FwRev=V44OA96A, SerialNo=VDB41BT4EUH03C
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52
 BuffType=DualPortCache, BuffSize=7674kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=488397168
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

当系统变慢时,这是 free 的输出:

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552

答案1

你没有问问题。我猜你的意思是问“为什么我的系统很慢”或“我怎样才能让它更快”,这两个问题都太模糊了,无法回答。我将部分回答一个不那么宏大的问题,“我怎样才能调查我的性能瓶颈”。

显然,当您的系统没有响应时,会有很多磁盘活动。我的回答基于此。

RAM 和交换

不管你的磁盘有多快,交换都会很慢。你无法做太多事情来让交换明显变快。如果你的系统正在交换,唯一现实的解决办法是使用更少的内存,或者购买更多的内存。

解释输出free

你可以使用以下命令获取系统使用内存量的快照free。它显示的内容如下:

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552
  • 这个Mem数字total(这里是 3538356,大约是 3.3GB)是进程可用的 RAM 数量(不包括显卡或内核使用的内存)。

    (使用 64 位内核的用户可跳过本段。)由于 x86 架构的复杂性,内核有多种方式访问​​ RAM。目前,在实践中,您可以选择两种模式:聚丙烯酰胺凝胶电泳模式,允许内核使用最多 64GB 的 RAM;非 PAE 模式,仅允许内核使用大约 3GB 的 RAM。非 PAE 模式存在的原因是 PAE 模式具有内存使用开销,只有当您的 RAM 超过 3GB 时才值得付出这种代价。关心此事的 Ubuntu 用户应阅读Ubuntu wiki 中的 PAE 页面

  • 图中Memfree数字表示有多少内存未被使用。除非 RAM 未被充分利用或系统刚刚启动,否则该数字通常相当小(例如,在多 GB RAM 系统上为 10-50MB)。此处的数字相当高(450MB),这可能是因为最近关闭了一个使用大约这么多内存的应用程序。别担心,它很快就会填满。

  • 标题行-/+ buffers/cache显示进程使用了​​多少内存,而不是磁盘缓存。在这里,我们看到只有大约 730MB 可用于缓存。这只占 RAM 的 20%,并不多。将大量 RAM 用于磁盘缓存对于保持系统响应速度非常重要。

  • 最后一行表示正在使用的交换空间大小。即使 RAM 未满,使用一些交换空间也是正常的。当磁盘空闲时,Linux 会预防性地将内存复制到交换空间,以防以后磁盘可能不空闲时需要内存。

    Linux 经常将进程内存移至交换区,以便为磁盘缓存腾出空间。这是正常的系统行为,尝试降低它可能会导致您的系统慢点有一个可调节的设置来控制 Linux 应该交换多少空间,称为vm.swapiness;如果你尝试使用它,一定要尝试交换性不断增强以及减少它。

    在我们的示例free输出中,我们看到大约 40% 的进程内存处于交换状态。这是否会影响性能取决于该内存的用途。如果它是一个当前未使用的大型应用程序,则不会受到影响。如果正在使用的部分进程被交换,系统可能会非常迟钝。

那么什么使用了所有这些内存?

分析内存使用情况很难。对于每个进程,您可以测量它分配了多少地址空间;您可以(尝试)测量它在给定时间内主动使用了多少内存;您必须跟踪文件支持的内存(例如,从进程可执行文件和库加载的代码)和非文件支持的内存(进程的堆栈和堆)。当然,进程之间共享了大量内存,因此谈论给定进程使用了​​多少内存没有多大意义。

您可以使用命令行工具(如tophtop)或任意数量的图形系统监视器和性能计来了解内存使用情况。对于htop,如果您对内存使用情况感兴趣,请在设置/显示选项中打开“隐藏内核线程”和“隐藏用户空间线程”选项。

top在或的显示中htop,相关的列是VIRTRESVIRT表示进程已分配了多少地址空间,包括共享和已分配但未使用的内存;不用太担心。RES表示进程当前正在使用多少 RAM(即不包括交换)。

要查看系统是否正在积极交换,一种方法是top边工作边观察显示屏。如果您看到RES某些进程的数字上升,而其他进程的数字下降,则意味着后一个进程正在被交换出去,为前一个进程腾出空间。如果这种情况经常发生,您需要更多 RAM 才能适应您的使用模式。

磁盘速度

根据过去的经验,您怀疑磁盘没有使用最快的可用访问模式。但 Linux 不是 Windows(Windows 在过去通常需要第三方驱动程序)。安装 Linux 发行版几乎总是会为所有外围设备提供最快的访问模式不会导致崩溃或数据丢失(视频驱动程序有点例外。)

您可以确认DMA 模式您的系统正在使用hdparm -i。例如,您的两个磁盘都显示UDMA modes: … *udma6,这意味着它们正在使用最快的可用模式。(一般来说,UDMA 比 DMA 快,比 PIO 快;对于数字部分,数值越高,速度越快。)

您可以使用 测量磁盘的原始吞吐量hdparm -t。该数字本身并不能直接提供有关系统响应速度的信息,但它对于比较两个磁盘的速度或同一磁盘上的两种访问模式的速度很有用。

有时你的电脑BIOS让您为磁盘选择不同的操作模式。当第一个 SATA 磁盘问世时,许多操作系统(如 Windows 和 Linux)没有配备合适的驱动程序。因此,BIOS 提供了一个选项,可以使用 PATA 仿真模式,该模式在原则上速度较慢但兼容性更高。当时,磁盘的速度还不足以满足 SATA 连接的需求,但现在它们可能可以满足需求。兼容设置通常称为“IDE”或“ATAPI”,而更快的设置通常称为“AHCI”。

磁盘错误

磁盘相关减速的一个可能原因是磁盘出现故障,系统需要多次重试访问。有时减速是第一个表现,随后会出现无法读取文件的实际错误。

要查看是否是这种情况,请查看内核日志,通常在 中/var/log/kern.log。如果您看到类似这样的行

end_request: I/O error, dev sda, sector 123456789
ata3.00: error: { UNC }

确保您的备份是最新的,并立即更换磁盘。请注意,上面的行仅作为示例,错误消息种类繁多。

您可以使用以下方式获取磁盘健康状况报告智能监控工具

答案2

我总是同时启动我的所有上网本和笔记本:Ubuntu-32 和 Win7-32​​。一个硬盘。缓存、临时和交换分区应该位于最快的驱动器上,靠近驱动器的第一个簇。那里的输入输出速度最快。

我使用的 Ubuntu 很少使用交换驱动器。4gb SODIMM DDR3 RAM,即 4gb 交换,用于两个 Ubuntu 启动分区。我选择的两个 Ubuntu 都在扩展分区中。所有 3 个操作系统都使用相同的数据分区,也在扩展分区中。此数据分区是 MS-NTFS-COMPRESSED。Linux 上使用的 NTFS-3G 未压缩为分区。在速度慢、功率低的笔记本电脑(“绿色”)硬盘上,IO 读写速度很慢,因此压缩成小簇会更快。微软声称额外的 CPU 周期(ZIP 格式)微不足道。

目前,我的 Acer 5740 笔记本中有一个 TB 级硬盘;I3 CPU,因此图形处理速度非常慢。这款较新的笔记本最初装有 Win7-64 位,但程序和硬件太多导致 64 位出现问题。此外,GPU 占用了 4GB RAM 作为“分片内存”,因此 32 位或 Linux 32-PAE 都可以。

相关内容