Files
markbase/docs/LIBISCSI_DOCKER_TGT_TEST.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

308 lines
7.9 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.
# 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 initiatorCPU开销更高
- 无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
**正确的对比**:
- 真实iSCSI249 MB/slibiscsi ↔ 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/s77倍差异**:
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不代表真实性能。