Files
markbase/docs/fuse_poc/DESIGN_LIMITATIONS.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

325 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MarkBase FUSE - 设计限制分析
## 📊 数据库统计
- **节点总数**: 12,660 nodes
- **文件夹**: 803 folders
- **文件**: 11,857 files
- **平均大小**: 1.4 MB
- **最大文件**: 3.09 GB (VolPack_ME5012/Test_Plan_ME5.docx)
- **数据库大小**: 12.9 MB
---
## 🔧 设计限制详解
### 1. 缓存限制
#### 当前设计
```c
#define CACHE_SIZE 1000 // 文件缓存
#define PATH_CACHE_SIZE 2000 // 路径缓存
```
**限制**:
- ✅ 固定大小数组(不是动态增长)
- ⚠️ 超过 1000 个文件时,新文件不缓存
- ⚠️ 超过 2000 个路径时,新路径不缓存
- ✅ 只缓存最大文件(启动时预加载)
**影响**:
- 11,857 files 中,只有 1,000 个被缓存8.4%
- 首次访问未缓存文件时,需要数据库查询
- 性能会从 3300 MB/s 下降到 ~300 MB/s未缓存
**改进建议**:
```c
// 动态缓存LRU策略
#define CACHE_SIZE 5000 // 增加到 5000
#define PATH_CACHE_SIZE 10000 // 增加到 10000
// 或使用哈希表(无限制)
HashMap *file_cache;
HashMap *path_cache;
```
---
### 2. 单线程限制
#### 当前设计
```c
// FUSE operations 在单线程中执行
static pthread_mutex_t db_mutex;
static pthread_mutex_t cache_mutex;
```
**限制**:
- ✅ Thread-safe使用 mutex
- ⚠️ 单线程处理所有请求(并发瓶颈)
- ⚠️ CPU 使用率 100%(单核)
**影响**:
- 50 个并发请求时CPU 100%(测试结果)
- 无法利用多核 CPUM4 有 8-10 核心)
- 理论吞吐量上限: ~3500 MB/s单线程
**改进建议**:
```c
// 多线程 FUSElibfuse3 支持)
fuse_session_loop_mt(); // 使用多线程版本
// 或使用线程池
ThreadPool *pool;
pthread_pool_create(8); // M4 优化配置
```
---
### 3. 路径查询限制
#### 当前设计
```c
// 递归查询路径
for (level = 0; level < depth; level++) {
// 每层查询一次数据库
sqlite3_prepare_v2(...);
}
```
**限制**:
- ⚠️ 深度递归查询(多层目录时性能下降)
- ⚠️ 每层一次数据库查询
- ⚠️ 无路径索引优化
**影响**:
- `/Home/Accusys/Accusys_FAE/VolPack_ME5012/Test_Plan_ME5.docx`
- 深度: 5 层
- 查询次数: 5 次
- 性能: 从 3300 MB/s 下降到 ~500 MB/s
**改进建议**:
```sql
-- 创建路径索引
CREATE INDEX idx_path_lookup ON file_nodes(label, parent_id);
-- 或使用完整路径缓存
CREATE TABLE path_index (
full_path TEXT PRIMARY KEY,
node_id TEXT
);
```
---
### 4. 数据库路径硬编码
#### 当前设计
```c
static const char *db_path = "/Users/accusys/markbase/data/users/warren.sqlite";
```
**限制**:
- ❌ 硬编码路径(不支持多用户)
- ❌ 需要修改代码才能切换用户
- ❌ 不支持动态配置
**影响**:
- 每个用户需要编译不同版本
- 无法动态切换用户
**改进建议**:
```c
// 从参数或环境变量读取
char *db_path = getenv("MARKBASE_DB_PATH");
// 或
char *user = argv[1];
char db_path[256];
sprintf(db_path, "data/users/%s.sqlite", user);
```
---
### 5. 文件大小限制
#### 当前设计
```c
long file_size; // 32-bit signed integer
```
**限制**:
- ⚠️ 最大文件: 2GB32-bit signed
- ⚠️ 无法处理 >2GB 文件
**影响**:
- 当前最大文件: 3.09 GB超出限制
- 可能导致溢出错误
**改进建议**:
```c
long long file_size; // 64-bit integer
// 或
size_t file_size; // platform-specific (64-bit on macOS)
```
---
### 6. FUSE Backend 限制
#### 当前设计
```bash
fuse-t:/mb_mount on /private/tmp/mb_mount (nfs, ...)
```
**限制**:
- ⚠️ FUSE-T 使用 NFSv4 backend
- ⚠️ TCP/IP overhead: ~5-10%
- ⚠️ macOS 26+ 才支持 FSKit更快
**影响**:
- 理论上限: ~700-800 MB/sNFSv4
- 当前实测: 3300 MB/s缓存效果
**改进建议**:
```bash
# macOS 26+ 使用 FSKit backend
fuse-t --backend fskit
# 或直接使用 macFUSE但需要 kernel extension
```
---
### 7. 内存限制
#### 当前设计
```c
// 预分配固定内存
FileCacheEntry file_cache[1000];
PathCacheEntry path_cache[2000];
```
**限制**:
- ✅ 固定内存占用: ~1.5 MB
- ⚠️ 无法根据实际需求调整
- ⚠️ 小内存设备可能浪费资源
**影响**:
- 16GB RAM M4: 无影响
- 小内存设备4GB: ~0.04% 内存占用
**改进建议**:
```c
// 动态内存分配
FileCacheEntry *file_cache = malloc(actual_cache_size);
// 根据可用内存动态调整
size_t cache_size = system_memory * 0.01; // 1% of system memory
```
---
### 8. 功能限制
#### 当前实现
- ✅ read: 支持大文件读取
- ✅ readdir: 支持目录列表
- ✅ getattr: 支持文件属性
- ✅ lookup: 支持路径查找
- ⚠️ write: 已实现但未测试
- ⚠️ mkdir: 已实现但未测试
- ❌ rename: 未实现
- ❌ unlink: 未实现
- ❌ symlink: 未实现
- ❌ xattr: 未实现
- ❌ lock: 未实现
**影响**:
- 只能读取文件(只读模式)
- 无法创建、修改、删除文件
- 无法使用符号链接
**改进建议**:
- 添加完整的 POSIX FUSE operations
- 测试 write/mkdir 功能
- 实现缺失的 operations
---
## 📊 性能瓶颈分析
### 当前瓶颈
|瓶颈 |影响程度 |当前状态 |改进方案 |
|------|----------|----------|----------|
| **缓存大小** | ⭐⭐⭐ 高 | 8.4% 缓存 | 增加到 5000+ |
| **单线程** | ⭐⭐⭐ 高 | CPU 100% | 多线程 FUSE |
| **路径查询** | ⭐⭐ 中 | 5层递归 | 路径索引 |
| **文件大小** | ⭐ 低 | 2GB限制 | 改用 64-bit |
| **Backend** | ⭐ 低 | NFSv4 | FSKit (macOS 26+) |
---
## 🎯 推荐改进优先级
### Phase 1立即改进
1. **增加缓存大小** → CACHE_SIZE 5000, PATH_CACHE_SIZE 10000
2. **修复文件大小限制** → 使用 `long long file_size`
3. **动态数据库路径** → 从参数读取
### Phase 2中期改进
4. **多线程 FUSE** → 使用 `fuse_session_loop_mt()`
5. **路径索引** → 创建数据库索引
6. **完整 POSIX 操作** → 实现 write/rename/unlink
### Phase 3长期优化
7. **动态内存管理** → 根据系统内存调整
8. **FSKit Backend** → macOS 26+ 支持
9. **分布式缓存** → 支持 Redis/Memcached
---
## 📈 性能预期改进
|改进 |预期性能提升 |
|------|--------------|
| 缓存增加到 5000 | +20% (更多文件缓存) |
| 多线程 FUSE (8 threads) | +300% (利用多核) |
| 路径索引 | +50% (减少递归) |
| FSKit Backend | +10% (减少 overhead) |
| **综合改进** | **预期: 10 GB/s** ⭐⭐⭐ |
---
## 🔍 当前限制总结
**软限制(可改进)**:
- ✅ 缓存大小不足1000 vs 11857 files
- ✅ 单线程瓶颈(无法利用多核)
- ✅ 路径查询效率(递归查询)
- ✅ 文件大小限制32-bit
**硬限制(架构限制)**:
- ⚠️ FUSE-T NFSv4 backendTCP/IP overhead
- ⚠️ libfuse3 单线程设计(需使用 mt 版本)
- ⚠️ SQLite 数据库(非分布式)
---
## 🎬 结论
**当前设计**:
- ✅ 简单、稳定、易维护
- ✅ 性能优秀3300 MB/s
- ⚠️ 有明确的改进空间
**推荐策略**:
1. **短期**: 修复硬编码和文件大小限制
2. **中期**: 增加缓存和多线程支持
3. **长期**: 完整 POSIX 操作和 FSKit backend
---
**文档版本**: 1.0
**日期**: 2026-05-28
**分析基于**: markbase_v15_balanced.c (477 lines)