---
# System prepended metadata

title: Swap 設定
tags: [Technology, Ubuntu]

---

# Swap 設定

###### tags: `Ubuntu` `Technology`

> **Date**：2023/02/07
> **Taker**：Sin

### Init Swapfile and enable 16G (option) swap

```bash
  sudo fallocate -l 16G /swapfile
  sudo chmod 600 /swapfile
  sudo mkswap /swapfile
  sudo swapon /swapfile
```

### Auto enable swap after reboot

```bash
  sudo vim /etc/fstab
```

```bash
  /swapfile                                 swap            swap    sw              0       0
```

### Optimization swap

```bash
  sudo vim /etc/sysctl.conf
```

```text
  vm.swappiness=10
  vm.dirty_ratio=90
  vm.dirty_background_ratio=5
  vm.dirty_expire_centisecs=500
  vm.vfs_cache_pressure=500
```

### 參數說明

#### `vm.swappiness`：控制 swap 使用率

- 0：優先使用物理內存，然後才是 swap 空間
- 100：積極使用 swap 分區，並將內存數據及時轉移到 swap 空間
- 預設為 60：當內存使用達到 40% 時，開始使用 swap 分區

> 因為 RAM 的速度遠超過 Disk，大量使用 Disk 會增加系統 IO，影響性能，所以應優先使用 RAM。

#### `vm.dirty_ratio`：調整寫緩沖區大小

- 單位為百分比，當寫緩沖使用到系統內存的一定比例（如 10%）時，開始將數據寫入 Disk
- 增大此值會使用更多系統內存作為磁盤寫緩沖，提高寫性能。但在需要持續寫入的情況下，應降低此值。預設為 10。

#### `vm.dirty_background_ratio`：控制系統後台進程

- 單位為百分比，當寫緩沖使用到系統內存的一定比例時，觸發後台回寫進程，將緩存的臟頁異步刷入外存
- 增大此值會使用更多系統內存作為磁盤寫緩沖，提高寫性能。但在需要持續寫入的情況下，應降低此值。預設為 5。

#### `vm.dirty_expire_centisecs`：控制數據“舊化”時間

- 單位為 1/100 秒，預設為 3000（即 30 秒）。當寫緩沖區的數據達到此“舊化”時間後，將刷新磁盤
- 對於寫操作較重的情況，適當縮小此值可以提高 IO。但縮小太多會導致 IO 提高太快。建議設置為 1500（即 15 秒）。

#### `vm.vfs_cache_pressure`：控制虛擬內存回收 directory 和 inode 緩沖的傾向

- 此值越大，越容易回收。預設值為 100，表示內核會根據 pagecache 和 swapcache，保持 directory 和 inode cache 在一個合理的比例
- 若此值超過 100，將導致 Kernel 傾向於回收 directory 和 inode cache。

### Reference

1. https://www.wongwonggoods.com/linux/linux-swap/
2. https://blog.csdn.net/tenfyguo/article/details/50185915
