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)
This commit is contained in:
308
docs/LIBISCSI_DOCKER_TGT_TEST.md
Normal file
308
docs/LIBISCSI_DOCKER_TGT_TEST.md
Normal file
@@ -0,0 +1,308 @@
|
||||
# libiscsi Initiator ↔ Docker tgt 测试报告
|
||||
|
||||
**测试日期**: 2026-05-30 15:05
|
||||
**测试环境**: macOS 26.5 arm64, M4 Mac mini
|
||||
**测试工具**: libiscsi v1.20.3 (Homebrew), tgt (Ubuntu 22.04 Docker)
|
||||
|
||||
---
|
||||
|
||||
## 测试架构
|
||||
|
||||
```
|
||||
macOS (libiscsi userspace) Colima VM (tgt kernel)
|
||||
┌─────────────────────┐ ┌─────────────────────┐
|
||||
│ iscsi-perf │ │ tgtd daemon │
|
||||
│ iscsi-ls │ │ /lun0.img (256MB) │
|
||||
│ iscsi-inq │ │ Port: 3260 │
|
||||
│ │ │ │
|
||||
│ TCP: 127.0.0.1 │◄────────────►│ │
|
||||
│ (Colima port fwd) │ │ │
|
||||
└─────────────────────┘ └─────────────────────┘
|
||||
▲ ▲
|
||||
│ │
|
||||
libiscsi (userspace) tgt (Linux kernel)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试结果
|
||||
|
||||
### ✅ 成功项目
|
||||
|
||||
|测试项|结果|说明|
|
||||
|------|:----:|------|
|
||||
|tgt启动|✅|Target ready, LUN 1 (268MB)|
|
||||
|libiscsi发现|⚠️|发现target但连接失败(Portal IP问题)|
|
||||
|libiscsi SCSI Inquiry|✅|Vendor: IET, Product: VIRTUAL-DISK|
|
||||
|libiscsi性能测试|✅|4KB ~ 256KB块大小测试完成|
|
||||
|
||||
---
|
||||
|
||||
### 性能数据(顺序读取)
|
||||
|
||||
|块大小|吞吐量|IOPS|说明|
|
||||
|------|:------:|:----:|------|
|
||||
|4KB|13 MB/s|6,750|小块,高IOPS|
|
||||
|64KB|162 MB/s|5,200|中等块|
|
||||
|128KB|252 MB/s|4,032|大块|
|
||||
|256KB|249 MB/s|1,994|最大块(标准测试)|
|
||||
|
||||
**最佳性能**: 128KB块,252 MB/s
|
||||
|
||||
---
|
||||
|
||||
### SCSI Inquiry结果
|
||||
|
||||
```
|
||||
Peripheral Qualifier: CONNECTED
|
||||
Peripheral Device Type: DIRECT_ACCESS
|
||||
Version: SPC-3, iSCSI
|
||||
Vendor: IET
|
||||
Product: VIRTUAL-DISK
|
||||
Revision: 0001
|
||||
```
|
||||
|
||||
**确认**: tgt target正确响应SCSI命令
|
||||
|
||||
---
|
||||
|
||||
## 性能对比分析
|
||||
|
||||
### 与其他方案对比
|
||||
|
||||
|方案|块大小|吞吐量|倍数(相对libiscsi)|说明|
|
||||
|------|------|:------:|:------------------:|------|
|
||||
|**libiscsi ↔ Docker tgt**|256KB|**249 MB/s**|**1.0x (baseline)**|真实TCP/IP iSCSI|
|
||||
|gotgt native (localhost)|256KB|3275 MB/s|**13.2x faster**|TCP/IP但无Colima开销|
|
||||
|Docker tgt容器内|256KB|19200 MB/s|**77.1x faster**|本地文件,非真实iSCSI|
|
||||
|macOS NVMe本地|256KB|3400 MB/s|**13.7x faster**|硬件基准|
|
||||
|
||||
**关键发现**:
|
||||
- 真实TCP/IP iSCSI性能:**249 MB/s**
|
||||
- Docker容器内测试(19200 MB/s)**不代表真实iSCSI性能**
|
||||
- Colima VM开销:端口转发 + virtiofs,导致性能下降
|
||||
|
||||
---
|
||||
|
||||
### 为什么libiscsi ↔ Docker tgt慢?
|
||||
|
||||
**原因分析**:
|
||||
|
||||
1. **TCP/IP协议栈开销** ✅
|
||||
- libiscsi → localhost:3260 → Colima VM → tgt
|
||||
- TCP握手、PDU解析、确认机制
|
||||
|
||||
2. **Colima端口转发开销** ✅
|
||||
- macOS → Colima VM的网络转发
|
||||
- virtiofs或bridge模式
|
||||
|
||||
3. **tgt kernel开销** ✅
|
||||
- Linux kernel SCSI target处理
|
||||
- Block I/O调度
|
||||
|
||||
4. **libiscsi userspace开销** ✅
|
||||
- 非kernel initiator,CPU开销更高
|
||||
- 无DMA优化
|
||||
|
||||
---
|
||||
|
||||
### 为什么gotgt native更快?
|
||||
|
||||
**gotgt native (3275 MB/s) vs libiscsi ↔ Docker tgt (249 MB/s)**
|
||||
|
||||
**差异**: **13.2倍**
|
||||
|
||||
**原因**:
|
||||
1. gotgt在macOS本地运行(无Colima VM)
|
||||
2. libiscsi → gotgt 直接localhost连接
|
||||
3. 无端口转发开销
|
||||
4. gotgt是Go native,性能优化
|
||||
|
||||
---
|
||||
|
||||
### 为什么Docker tgt容器内测试不合理?
|
||||
|
||||
**Docker tgt容器内 (19200 MB/s) 不是真实iSCSI!**
|
||||
|
||||
**原因**:
|
||||
- 容器内直接访问LUN文件(`/lun0.img`)
|
||||
- 无TCP/IP传输
|
||||
- 无SCSI协议解析
|
||||
- 本地文件系统访问(ext4)
|
||||
|
||||
**正确的对比**:
|
||||
- 真实iSCSI:249 MB/s(libiscsi ↔ Docker tgt)
|
||||
- 本地文件:19200 MB/s(容器内文件访问)
|
||||
|
||||
**结论**: 之前测试的19200 MB/s **不代表iSCSI性能**
|
||||
|
||||
---
|
||||
|
||||
## libiscsi发现问题
|
||||
|
||||
**问题**: `iscsi-ls -s iscsi://127.0.0.1:3260`
|
||||
|
||||
**错误**:
|
||||
```
|
||||
Target:iqn.2026-05.momentry:libiscsi-test Portal:172.17.0.2:3260,1
|
||||
list_luns: iscsi_connect failed. iscsi_service failed with :
|
||||
iscsi_service_reconnect_if_loggedin. Can not reconnect right now.
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- tgt返回Portal IP为 `172.17.0.2`(Docker内部IP)
|
||||
- libiscsi尝试连接 `172.17.0.2:3260`(无法从macOS访问)
|
||||
- 需要配置tgt使用 `127.0.0.1` 作为Portal
|
||||
|
||||
**解决方法**:
|
||||
- 配置tgt Portal为 `0.0.0.0:3260` 或 `127.0.0.1:3260`
|
||||
- 或直接使用iscsi-inq/perf(带认证参数)
|
||||
|
||||
---
|
||||
|
||||
## 测试命令记录
|
||||
|
||||
### Step 1: 启动Docker tgt
|
||||
|
||||
```bash
|
||||
docker run -d --name iscsi-tgt --privileged -p 3260:3260 ubuntu:22.04 bash -c "
|
||||
apt-get install -y tgt &&
|
||||
dd if=/dev/zero of=/lun0.img bs=1M count=256 &&
|
||||
echo '<target iqn.2026-05.momentry:libiscsi-test>
|
||||
backing-store /lun0.img
|
||||
incominguser testuser testpass
|
||||
</target>' > /etc/tgt/targets.conf &&
|
||||
tgtd &&
|
||||
sleep 2 &&
|
||||
tgt-admin -e &&
|
||||
tail -f /dev/null
|
||||
"
|
||||
```
|
||||
|
||||
### Step 2: 验证tgt状态
|
||||
|
||||
```bash
|
||||
docker exec iscsi-tgt tgtadm --mode target --op show
|
||||
```
|
||||
|
||||
**结果**: Target ready, LUN 1 (268MB)
|
||||
|
||||
### Step 3: libiscsi SCSI Inquiry
|
||||
|
||||
```bash
|
||||
iscsi-inq iscsi://testuser:testpass@127.0.0.1:3260/iqn.2026-05.momentry:libiscsi-test/1
|
||||
```
|
||||
|
||||
**结果**: Vendor: IET, Product: VIRTUAL-DISK, SPC-3
|
||||
|
||||
### Step 4: libiscsi性能测试
|
||||
|
||||
```bash
|
||||
# 4KB blocks
|
||||
iscsi-perf -b 4 iscsi://testuser:testpass@127.0.0.1:3260/iqn.2026-05.momentry:libiscsi-test/1
|
||||
# 结果: 13 MB/s, 6,750 IOPS
|
||||
|
||||
# 64KB blocks
|
||||
iscsi-perf -b 64 iscsi://testuser:testpass@127.0.0.1:3260/iqn.2026-05.momentry:libiscsi-test/1
|
||||
# 结果: 162 MB/s, 5,200 IOPS
|
||||
|
||||
# 128KB blocks
|
||||
iscsi-perf -b 128 iscsi://testuser:testpass@127.0.0.1:3260/iqn.2026-05.momentry:libiscsi-test/1
|
||||
# 结果: 252 MB/s, 4,032 IOPS
|
||||
|
||||
# 256KB blocks
|
||||
iscsi-perf -b 256 iscsi://testuser:testpass@127.0.0.1:3260/iqn.2026-05.momentry:libiscsi-test/1
|
||||
# 结果: 249 MB/s, 1,994 IOPS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键结论
|
||||
|
||||
### ✅ 成功验证
|
||||
|
||||
1. **libiscsi initiator成功连接Docker tgt** ✅
|
||||
- SCSI Inquiry正确响应
|
||||
- 性能测试完整运行
|
||||
|
||||
2. **真实TCP/IP iSCSI性能**: **249 MB/s** @ 256KB blocks ✅
|
||||
- 这才是真实的iSCSI网络性能
|
||||
- 不是容器内的19200 MB/s
|
||||
|
||||
3. **libiscsi工具验证** ✅
|
||||
- iscsi-inq: SCSI Inquiry成功
|
||||
- iscsi-perf: 性能测试成功
|
||||
- iscsi-ls: Portal IP问题(可解决)
|
||||
|
||||
---
|
||||
|
||||
### ⚠️ 重要修正
|
||||
|
||||
**之前测试的错误理解**:
|
||||
|
||||
- ❌ Docker tgt容器内19200 MB/s **不是真实iSCSI性能**
|
||||
- ❌ 需要区分"容器内文件访问"vs"真实TCP/IP iSCSI"
|
||||
|
||||
**正确理解**:
|
||||
|
||||
|测试场景|性能|说明|
|
||||
|----------|:------:|------|
|
||||
|Docker tgt容器内文件访问|19200 MB/s|本地文件,无网络开销|
|
||||
|**libiscsi ↔ Docker tgt**|**249 MB/s**|**真实TCP/IP iSCSI**|
|
||||
|
||||
---
|
||||
|
||||
### 性能差异原因
|
||||
|
||||
**19200 vs 249 MB/s(77倍差异)**:
|
||||
|
||||
1. **容器内文件访问**:
|
||||
- 直接访问 `/lun0.img`
|
||||
- ext4文件系统
|
||||
- 无TCP/IP、无SCSI协议
|
||||
|
||||
2. **真实TCP/IP iSCSI**:
|
||||
- TCP连接建立
|
||||
- iSCSI PDU封装/解析
|
||||
- SCSI命令处理
|
||||
- Colima端口转发
|
||||
|
||||
---
|
||||
|
||||
## 后续建议
|
||||
|
||||
### 优化方向
|
||||
|
||||
1. **配置tgt Portal IP** ⚠️
|
||||
- 设置Portal为 `0.0.0.0:3260`
|
||||
- 解决iscsi-ls连接问题
|
||||
|
||||
2. **测试gotgt native vs Docker tgt** ✅
|
||||
- gotgt: 3275 MB/s
|
||||
- Docker tgt: 249 MB/s
|
||||
- 对比Colima开销
|
||||
|
||||
3. **多块大小优化** ✅
|
||||
- 128KB块最优(252 MB/s)
|
||||
- 调整应用层块大小
|
||||
|
||||
4. **测试网络延迟** ⚠️
|
||||
- 测试ping延迟
|
||||
- 分析Colima端口转发开销
|
||||
|
||||
---
|
||||
|
||||
## 文件记录
|
||||
|
||||
|文件|说明|
|
||||
|------|------|
|
||||
|`docs/LIBISCSI_DOCKER_TGT_TEST.md`|本测试报告|
|
||||
|`docs/ISCSI_GOTGT_TEST_REPORT.md`|gotgt native测试|
|
||||
|`docs/ISCSI_PERFORMANCE_COMPARISON.md`|之前的对比(需修正)|
|
||||
|`docker/Dockerfile.iscsi_target`|Docker tgt配置|
|
||||
|
||||
---
|
||||
|
||||
**测试完成**: 2026-05-30 15:05
|
||||
**版本**: v1.0
|
||||
**关键发现**: 真实TCP/IP iSCSI性能为 **249 MB/s**,容器内19200 MB/s不代表真实性能。
|
||||
Reference in New Issue
Block a user