更快创build交换文件

我正在使用Amazon EC2,希望能够在实例启动时快速生成大量的交换文件(〜10 + GB)。 不幸的是,我的实例(c1.xlarge)的I / O速度足够慢(20 MB / s),这个操作需要10分钟以上,这对我的使用是不可接受的。

我知道swapfiles必须预先分配使用,所以我不能使用稀疏文件。

但是,是否有一些命令来分配块,而不用花费大量的时间来清除块? 另外,如果这个命令存在,我是否正确地认为交换文件中的一个页面在用户进程访问它之前已经被清零(减轻了安全问题)?

你没有指出你想要避免的方法。

传统上,你会发出一个dd命令,然后再抽出一个合适大小的zero'd文件,然后运行mkswap ,把条目添加到/etc/fstab ,然后用swapon来激活它。 我已经附上了一个相当匆忙写的示例shell脚本,我肯定有错误(这是迟到,我在和fstab条目是远远不够完美)

 #!/bin/bash # --- allocate 10Gbyte of swap space as 10 separate 1Gbyte files # --- that are brought online sequentially during processing for swpidx in 01 02 03 04 05 06 07 08 09 10 do dd if=/dev/zero of=/swapfile.$swpidx bs=16738 count=65536 mkswap /swapfile.$swpidx echo "/swapfile.$swpidx swap swap default 0 0" >> /etc/fstab swapon -a done swapon -s 

但是,这听起来像你正试图避免这种方法。 我可以提供的最快的解决scheme是使用交换分区,它不需要零进程,并且可以在几分钟内联机。 如果您的实例正在运行LVM,并且您有一个现有的卷组,您可以从中分割出一个分区,那么这样做也可以工作,只需几分钟即可完成分配。

我想我应该提到,即使对于服务器来说,划分这种大小的交换空间也有点不同寻常。 而我只是说,因为大多数服务器在处理这种大小的程序/数据时都有几个附加的RAM。 不要撬或什么,但你真的需要那么多的交换空间?

您可能希望考虑的另一件事是重新调整您的工作负载,而不是尝试dynamic分配交换空间。 正如您自己指出的那样,拥有那么多的“按需”是件好事,但由于您的服务器实例的I / O吞吐量很低,它将很快成为瓶颈。 当你耗尽你的记忆,而你本质上是“生活在交换中”时,你会发现20Mbyte / sec的传输速率将你的实例变成了386SX。

原来,你可以使用一个回环设备把稀疏文件交换: http : //www.option-c.com/xwiki/Loop_Mounting_Swap_Partition

你的c1.xlarge实例应该有或者可以拥有一些实质的本地实例存储 (短暂的,在启动时不会持续)。 启动时可能必须确保分配空间。 我没有这样做,所以我不能给你详细的信息。 我绝对不会使用交换文件。