我有一个巨大的 HDD和/home
一个小型的 SSD (后者为 6GB,Ubuntu 15.04 中显示为 5.7GB)。/
swap
我从另一台计算机开始向硬盘写入数据。我打算通过 100Mb/s 以太网连接传输大约 250GB 的数据。文件足够大,因此网络利用率几乎达到最佳状态(通常约为 100%,很少达到 99%)。
过了一会儿,我注意到交换分区(在我的计算机上 - 传输的目的地)变得越来越满(现在大约 20%)。当我暂停传输时,百分比停滞不前。
我认为我的 HDD 无法处理传入数据的负载,因此使用交换来维持传输速度。
我预计,当我暂停转移时,交换百分比将缓慢下降。但事实并非如此。
因此,我恳请大家回答我的问题:
- 当交换分区已满时会发生什么?传输速度是否会自动降低,以减轻硬盘负担?计算机会重新启动吗?还是会冻结?
- 如果转移完成前交换区已满,它会自动清空并将数据存储到 HDD 吗?如果没有,我该怎么办?
- 我可以命令网卡(或者可能是某个守护进程?)以较慢的速度接受数据包吗?如果可以,怎么做?
- 当传输暂停时,我可以强制系统将数据从交换移动到 HDD 吗?如果可以,该怎么做?
答案1
我的猜测是,由于您传输的数据是通过网卡的 DMA 写入内存的,然后使用 DMA 再次存储到磁盘(即无法交换的内存区域),所以内核只是从其他应用程序交换页面,这是正常的,恕我直言,不应该引起您的恐慌。
当系统理论上无法分配任何内存时,它会终止进程以释放内存(我不知道它使用什么算法来选择哪些内存)。实际上,根据我的经验,系统会冻结和/或崩溃。
当传输完成后,交换数据将在需要时被读回内存。
您可以关闭交换,然后使用 swapon 和 swapoff 命令再次打开它。