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

7.9 KiB
Raw Blame History

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.2Docker内部IP
  • libiscsi尝试连接 172.17.0.2:3260无法从macOS访问
  • 需要配置tgt使用 127.0.0.1 作为Portal

解决方法:

  • 配置tgt Portal为 0.0.0.0:3260127.0.0.1:3260
  • 或直接使用iscsi-inq/perf带认证参数

测试命令记录

Step 1: 启动Docker tgt

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状态

docker exec iscsi-tgt tgtadm --mode target --op show

结果: Target ready, LUN 1 (268MB)

Step 3: libiscsi SCSI Inquiry

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性能测试

# 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不代表真实性能。