# Hướng dẫn nhanh

- [Cách sử dụng](#usage)
  - [Cấu hình quyền truy cập](#configure-access-permissions)
  - [Gắn dưới dạng chỉ đọc](#mount-as-read-only)
  - [Bật ghi nhật ký](#enable-logging)
  - [Cập nhật](#update)
- [Trợ giúp](#help)
- [Ánh xạ file cấu hình ↔ tham số CLI](#config-file--cli-parameter-mapping)
- [Danh sách tùy chọn](#option-list)
- [Ví dụ](#examples)
- [Tối ưu hóa theo kịch bản](#scenario-based-tuning)
  - [Các tham số liên quan đến hiệu năng](#performance-related-parameters)
  - [Kịch bản file nhỏ](#small-file-scenario)
  - [Kịch bản thông lượng đọc cao](#high-read-throughput-scenario)
  - [Bộ nhớ đệm đọc chia sẻ](#shared-read-cache)
- [Tự động gắn](#auto-mount)

## Cách sử dụng

- Gắn (Mount)

```
us3fs [global options] <bucket> <mountpoint>
```

> `<bucket>` và `<mountpoint>` phải là hai đối số cuối cùng theo đúng thứ tự; nếu không, các tùy chọn khác có thể không có hiệu lực.

- Hủy gắn (Unmount)

```
umount <mountpoint>
```

> Trên Windows, nhấn `Ctrl+C` trong `cmd`.

-----

### Cấu hình quyền truy cập

Theo mặc định, US3FS sử dụng quyền của người dùng hiện tại để gắn. Nếu bạn muốn các người dùng/nhóm khác truy cập vào điểm gắn (mountpoint), bạn có thể sử dụng:

- `-o allow_other`: cho phép bất kỳ người dùng nào truy cập vào hệ thống tệp
- `--uid=xxx`: đặt UID của chủ sở hữu mặc định
- `--gid=xxx`: đặt GID của chủ sở hữu mặc định
- `--mp_mask`: mặt nạ quyền của điểm gắn. Chỉ có hiệu lực khi `allow_other` được bật. Mặc định `0000`. Cách sử dụng tương tự như `umask`. Ví dụ: để đặt quyền cho điểm gắn thành 770, sử dụng `-o allow_other --mp_mask 0007`. **Lưu ý: root sẽ bỏ qua `mp_mask` được đặt bởi các điểm gắn không phải root.**

Bạn có thể lấy UID/GID qua lệnh `id`. Ví dụ:

```bash
// Gắn dưới tên người dùng ubuntu, đặt người dùng/nhóm mặc định thành www
ubuntu:~$ id www
uid=1001(www) gid=1001(www) groups=1001(www)

ubuntu:~$ us3fs --uid=1001 --gid=1001 -o allow_other <bucket> <mountpoint>
```

Ví dụ về `mp_mask`:

| Quyền của điểm gắn | mp_mask |
| - | - |
| rwxrwxrwx | 0000 |
| rwxrwx--- | 0007 |
| rwx------ | 0077 |
| rwxr--r-- | 0033 |
| rwxrwxr-- | 0003 |
| rwxr-xr-x | 0022 |

Nếu bạn thấy:

```bash
stderr:
/bin/fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
```

Thêm `user_allow_other` vào `/etc/fuse.conf`.

> Trên Windows, chỉ hỗ trợ `--uid` và `--gid`.

### Gắn dưới dạng chỉ đọc

Gắn với tùy chọn `-o ro`.

> Không hỗ trợ trên Windows.

### Bật ghi nhật ký

- `--level=info/debug/error`: bật nhật ký US3FS ở một cấp độ cụ thể
- `--debug_fuse`: bật nhật ký fuse trong không gian người dùng
  - CentOS: `/var/log/messages`
  - Ubuntu: `/var/log/syslog`
- Gắn với tùy chọn `-f` để chạy dưới nền trước (foreground) và in nhật ký ra màn hình.

### Cập nhật

Chạy lệnh:

```
us3fs --update
```

Tệp thực thi đã cập nhật được đặt trong `/bin/`.

> Không khả dụng trên Windows.

-----

## Trợ giúp

Sử dụng lệnh `us3fs -h` để xem các tùy chọn được hỗ trợ.

#### Linux

```bash
us3fs - a single posix file system based on us3
USAGE
  us3fs [global options] bucket mountpoint
Version
  US3FS Version: v2.0.3
  Commit ID: 96bd92a
  Build: 2024-02-27:17:02:18
  Go Version: go1.17.13 linux/amd64
FUSE
  -o value                      Chỉ định tùy chọn fuse/winfsp
  --entry_timeout value         Thời gian lưu bộ nhớ đệm dentry cho inode đối với fuse (mặc định: 5m0s)
  --attr_timeout value          Thời gian lưu bộ nhớ đệm thuộc tính inode đối với fuse (mặc định: 5m0s)
  --disable_async_read          Tắt tất cả các thao tác đọc (ngay cả đọc trước) một cách bất đồng bộ
  --wb                          Bật chế độ ghi đệm (writeback), chế độ này mặc định bị tắt
  --max_background value        Chỉ định tham số max_background của nhân fuse (>=7.13), hiện tại không gian người dùng fuse hỗ trợ lên tới 1024 (mặc định: 64)
  --congestion_threshold value  Chỉ định tham số congestion_threshold của nhân fuse (>=7.13), hiện tại không gian người dùng fuse hỗ trợ lên tới 768 (mặc định: 48)
  --async_dio                   Bật tham số async_dio của nhân fuse, mặc định async_dio bị tắt
  --keep_pagecache              Bật pagecache, khi tệp được mở, việc có cập nhật hay không sẽ được quyết định dựa trên thời gian sửa đổi của inode, vì vậy hãy lưu ý rằng các tham số attr_timeout và dcache_timeout sẽ có ảnh hưởng nhất định đến điều này

OS
  --dcache_timeout value       Thời gian lưu bộ nhớ đệm dentry cho us3fs (mặc định: 5m0s)
  --retry value                Số lần thử lại khi I/O thất bại (mặc định: 5)
  --parallel value             Số lượng luồng I/O song song (mặc định: 32)
  --disable_remove             Tắt thao tác xóa, chẳng hạn như unlink, rmdir, rename
  --debug                      Đặt mức độ gỡ lỗi cho fuse/winfsp
  --level value                Đặt cấp độ ghi nhật ký: error/warn/info/debug (mặc định: "info")
  --log_dir value              Đặt thư mục nhật ký
  --log_max_age value          Đặt thời gian lưu trữ tối đa của nhật ký (mặc định: 72h0m0s)
  --log_rotation_time value    Đặt thời gian xoay vòng nhật ký (mặc định: 1h0m0s)
  --enable_load_dentries       Bật tự động khởi tạo dentry trong bộ nhớ
  --cache_db value             Chỉ định đường dẫn db bộ nhớ đệm, ví dụ: dbtype:dbpath
  --local_write                Ghi tệp vào máy cục bộ và tải lên bất đồng bộ
  --max_local_file_size value  Chỉ định kích thước tối đa của tệp cục bộ (mặc định: "32m")
  --read_after_write_finish    Thao tác đọc sẽ chờ cho đến khi tất cả các thao tác ghi hoàn tất
  --finish_write_when_release  Tất cả dữ liệu đã ghi sẽ được tải lên khi giải phóng (release)
  --readahead value            Kích thước đọc trước (Readahead). Ví dụ: 1m/1k/1 (mặc định: "0")
  --max_cache_per_file value   Bộ nhớ đệm tối đa cho mỗi tệp khi bật đọc trước. Ví dụ: 32m/64m/128m (mặc định: "1024m")
  --etag value                 Kiểm tra etag cho các phần (part). Giá trị là tỷ lệ phần trăm (0~100) (mặc định: 50)
  --passwd value               Chỉ định tệp truy cập (mặc định: "/etc/us3fs/us3fs.yaml")
  --enable_md5                 Bật md5 trong tiêu đề http
  --uid value                  Chỉ định uid mặc định (mặc định: 0)
  --gid value                  Chỉ định gid mặc định (mặc định: 0)
  --mp_mask value              Chỉ định mặt nạ điểm gắn (mặc định: 0)
  --disable_check_vdir         Tắt phát hiện thư mục ảo
  --update                     Cập nhật us3fs lên /bin/us3fs
  -n                           Không kiểm tra quyền truy cập khi gắn us3fs
  -l                           Bật bộ nhớ đệm cục bộ cho các tệp nhỏ
  -p value                     Chỉ định vị trí bộ nhớ đệm cục bộ (mặc định: "/tmp/us3fs/")
  --prefix value               Chỉ định đường dẫn tiền tố (prefix) của bucket
  --open_rename                Sử dụng API đổi tên thay vì sao chép và xóa
  --gfl                        Bật get_file_list
  --direct_read                Bật chế độ đọc bỏ qua bộ nhớ đệm
  --perf_dump value            Thời gian định kỳ để xuất bản báo cáo hiệu năng (mặc định: 1h0m0s)
  --skip_ne_dir_lookup         Bỏ qua kiểm tra thư mục không thiết yếu, chẳng hạn như các tệp kết thúc bằng ".log", ".png", ".jpg", v.v.
  --storage_class value        Loại lưu trữ, bao gồm "STANDARD", "IA" (mặc định: "STANDARD")
  --enable_remote_cache        Bật bộ nhớ đệm từ xa
  --cache_dirs value           Chỉ định các thư mục bộ nhớ đệm, ví dụ: /tmp/read-cache1,/tmp/read-cache2
  --cache_size_limit value     Chỉ định giới hạn kích thước bộ nhớ đệm, đơn vị là GB (mặc định: 4)
  --master_addr value          Địa chỉ máy chủ chính (master)
  --data_port value            Nếu chỉ định data_port, các máy khách khác sẽ kết nối với nó để lấy dữ liệu chunk (mặc định: 0)
  --page_size value            Kích thước trang (mặc định: 1048576)
  --fuse_session_cnt value     Số lượng phiên FUSE (mặc định: 0)

MISC
  --help, -h  Hiển thị trợ giúp
  -f          Chạy dưới nền trước (foreground)
```

#### Windows

```shell
us3fs - a single posix file system based on us3
USAGE
  us3fs [global options] bucket mountpoint
Version
  US3FS Version: v1.6.8
  Commit ID: c87ec9c
  Build: 2022-08-17:11:01:05
  Go Version: go1.16.3 linux/amd64

WinFSP
  -o value                     Chỉ định tùy chọn fuse/winfsp
  --dir_info_timeout value     Thời gian hết hạn của thông tin thư mục, tính bằng giây (mặc định: 5)
  --file_info_timeout value    Thời gian hết hạn của thông tin tệp, tính bằng giây (mặc định: 5)
  --volume_info_timeout value  Thời gian hết hạn của thông tin ổ đĩa (volume), tính bằng giây (mặc định: 5)
  --case_insensitive           Phân biệt chữ hoa chữ thường
  --keep_filecache             Giữ lại bộ nhớ đệm tệp (file cache)

OS
  --dcache_timeout value  Thời gian lưu bộ nhớ đệm dentry cho us3fs (mặc định: 5m0s)
  --retry value           Số lần thử lại khi I/O thất bại (mặc định: 5)
  --parallel value        Số lượng luồng I/O song song (mặc định: 32)
  --debug                 Đặt mức độ gỡ lỗi cho fuse/winfsp
  --level value           Đặt cấp độ ghi nhật ký: error/warn/info/debug (mặc định: "info")
  --readahead value       Kích thước đọc trước (Readahead). Ví dụ: 1m/1k/1 (mặc định: "0")
  --etag value            Kiểm tra etag cho các phần (part). Giá trị là tỷ lệ phần trăm (0~100) (mặc định: 50)
  --passwd value          Chỉ định tệp truy cập (mặc định: "/etc/us3fs/us3fs.conf")
  --enable_md5            Bật md5 trong tiêu đề http
  --uid value             Chỉ định uid mặc định (mặc định: -1)
  --gid value             Chỉ định gid mặc định (mặc định: -1)
  --disable_check_vdir    Tắt phát hiện thư mục ảo
  --update                Cập nhật us3fs lên /bin/us3fs
  -n                      Không kiểm tra quyền truy cập khi gắn us3fs
  -l                      Bật bộ nhớ đệm cục bộ cho các tệp nhỏ
  -p value                Chỉ định vị trí bộ nhớ đệm cục bộ (mặc định: "/tmp/us3fs/")
  --prefix value          Chỉ định đường dẫn tiền tố (prefix) của bucket
  --gfl                   Bật get_file_list
  --direct_read           Bật chế độ đọc bỏ qua bộ nhớ đệm
  --perf_dump value       Thời gian định kỳ để xuất bản báo cáo hiệu năng (mặc định: 1h0m0s)
  --skip_ne_dir_lookup    Bỏ qua kiểm tra thư mục không thiết yếu, chẳng hạn như các tệp kết thúc bằng ".log", ".png", ".jpg", v.v.
  --storage_class value   Loại lưu trữ, bao gồm "STANDARD", "IA" (mặc định: "STANDARD")
MISC
  --help, -h  Hiển thị trợ giúp
  -f          Chạy dưới nền trước (foreground)
```

> Sự khác biệt giữa các tùy chọn trên Linux và Windows chủ yếu nằm ở phần FUSE so với WinFsp.

## Ánh xạ file cấu hình ↔ tham số CLI

Một số tham số gắn có thể được cấu hình trong tệp cấu hình. Ánh xạ giữa các tham số CLI và các trường trong tệp cấu hình:

| Tham số CLI | Trường trong tệp cấu hình | Ví dụ trong cấu hình |
| --- | --- | --- |
| gfl | get_file_list | get_file_list: true |
| keep_pagecache | keep_pagecache | keep_pagecache: true |
| n | no_check | no_check: true |
| disable_check_vdir | disable_check_vdir | disable_check_vdir: true |
| async_dio | async_dio | async_dio: true |
| skip_ne_dir_lookup | skip_ne_dir_look | skip_ne_dir_look: true |
| l | enable_local | enable_local: true |
| wb | writeback | writeback: true |
| direct_read | direct_read | direct_read: true |
| enable_md5 | enable_md5 | enable_md5: true |
| debug | debug | debug: true |
| -o allow_other | allow_other | allow_other: true |
| enable_load_dentries | enable_load_dentries | enable_load_dentries: true |
| disable_async_read | disable_async_read | disable_async_read: true |
| retry | retry | retry: 66 |
| parallel | parallel | parallel: 77 |
| disable_remove | disable_remove | disable_remove: true |
| congestion_threshold | congestion_threshold | congestion_threshold: 88 |
| max_background | max_background | max_background: 99 |
| uid | uid | uid: 100 |
| gid | gid | gid: 100 |
| etag | etag | etag: 100 |
| dcache_timeout | dcache_timeout | dcache_timeout: 2h |
| entry_timeout | entry_timeout | entry_timeout: 3h |
| attr_timeout | attr_timeout | attr_timeout: 4h |
| perf_dump | perf_dump | perf_dump: 5h |
| log_max_age | log_max_age | log_max_age: 6h |
| log_dir | log_dir | log_dir: /a/b/c |
| prefix | prefix | prefix: /a/b/c |
| level | level | level: debug |
| storage_class | storage_class | storage_class: STANDARD |
| p | local_path | local_path: /a/b/c |
| readahead | readahead | readahead: 8m |
| max_cache_per_file | max_cache_per_file | max_cache_per_file: 1024m |
| cache_db | cache_db | cache_db: leveldb:/data/us3fs_cachedb |
| local_write | local_write | local_write: true |
| max_local_file_size | max_local_file_size | max_local_file_size: 32M |
| finish_write_when_release | finish_write_when_release | finish_write_when_release: true |
| read_after_write_finish | read_after_write_finish | read_after_write_finish: true |
| enable_remote_cache | enable_remote_cache | enable_remote_cache: true |
| cache_dirs | cache_dirs | cache_dirs: /mnt/nvme01,/mnt/nvme02 |
| cache_size_limit | cache_size_limit | cache_size_limit: 100 |
| master_addr | master_addr | master_addr: <master_ip>:<master_port> |
| data_port | data_port | data_port: 3333 |
| page_size | page_size | page_size: 8388608 |
| fuse_session_cnt | fuse_session_cnt | fuse_session_cnt: 4 |

Ví dụ: cấu hình các tham số gắn trong tệp cấu hình

Chỉnh sửa tệp `/etc/us3fs/us3fs.yaml` (tạo thư mục nếu cần) và thêm các tham số theo yêu cầu để đơn giản hóa các lệnh gắn:

```
access_key: ************************************
secret_key: ************************************
endpoint: ufile.cn-north-02.ucloud.cn
hosts: []
```

## Danh sách tùy chọn

#### WinFsp

| Tùy chọn | Mô tả |
| --- | --- |
| o | Giá trị tùy chọn `-o` của WinFsp |
| dir_info_timeout | Thời gian hết hạn của bộ nhớ đệm thông tin thư mục (mặc định 5s) |
| file_info_timeout | Thời gian hết hạn của bộ nhớ đệm thông tin tệp (mặc định 5s) |
| volume_info_timeout | Thời gian hết hạn của bộ nhớ đệm thông tin ổ đĩa (mặc định 5s) |
| keep_filecache | Giữ lại bộ nhớ đệm tệp |

#### FUSE

| Tùy chọn | Mô tả |
| --- | --- |
| o | Giá trị tùy chọn `-o` của FUSE |
| entry_timeout | Thời gian lưu bộ nhớ đệm cho các tên đã tìm kiếm trong FUSE<br/>Mặc định 5 phút |
| attr_timeout | Thời gian lưu bộ nhớ đệm cho các thuộc tính của tệp/thư mục trong FUSE<br/>Mặc định 5 phút |
| disable_async_read | Tắt tính năng đọc trước bất đồng bộ trong nhân FUSE (mặc định là bất đồng bộ) |
| wb | Bật chế độ ghi đệm (writeback). Không hỗ trợ ghi đè/ghi tiếp (append) |
| max_background | Tham số `max_background` của nhân FUSE (nhân>=7.13). Không gian người dùng fuse hỗ trợ tối đa 1024 (mặc định 64). Cải thiện tính song song của I/O trực tiếp (direct I/O) |
| congestion_threshold | Tham số `congestion_threshold` của nhân FUSE (nhân>=7.13). Không gian người dùng fuse hỗ trợ tối đa 768 (mặc định 48). Kích hoạt kiểm soát nghẽn cho I/O song song |
| async_dio | Bật I/O trực tiếp bất đồng bộ trong nhân FUSE (mặc định bị tắt) |
| keep_pagecache | Giữ lại pagecache của VFS cho đến khi thời gian sửa đổi (modtime) hoặc kích thước của inode thay đổi. Lưu ý: `entry_timeout` và `dcache_timeout` có thể làm trì hoãn việc nhận biết các thay đổi |

Các tùy chọn FUSE phổ biến (sử dụng với `-o`):

| Tùy chọn | Mô tả |
| --- | --- |
| allow_other | Cho phép tất cả người dùng truy cập vào hệ thống tệp (mặc định tắt) |
| ro | Gắn dưới dạng chỉ đọc |

**Cách sử dụng**

```bash
-o option=value
```

#### OS (Object Storage)

| Tùy chọn | Mô tả |
| --- | --- |
| dcache_timeout | Thời gian sống (TTL) của bộ nhớ đệm Dentry trong US3FS<br/>Mặc định 5 phút |
| retry | Số lần thử lại sau khi yêu cầu thất bại (mặc định 5) |
| parallel | Số lượng luồng I/O song song (mặc định 20) |
| debug | Đặt cấp độ ghi nhật ký fuse trong không gian người dùng (mặc định tắt) |
| level | Cấp độ ghi nhật ký US3FS (mặc định Info) |
| readahead | Kích thước đọc trước, ví dụ: 1m/1k/1 (mặc định "0") |
| etag | Tỷ lệ phần trăm (0~100) của các phần cần kiểm tra ETag để đảm bảo tính toàn vẹn khi tải lên (mặc định 50) |
| passwd | Đường dẫn tệp thông tin xác thực (mặc định `/etc/us3fs/us3fs.yaml`; Windows: tùy chỉnh) |
| enable_md5 | Thêm kiểm tra MD5 vào tiêu đề HTTP (mặc định tắt) |
| uid | Người dùng sở hữu tệp mặc định (mặc định là người dùng hiện tại) |
| gid | Nhóm sở hữu tệp mặc định (mặc định là nhóm hiện tại) |
| disable_check_vdir | Tắt phát hiện thư mục ảo |
| update | Cập nhật US3FS; đường dẫn tệp thực thi mới `/bin/us3fs` |
| n | Không kiểm tra quyền truy cập bucket khi gắn (hữu ích nếu vùng không có dịch vụ danh sách) |
| l | Bật bộ nhớ đệm cục bộ cho các tệp nhỏ và tải lên bất đồng bộ (xem [Kịch bản file nhỏ](#small-file-scenario)) |
| p | Thư mục bộ nhớ đệm cục bộ để tải lên bất đồng bộ cho tệp nhỏ |
| prefix | Tiền tố bucket cần gắn (mặc định để trống) |
| gfl | Đối với các điểm cuối (endpoint) không có API ListObjects, hãy sử dụng API PrefixFileList để mô phỏng việc liệt kê |
| direct_read | Bỏ qua bộ nhớ đệm nội bộ và đọc trực tiếp từ S3 (có thể làm giảm hiệu năng đối với các tệp nóng; nhưng có thể giảm độ trễ trong các trường hợp khác) |
| perf_dump | Định kỳ xuất thống kê độ trễ (mặc định 1 giờ) |
| skip_ne_dir_lookup | Bỏ qua kiểm tra thư mục không thiết yếu đối với các hậu tố cụ thể; đảm bảo bạn không có thư mục nào kết thúc bằng các hậu tố đó |
| storage_class | Loại lưu trữ cho các đối tượng được ghi vào S3: `STANDARD`, `IA` (mặc định `STANDARD`) |
| cache_db | Lưu bộ nhớ đệm siêu dữ liệu (metadata) trên đĩa, ví dụ: `leveldb:/data/us3fs_cachedb` |
| finish_write_when_release | Tải lên dữ liệu đã ghi khi giải phóng bộ mô tả tệp FD (hỗ trợ nhiều lần đẩy dữ liệu (flush) trên mỗi FD) |
| read_after_write_finish | Các thao tác đọc sẽ chờ cho đến khi các thao tác ghi đang thực hiện hoàn tất |
| local_write | Ghi vào hệ thống tệp cục bộ rồi tải lên bất đồng bộ |
| max_local_file_size | Khi sử dụng `local_write`, kích thước tệp tối đa được ghi cục bộ (mặc định 32M) |
| enable_remote_cache | Bật bộ nhớ đệm từ xa |
| cache_dirs | Các thư mục bộ nhớ đệm cục bộ, phân tách bằng dấu phẩy |
| cache_size_limit | Giới hạn kích thước bộ nhớ đệm (GB) |
| master_addr | Địa chỉ máy chủ chính (master) |
| data_port | Cổng cho dữ liệu chunk |
| page_size | Kích thước trang |
| fuse_session_cnt | Số lượng phiên FUSE |

#### HỖN HỢP

| Tùy chọn | Mô tả |
| --- | --- |
| help, h | Hiển thị trợ giúp |
| f | Chạy dưới nền trước (foreground) và in đầu ra ra stdout |

> Trên Windows, tùy chọn `-f` không có tác dụng.

## Ví dụ

- **entry_timeout**, **attr_timeout**, **dcache_timeout**

Thiết lập `dcache_timeout` làm tăng thời gian các thuộc tính của tệp/thư mục có hiệu lực trong bộ nhớ, giúp cải thiện trải nghiệm người dùng (UX). Chúng tôi khuyên bạn nên thiết lập `entry_timeout` và `attr_timeout` nhỏ hơn `dcache_timeout`.

Lưu ý: Sau khi bật bộ nhớ đệm, nội dung thư mục có thể tạm thời không đồng nhất với trạng thái thực tế của bucket. Tính năng này được bật theo mặc định; đặt thời gian hết hạn thành `0s` để tắt.

Ví dụ: thời gian để chạy lệnh `ls` trên một thư mục chứa 10.000 tệp

```
[root@10-9-120-211 ~]# us3fs --dcache_timeout=60s --entry_timeout=60s --attr_timeout=60s <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# time ls -la <your_dir> | wc -l
10003

real    0m5.964s
user    0m0.033s
sys     0m0.232s
[root@10-9-120-211 ~]#
[root@10-9-120-211 ~]#
[root@10-9-120-211 ~]# time ls -la <your_dir> | wc -l
10003

real    0m0.872s
user    0m0.029s
sys     0m0.133s
```

- **disable_async_read**

Theo mặc định, các thao tác đọc là bất đồng bộ; đọc đồng bộ sẽ có hiệu năng kém hơn.

Ví dụ:

```
[root@10-9-120-211 ~]#  us3fs --disable_async_read <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=10
10+0 records in
10+0 records out
41943040 bytes (42 MB, 40 MiB) copied, 10.2345 s, 4.1 MB/s

[root@10-9-120-211 ~]#  us3fs <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=10
10+0 records in
10+0 records out
41943040 bytes (42 MB, 40 MiB) copied, 0.685801 s, 61.2 MB/s
```

- **parallel**

Tăng tính song song có thể cải thiện hiệu năng đọc/ghi, nhưng cũng làm tăng mức tiêu thụ tài nguyên hệ thống.

Ví dụ:

```
// Độ song song mặc định là 20
[root@10-9-120-211 ~]# us3fs <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# dd if=/dev/zero of=<your_file> bs=4M count=1024
1024+0 records in
1024+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 25.5351 s, 168 MB/s

// Đặt độ song song thành 32
[root@10-9-120-211 ~]# us3fs --parallel=32 <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# dd if=/dev/zero of=<your_file> bs=4M count=1024
1024+0 records in
1024+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 18.3614 s, 234 MB/s
```

- **readahead**

Việc điều chỉnh đọc trước (readahead) có tác động đáng kể đến việc đọc tuần tự các tệp lớn. Chúng tôi khuyên dùng cấu hình từ `16m~32m`, nhưng nó sẽ làm tăng mức sử dụng bộ nhớ; hãy giảm xuống nếu cần thiết.

Ví dụ:

```shell
// Kích thước đọc trước mặc định là 16MB
[root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1024
1024+0 records in
1024+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 60.0498 s, 71.5 MB/s

// Đặt kích thước đọc trước thành 32MB
[root@10-9-120-211 ~]# us3fs --readahead=32m <your_bucket> <mountpoint>
[root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1024
1024+0 records in
1024+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 37.6013 s, 114 MB/s
```

## Tối ưu hóa theo kịch bản

### Các tham số liên quan đến hiệu năng

- `parallel`: các luồng song song; ảnh hưởng đến tải CPU. Khuyên dùng từ 20~40.
- `critical`: bật xác thực ETag cục bộ khi ghi; có thể làm tăng mức sử dụng CPU khoảng 50%.
- `readahead`: cửa sổ đọc trước (readahead). Khuyên dùng từ 16m~32m; làm tăng mức sử dụng bộ nhớ.
- `keep_pagecache`: giữ lại dữ liệu trong pagecache của VFS cho đến khi thời gian sửa đổi (modtime) hoặc kích thước tệp thay đổi.
- `wb`: gộp các thao tác ghi trong pagecache và gửi các gói I/O lớn hơn (mặc định 128K).
- `fuse_session_cnt`: số lượng kết nối đến mô-đun FUSE của nhân hệ điều hành; có thể cải thiện hiệu năng nhưng làm tăng mức sử dụng CPU/bộ nhớ.

### Kịch bản file nhỏ

Đối với số lượng lớn các tệp nhỏ, bạn can bật bộ nhớ đệm cục bộ bằng tùy chọn `-l`. Khi được bật, ban đầu US3FS sẽ tải các tệp hiện có có kích thước <=4MB trong thư mục bộ nhớ đệm lên bucket và giữ nguyên đường dẫn. Các thao tác ghi tệp có kích thước <=4MB sẽ được ghi vào bộ nhớ đệm cục bộ trước rồi tải lên bất đồng bộ; nếu thao tác ghi cục bộ thất bại, hệ thống sẽ chuyển sang ghi đồng bộ trực tiếp lên S3.

Lưu ý: việc tải lên bất đồng bộ có thể thất bại ở phía máy chủ; US3FS sẽ thử lại cho đến khi thành công.

### Kịch bản thông lượng đọc cao

- `cache_dirs`: các đĩa cục bộ dùng cho bộ nhớ đệm đọc. Ưu tiên sử dụng ổ NVMe cục bộ. Bạn có thể thiết lập nhiều đĩa phân tách bằng dấu `,`. Tránh sử dụng đĩa hệ thống.
- `cache_size_limit`: giới hạn trên của kích thước bộ nhớ đệm; thuật toán loại bỏ LRU sẽ được kích hoạt khi đạt tới giới hạn.
- `page_size`: khi bật bộ nhớ đệm đọc cục bộ, hãy đặt `page_size` từ `1048576` thành `8388608`.

### Bộ nhớ đệm đọc chia sẻ

Để chia sẻ bộ nhớ đệm đọc giữa nhiều điểm gắn, hãy khởi động một nút chính (master):

```
us3fs run-master --listen_addr 192.168.0.10:6667
```

Sau đó, thiết lập cấu hình `master_addr` của các điểm gắn khác thành `192.168.0.10:6667`. Các điểm gắn sẽ gửi tín hiệu nhịp tim (heartbeat) đến nút chính và tạo thành một cụm bộ nhớ đệm đọc nhỏ.

- `enable_remote_cache`: khi được bật trên một điểm gắn, các điểm gắn khác có thể kết nối với nó để đọc dữ liệu đã lưu trong bộ nhớ đệm nếu có sẵn.
- `data_port`: cổng được mở ra để truy cập từ xa khi `enable_remote_cache` được bật.

## Tự động gắn

Phương pháp thực hành tốt nhất được khuyến nghị là sử dụng `systemctl` để US3FS tự động gắn lại sau khi thoát bất thường hoặc khởi động lại máy. Đảm bảo bản phân phối Linux của bạn hỗ trợ `systemctl` (hiện tại không hỗ trợ Windows):

- Ubuntu >= 15.04
- CentOS/RHEL >= 7

Sau khi đáp ứng các yêu cầu hệ thống, hãy làm theo các bước sau:

1. Tạo dịch vụ (service unit)

Tạo tệp `/etc/systemd/system/us3fs.service` với nội dung sau:

```
[Unit]
Description=US3FS (User Space FileSystem for US3)
Requires=network-online.target
After=network-online.target

[Service]
Type=forking
User=<user>
Group=<group>
Restart=always
RestartSec=10
ExecStart=/bin/us3fs --passwd=/etc/us3fs/us3fs.conf --keep_pagecache <your_bucket> <mountpoint>
ExecStop=/bin/umount <monutpoint>
[Install]
WantedBy=multi-user.target
```

- `User`: người dùng cần truy cập vào điểm gắn (ví dụ: root)
- `Group`: nhóm cần truy cập vào điểm gắn (ví dụ: root)
- `ExecStart`: lệnh gắn; tùy chỉnh theo nhu cầu

Chạy lệnh `systemctl daemon-reload` để tải dịch vụ mới.

2. Khởi động/dừng dịch vụ

- Khởi động: `systemctl start us3fs.service`
- Dừng: `systemctl stop us3fs.service`
- Khởi động lại: `systemctl restart us3fs.service`
- Trạng thái: `systemctl status us3fs.service`

3. Bật tự động khởi động cùng hệ thống

Chạy lệnh `systemctl enable us3fs.service`.