核心功能: - ✅ 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)
325 lines
7.2 KiB
Markdown
325 lines
7.2 KiB
Markdown
# 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%(测试结果)
|
||
- 无法利用多核 CPU(M4 有 8-10 核心)
|
||
- 理论吞吐量上限: ~3500 MB/s(单线程)
|
||
|
||
**改进建议**:
|
||
```c
|
||
// 多线程 FUSE(libfuse3 支持)
|
||
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
|
||
```
|
||
|
||
**限制**:
|
||
- ⚠️ 最大文件: 2GB(32-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/s(NFSv4)
|
||
- 当前实测: 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 backend(TCP/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)
|