> For the complete documentation index, see [llms.txt](https://documentation.alluxio.io/ee-ai-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.alluxio.io/ee-ai-cn/performance/fuse-workspace.md).

# FUSE Full POSIX Workspace

{% hint style="warning" %}
此功能自 AI-3.9-16.0.0 起为实验性功能。
{% endhint %}

本指南介绍如何使用 FoundationDB（FDB）作为元数据后端，部署支持**完整 POSIX 语义的 FUSE Workspace**。与基础版 [FUSE 写入优化](/ee-ai-cn/performance/fuse-write-cache.md)（一次性写入、不支持 rename）不同，此模式通过 FUSE 挂载支持随机写入、覆盖写、截断、rename 等标准 POSIX 操作。

{% hint style="info" %}
目前，FUSE Workspace 仅支持 **TRANSIENT** 路径配置。通过 Workspace 写入的数据不会自动持久化到 UFS。如使用 Worker PageStore，请通过应用层检查点确保数据持久性；如需 UFS 原生持久性，请使用 UFS PageStore。
{% endhint %}

FDB 模式以 FoundationDB 作为分布式强一致性元数据存储，支持多节点访问同一数据集。数据可存储在 Worker NVMe（低延迟）或 UFS PageStore（高持久性）。

## 与其他模式的对比

|              | [S3-API 写入优化](/ee-ai-cn/performance/s3-write-cache.md) | [FUSE 写入优化](/ee-ai-cn/performance/fuse-write-cache.md) | FUSE Full POSIX Workspace（本指南） |
| ------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------ |
| **接口**       | S3 API（`PUT`、`GET`）                                    | FUSE（POSIX）                                            | FUSE（POSIX）                    |
| **写入模型**     | 顺序（Multipart Upload）                                   | 顺序，关闭后一次性写入                                            | 随机写入、覆盖写、truncate              |
| **POSIX 支持** | N/A                                                    | 有限（不支持 `rename`，一次性写入）                                 | **完整**                         |
| **元数据后端**    | FDB                                                    | FDB                                                    | FDB（分布式）                       |
| **数据存储**     | Worker NVMe                                            | Worker NVMe                                            | Worker NVMe 或 UFS PageStore    |
| **需要 FDB**   | 是                                                      | 是                                                      | 是                              |
| **多节点访问**    | 是                                                      | 是                                                      | 是                              |

## POSIX 兼容性

| 操作                           | 支持情况 | 说明                          |
| ---------------------------- | :--: | --------------------------- |
| `open` / `close`             |   ✅  |                             |
| `read` / `write`（顺序）         |   ✅  |                             |
| `read` / `write`（随机、seek）    |   ✅  | 日志结构写入；启用 compaction 可改善读性能 |
| `rename`（文件和目录）              |   ✅  | 在同一命名空间内原子操作                |
| `truncate` / `ftruncate`     |   ✅  |                             |
| `mkdir` / `rmdir`            |   ✅  |                             |
| `unlink` / `rm`              |   ✅  | 软删除，后台清理                    |
| `chmod` / `chown` / `utimes` |   ✅  |                             |
| `stat` / `fstat`             |   ✅  | 大小和时间戳精确                    |
| `listdir`                    |   ✅  | 分页                          |
| `setxattr` / `getxattr`      |   ✅  | 扩展属性                        |
| `fsync` / `fdatasync`        |   ✅  | 刷新内存缓冲区并提交元数据               |
| `symlink` / `readlink`       |   ✅  | 符号链接                        |
| `mmap`                       |   ✅  |                             |

***

## 准备工作

* [ ] **Alluxio 集群已运行**，Worker 健康：

  ```shell
  kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/component=worker
  ```

  **预期：** Worker Pod 处于 `Running` 且 `Ready` 状态。
* [ ] **FDB Operator 和 CRD 已安装**：

  ```shell
  kubectl get pods -n alluxio-operator -l app.kubernetes.io/name=fdb-operator
  ```

  **预期：** FDB Operator Pod 处于 `Running` 状态。如未安装，请参考 [S3-API 写入优化 — 安装 FDB CRDs](/ee-ai-cn/performance/s3-write-cache.md)。
* [ ] **FDB 集群健康**：

  ```shell
  kubectl get pods -n <NAMESPACE> -l foundationdb.org/fdb-cluster-name
  ```

  **预期：** FDB controller、log 和 storage Pod 均处于 `Running` 状态。
* [ ] **FUSE 客户端已部署**：

  ```shell
  kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/component=fuse
  ```

  **预期：** FUSE Pod 处于 `Running` 状态。

## 部署

### 1. 启用 FUSE Workspace

在 `alluxio-cluster.yaml` 中添加以下配置：

```yaml
apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
spec:
  properties:
    alluxio.write.cache.enabled: "true"
    alluxio.write.cache.dual.buffer.file.system.type: "GENERIC_FDB_BACKED_V2"
  fuse:
    properties:
      alluxio.fuse.v2.enabled: "true"
  fdb:
    enabled: true
```

应用配置：

```shell
# 幂等操作
kubectl apply -f alluxio-cluster.yaml
```

### 2. 配置路径为 TRANSIENT

配置路径规则，使目标路径使用 `TRANSIENT` 策略模式。这将告知 Alluxio 将数据保存在 Workspace 中，不持久化到 UFS。

```shell
kubectl exec -i -n <NAMESPACE> <CLUSTER_NAME>-coordinator-0 -- \
  bash -c 'EDITOR="cp /dev/stdin" alluxio pathconfig edit' << 'EOF'
{
  "apiVersion": "v1.0",
  "defaultRule": {
    "description": "Global default",
    "policyMode": "TRANSIENT"
  },
  "pathRules": [ ]
}
EOF
```

预期输出：`Update successful!`

验证：

```shell
kubectl exec -i -n <NAMESPACE> <CLUSTER_NAME>-coordinator-0 -- \
  alluxio pathconfig test --path /data/test/file.txt
```

预期输出中应包含 `policyMode: TRANSIENT`。

### 3. 选择数据存储模式

#### 选项 A：Worker PageStore（默认 — 低延迟）

无需额外配置。数据存储在 Worker NVMe 上。

| 方面   | 说明                                           |
| ---- | -------------------------------------------- |
| 写入延迟 | 亚毫秒至数毫秒（本地网络至 Worker）                        |
| 容量   | 受限于 Worker 磁盘                                |
| 持久性  | 临时性 — Worker 故障时数据丢失（当前仅支持 `TRANSIENT` 路径配置） |

#### 选项 B：UFS PageStore（高持久性）

数据直接写入 UFS：

```yaml
spec:
  properties:
    # 启用 UFS PageStore（默认：false）
    alluxio.user.write.cache.random.access.ufs.page.store.enabled: "true"
    # UFS PageStore 数据的 UFS 基础路径（启用时必填）
    alluxio.user.write.cache.random.access.ufs.page.store.path: "s3://my-bucket/alluxio/pagestore"
```

| 方面     | 说明                        |
| ------ | ------------------------- |
| 写入延迟   | 较高（取决于 UFS 类型和网络）         |
| 容量     | 无限（UFS 容量）                |
| 持久性    | 高（UFS 原生复制，例如 HDFS 3 副本）  |
| 孤立文件清理 | Coordinator 定期扫描 UFS 孤立文件 |

### 4. 调整 Compaction（可选）

Compaction 默认启用。它合并积累的写日志以减少读放大。Compaction 可由写日志数量或存储空间放大率（物理大小 vs. 逻辑大小）触发。可调整以下阈值：

```yaml
spec:
  properties:
    # Compaction 主开关（默认：true）
    alluxio.write.cache.compaction.enabled: "true"
    # 当文件积累的写日志数达到此值时触发 compaction（默认：MAX_INT）
    alluxio.user.write.cache.trigger.compaction.on.write.log.count: "102400"
    # 当物理存储超出逻辑大小此百分比时触发 compaction（默认：50）
    alluxio.user.write.cache.compaction.space.amplification.percent: "50"
    # 跳过小于此大小文件的空间放大检查（默认：64MiB）
    alluxio.user.write.cache.compaction.space.amplification.min.file.size: "64MiB"
```

### 5. 启用元数据缓存（推荐）

对于读密集型工作负载（频繁执行 `stat`、`getattr`、`ls`），启用元数据缓存层可减少 FDB 负载：

```yaml
spec:
  properties:
    # 启用内存元数据缓存，TTL 为 3s（默认：false）
    alluxio.write.cache.metastore.cache.enabled: "true"
    # 将属性更新批量延迟到下次数据刷新，减少 FDB 写入（默认：false）
    alluxio.user.fuse.write.cache.defer.open.file.attr.update.enabled: "true"
```

> 元数据缓存使用 3 秒 TTL。在此窗口内，其他节点上的并发写入方可能看到略微过时的元数据。

### 6. 验证

```shell
# Worker 就绪
kubectl wait --for=condition=Ready pod \
  -l app.kubernetes.io/component=worker \
  -n <NAMESPACE> --timeout=120s

# FDB 健康
kubectl get pods -n <NAMESPACE> -l foundationdb.org/fdb-cluster-name

# 确认配置
kubectl exec -n <NAMESPACE> <CLUSTER_NAME>-coordinator-0 -- \
  alluxio conf get alluxio.write.cache.dual.buffer.file.system.type
```

**✅ 成功：** Worker 和 FDB Pod 均处于 `Running` 状态；配置返回 `GENERIC_FDB_BACKED_V2`。

## 关键配置

### 核心配置

启用 FUSE Workspace 所需的设置。这些属性用于激活 Workspace 子系统、选择 FDB 元数据后端并配置 FDB 连接。

| 属性                                                     | 默认值                               | 说明                             |
| ------------------------------------------------------ | --------------------------------- | ------------------------------ |
| `alluxio.write.cache.enabled`                          | `false`                           | Workspace 主开关。                 |
| `alluxio.write.cache.dual.buffer.file.system.type`     | —                                 | 设置为 `GENERIC_FDB_BACKED_V2`。   |
| `alluxio.fuse.v2.enabled`                              | `false`                           | 启用 FUSE V2 接口（必填）。             |
| `alluxio.foundationdb.cluster.file.path`               | `${alluxio.conf.dir}/fdb.cluster` | FDB 集群文件路径。由 Operator 自动注入。    |
| `alluxio.user.write.cache.in.memory.write.buffer.size` | `16MiB`                           | 每个文件的内存写缓冲区大小。满后刷新到 PageStore。 |

### Coordinator 后台任务

Coordinator 运行定期后台任务以维护系统健康，包括清理过期 FDB 锁和扫描 UFS 孤立文件。这些任务在启用后自动运行，无需手动干预。

| 属性                                                                       | 默认值    | 说明                         |
| ------------------------------------------------------------------------ | ------ | -------------------------- |
| `alluxio.coordinator.write.cache.background.tasks.enabled`               | `true` | Coordinator 后台任务主开关。       |
| `alluxio.coordinator.write.cache.cleanup.invalid.locks.grace.duration`   | `24h`  | 清理过期 FDB 锁的宽限期。            |
| `alluxio.coordinator.write.cache.check.ufs.orphan.file.period`           | `6h`   | UFS 孤立文件扫描间隔（仅 UFS 模式）。    |
| `alluxio.coordinator.write.cache.cleanup.ufs.orphan.file.grace.duration` | `24h`  | 删除 UFS 孤立文件的宽限期（仅 UFS 模式）。 |

### Compaction

写操作使用日志结构格式 — 每次写入追加一条新的写日志记录，而非原地修改数据。随着时间推移，这会导致读放大，因为读取必须合并所有重叠的日志记录。Compaction 将这些日志合并为连续数据，回收存储空间并提升读性能。Compaction 可由两个条件触发（满足其一即触发）：每文件**写日志数量**，或**空间放大率**（物理存储与逻辑文件大小之比）。

| 属性                                                                      | 默认值       | 说明                                                                   |
| ----------------------------------------------------------------------- | --------- | -------------------------------------------------------------------- |
| `alluxio.write.cache.compaction.enabled`                                | `true`    | 启用写日志 compaction。                                                    |
| `alluxio.user.write.cache.trigger.compaction.on.write.log.count`        | `MAX_INT` | 每文件触发 compaction 的写日志数量阈值。                                           |
| `alluxio.user.write.cache.compaction.space.amplification.percent`       | `50`      | 空间放大百分比阈值。当物理存储超出逻辑文件大小此百分比时触发 compaction。例如，`50` 表示在逻辑大小的 150% 时触发。 |
| `alluxio.user.write.cache.compaction.space.amplification.min.file.size` | `64MiB`   | 评估空间放大的最小逻辑文件大小。小于此阈值的文件跳过空间放大检查，避免不必要的 I/O。                         |

### UFS PageStore（仅 UFS 模式）

启用 UFS PageStore 后，文件数据直接写入 UFS（如 HDFS、S3、NAS），而非缓存在 Worker NVMe 上。这以较高写延迟换取 UFS 原生持久性。

| 属性                                                              | 默认值     | 说明                            |
| --------------------------------------------------------------- | ------- | ----------------------------- |
| `alluxio.user.write.cache.random.access.ufs.page.store.enabled` | `false` | 使用 UFS 作为数据存储，替代 Worker NVMe。 |
| `alluxio.user.write.cache.random.access.ufs.page.store.path`    | —       | UFS PageStore 数据的 UFS 基础路径。   |

### 元数据缓存与优化

FDB 模式将所有元数据存储在 FoundationDB 中。对于频繁执行 `stat`、`getattr` 或 `ls` 操作的读密集型工作负载，启用内存元数据缓存可通过短 TTL 本地缓存元数据来减少 FDB 读取负载。延迟属性更新选项通过将文件属性更新批量合并到下次数据刷新中，进一步减少 FDB 写入。

| 属性                                                                  | 默认值     | 说明                          |
| ------------------------------------------------------------------- | ------- | --------------------------- |
| `alluxio.write.cache.metastore.cache.enabled`                       | `false` | 启用内存元数据缓存（TTL 3s）。          |
| `alluxio.user.fuse.write.cache.defer.open.file.attr.update.enabled` | `false` | 将属性更新批量延迟到下次数据刷新，减少 FDB 写入。 |

## 监控

### Coordinator 指标

| 指标                                          | 说明                                             |
| ------------------------------------------- | ---------------------------------------------- |
| `alluxio_pfs_background_tasks{type, state}` | 后台任务状态。State：`RUNNING` / `SUCCESS` / `FAILED`。 |
| `alluxio_pfs_clean_invalid_lock_count`      | 已清理的无效 FDB 锁数量。                                |

### 客户端 — 流 I/O 指标

| 指标                                              | 说明                                                       |
| ----------------------------------------------- | -------------------------------------------------------- |
| `alluxio_pfs_stream_open_streams`               | 当前打开的流实例数量。                                              |
| `alluxio_pfs_stream_bytes_read{type}`           | 总读取字节数。标签 `type`：`positioned` / `internal`。              |
| `alluxio_pfs_stream_read_latency_ms{type}`      | 读取延迟直方图（ms）。标签 `type`：`positioned` / `internal`。         |
| `alluxio_pfs_stream_bytes_written{type}`        | 总写入字节数。标签 `type`：`position_write` / `append_write`。      |
| `alluxio_pfs_stream_write_latency_ms{type}`     | 写入延迟直方图（ms）。标签 `type`：`position_write` / `append_write`。 |
| `alluxio_pfs_stream_truncate_count{type}`       | Truncate 操作次数。标签 `type`：`shrink` / `grow` / `noop`。      |
| `alluxio_pfs_stream_flush_count{committed}`     | Flush 操作次数。标签 `committed`：`true`（数据已持久化）/ `false`。       |
| `alluxio_pfs_stream_flush_latency_ms`           | Flush 延迟直方图（ms）。                                         |
| `alluxio_pfs_stream_persist_count{type}`        | 数据从内存持久化到 PageStore 的次数。标签 `type`：`sync` / `async`。      |
| `alluxio_pfs_stream_read_ahead_triggered`       | 触发异步预读的次数。                                               |
| `alluxio_pfs_stream_inode_not_found{recovered}` | Flush 时 inode 未找到（文件已删除）。标签 `recovered`：`true` 表示恢复成功。   |

### 客户端 — 内存管理指标

| 指标                                         | 说明                 |
| ------------------------------------------ | ------------------ |
| `alluxio_pfs_memory_total_allocated_bytes` | 所有流实例当前占用的直接内存总量。  |
| `alluxio_pfs_memory_alloc_count`           | 缓冲区分配总次数。          |
| `alluxio_pfs_memory_alloc_bytes`           | 已分配直接内存总字节数。       |
| `alluxio_pfs_memory_release_count`         | 缓冲区释放总次数。          |
| `alluxio_pfs_memory_alloc_timeout_count`   | 缓冲区分配超时次数（等待配额）。   |
| `alluxio_pfs_memory_force_release_count`   | 流关闭时强制释放的未释放缓冲区次数。 |

### 客户端 — Page Store 指标

| 指标                                                 | 说明                                              |
| -------------------------------------------------- | ----------------------------------------------- |
| `alluxio_pfs_page_store_write_count{backend}`      | PageStore 写入操作次数。标签 `backend`：`worker` / `ufs`。 |
| `alluxio_pfs_page_store_write_bytes{backend}`      | 写入 PageStore 的字节数。                              |
| `alluxio_pfs_page_store_write_latency_ms{backend}` | PageStore 写入延迟直方图（ms）。                          |
| `alluxio_pfs_page_store_read_count{backend}`       | PageStore 读取操作次数。                               |
| `alluxio_pfs_page_store_read_bytes{backend}`       | 从 PageStore 读取的字节数。                             |
| `alluxio_pfs_page_store_read_latency_ms{backend}`  | PageStore 读取延迟直方图（ms）。                          |
| `alluxio_pfs_page_store_unpin_count`               | PageStore 文件 unpin（清理）操作次数。                     |

### 客户端 — Compaction 指标

| 指标                                                         | 说明                                                                             |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `alluxio_pfs_compaction_triggered_count{source}`           | Compaction 触发次数。                                                               |
| `alluxio_pfs_compaction_latency_ms`                        | Compaction 延迟直方图（ms）。在 Coordinator 上也有上报。                                      |
| `alluxio_pfs_compaction_throughput`                        | Compaction 写入吞吐量（字节）。在 Worker 上也有上报。                                           |
| `alluxio_pfs_compaction_reload_count`                      | Compaction 后额外重新加载的迭代次数。                                                       |
| `alluxio_pfs_compaction_block_outcome_count{outcome}`      | 每块 compaction 结果。标签 `outcome`：`worker_finished` / `worker_fallback` / `local`。 |
| `alluxio_pfs_compaction_worker_submit_count{result}`       | 向 Worker 提交 compaction 任务次数。标签 `result`：`success` / `failure`。                 |
| `alluxio_pfs_compaction_worker_status_check_count{result}` | Compaction 状态检查探测次数。                                                           |
| `alluxio_pfs_compaction_range_result_count{result}`        | 每范围 compaction 结果。标签 `result`：`compacted` / `skipped`。                         |
| `alluxio_pfs_write_log_load_count`                         | 写日志加载操作次数。                                                                     |
| `alluxio_pfs_write_log_load_latency_ms`                    | 写日志加载延迟直方图（ms）。                                                                |

### 客户端 — 预读指标

| 指标                                                       | 说明                                                  |
| -------------------------------------------------------- | --------------------------------------------------- |
| `alluxio_pfs_read_pattern_sequential_count`              | 被归类为顺序读的次数。                                         |
| `alluxio_pfs_read_pattern_total_count`                   | 预读跟踪器记录的总读取次数。                                      |
| `alluxio_pfs_read_ahead_decision_count{should_prefetch}` | 预读决策次数。标签 `should_prefetch`：`true` / `false`。       |
| `alluxio_pfs_read_ahead_memory_used_bytes`               | 预取缓冲区消耗的内存。                                         |
| `alluxio_pfs_read_ahead_submitted_count`                 | 已提交的预读任务数。                                          |
| `alluxio_pfs_read_ahead_skipped_count{reason}`           | 被跳过的预读任务数。标签 `reason`：`memory_limit` / `duplicate`。 |
| `alluxio_pfs_read_ahead_bytes_fetched`                   | 预取的总字节数。                                            |
| `alluxio_pfs_read_ahead_failed_count`                    | 预读任务因 I/O 错误失败的次数。                                  |
| `alluxio_pfs_read_ahead_eviction_count{type}`            | 缓冲区驱逐次数。标签 `type`：`stale` / `lru`。                  |
| `alluxio_pfs_read_ahead_evicted_bytes`                   | 从预取缓冲区驱逐的字节数。                                       |

### FDB 指标

| 指标                                                              | 说明                                                                    |
| --------------------------------------------------------------- | --------------------------------------------------------------------- |
| `alluxio_pfs_foundationdb_call_latency_ms{method, success}`     | FDB 调用延迟直方图（ms）。                                                      |
| `alluxio_pfs_fdb_iterator_batch_read_count{iterator_type}`      | FDB 迭代器批量读取次数。                                                        |
| `alluxio_pfs_fdb_iterator_entries_scanned{iterator_type}`       | FDB 迭代器扫描的键值条目数。                                                      |
| `alluxio_pfs_fdb_iterator_batch_read_latency_ms{iterator_type}` | FDB 迭代器批量读取延迟直方图（ms）。                                                 |
| `alluxio_pfs_fdb_iterator_errors{iterator_type, error_type}`    | FDB 迭代器错误次数。标签 `error_type`：`transaction_too_old` / `pb_parse_error`。 |

## 故障排除

### 写入延迟周期性飙升

**现象：** 写操作每隔几秒出现周期性延迟飙升。

**原因：** 内存写缓冲区已满，必须刷新到数据存储（Worker 或 UFS），导致写调用阻塞。

**处理方法：**

1. Worker 模式：确保 Worker NVMe 有足够的 IOPS。
2. UFS 模式：使用低延迟 UFS（本地 NAS 或配备快速磁盘的 HDFS）。
3. 检查 compaction 是否并发运行 — compaction 的读写操作会与前端 I/O 竞争资源。

***

### 读取延迟随时间增加

**现象：** 频繁被覆盖的文件读取速度变慢。

**原因：** 日志结构写入为每个块积累了大量写日志记录。每次读取必须合并所有重叠日志（读放大）。

**处理方法：**

1. 确认 `alluxio.write.cache.compaction.enabled` 为 `true`。
2. 降低 `alluxio.user.write.cache.trigger.compaction.on.write.log.count`（例如对写密集文件设为 `1024`）。
3. 监控 `alluxio_pfs_compaction_throughput` 以确认 compaction 跟得上写入速度。

***

### FDB 事务冲突

**现象：** 写操作间歇性失败，报 `FDB transaction conflict` 错误。

**原因：** 多个客户端并发写同一文件。FDB 使用 MVCC 检测冲突事务。

**处理方法：**

1. 通常是瞬时错误 — 客户端会自动重试。
2. 如频繁出现，避免多个进程同时写同一文件。
3. 监控 FDB 集群健康状态：

   ```shell
   kubectl exec -n <NAMESPACE> <FDB_POD> -- fdbcli --exec "status"
   ```

***

### 孤立文件积累（UFS 模式）

**现象：** 即使文件已删除，UFS 存储用量仍持续增长。

**处理方法：**

1. 如可接受更快的清理速度，缩短 `alluxio.coordinator.write.cache.check.ufs.orphan.file.period` 和 `alluxio.coordinator.write.cache.cleanup.ufs.orphan.file.grace.duration`。
2. 宽限期内的文件会被保留，以避免删除正在活跃写入的数据。

***

### Worker 磁盘空间不足（Worker 模式）

**现象：** 即使 UFS 有容量，写操作仍报空间错误。

**处理方法：**

1. 提高 `alluxio.worker.page.store.pinned.file.capacity.limit.ratio`（默认 `0.3`，提升至 `0.5`）。
2. 增加 Worker NVMe 容量或增加 Worker 数量。

***

### 启动时 FDB 连接失败

**现象：** FUSE Pod 或 Worker 启动时报 FDB 连接错误。

**处理方法：**

1. 验证 FDB Pod 是否运行：

   ```shell
   kubectl get pods -n <NAMESPACE> -l foundationdb.org/fdb-cluster-name
   ```
2. 如使用 Operator 管理的 FDB，集群文件会自动注入。如使用外部 FDB，请显式设置 `alluxio.foundationdb.cluster.file.path`。

## 性能调优

| 场景                   | 建议                                                                                                                        |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **FDB 负载过高**         | 启用 `alluxio.write.cache.metastore.cache.enabled`，降低元数据读取频率。                                                               |
| **读取延迟增长**           | 启用 compaction，降低 `alluxio.user.write.cache.trigger.compaction.on.write.log.count`。                                        |
| **Worker 磁盘压力**      | 增加 Worker 数量或扩展 Worker NVMe 容量。                                                                                           |
| **stat / getattr 慢** | 同时启用 `alluxio.write.cache.metastore.cache.enabled` 和 `alluxio.user.fuse.write.cache.defer.open.file.attr.update.enabled`。 |
| **随机写入密集**           | 确保 compaction 已启用并设置合理的触发阈值。                                                                                              |

***

## 验证完整 POSIX 操作

### 写入与读后写

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- \
  bash -c 'echo "hello posix write cache" > /data/test/posix-test.txt'

kubectl exec -i -n <NAMESPACE> <APP_POD> -- \
  cat /data/test/posix-test.txt
```

**✅ 成功：** 输出显示 `hello posix write cache`。

### 随机写入与覆盖写

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- bash -c '
  dd if=/dev/zero of=/data/test/random.bin bs=1M count=10
  echo "overwritten" | dd of=/data/test/random.bin bs=1 seek=4194304 conv=notrunc
  dd if=/data/test/random.bin bs=1 skip=4194304 count=11
'
```

**✅ 成功：** 输出显示 `overwritten`。

### Rename（原子操作）

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- bash -c '
  echo "atomic save" > /data/test/file.tmp
  mv /data/test/file.tmp /data/test/file.txt
  cat /data/test/file.txt
'
```

**✅ 成功：** 输出显示 `atomic save`。

### Truncate

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- bash -c '
  echo "long content here" > /data/test/trunc.txt
  truncate -s 4 /data/test/trunc.txt
  wc -c /data/test/trunc.txt
'
```

**✅ 成功：** 输出显示 `4`。

### 目录 Rename

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- bash -c '
  mkdir -p /data/test/dir-a/sub
  touch /data/test/dir-a/sub/file.txt
  mv /data/test/dir-a /data/test/dir-b
  ls /data/test/dir-b/sub/
'
```

**✅ 成功：** 输出显示 `file.txt`。

### 符号链接

```shell
kubectl exec -i -n <NAMESPACE> <APP_POD> -- bash -c '
  echo "link target" > /data/test/original.txt
  ln -s /data/test/original.txt /data/test/link.txt
  cat /data/test/link.txt
  readlink /data/test/link.txt
'
```

**✅ 成功：** 输出显示 `link target` 和 `/data/test/original.txt`。

## 参考资料

* [S3-API 写入优化](/ee-ai-cn/performance/s3-write-cache.md) — 通过 S3 API 使用写缓存（顺序写入，无 POSIX）
* [FUSE 写入优化](/ee-ai-cn/performance/fuse-write-cache.md) — 通过 FUSE 访问基础写缓存（一次性写入，有限 POSIX）
* [POSIX API](/ee-ai-cn/data-access/fuse-based-posix-api.md) — FUSE 部署详情、挂载选项和读缓存模式
