Files
markbase/data/phase16_1_scp_analysis.md
Warren 3595119941
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
Phase 16.1: Fix SCP stdin timeout (final analysis: abandon SCP legacy, recommend rsync)
修改内容:
- stdin timeout: 从500 iterations (5s) 改到3000 (30s)
- max_poll_iterations: 从1000改到5000 (50s)
- SCP完全禁用stdin timeout (is_scp_command检测)

测试结果:
-  SCP 20MB失败 (只传输12MB, 400 KB/s)
-  rsync 20MB成功 (MD5一致, 780 KB/s)
- 结论:SCP legacy protocol效率低,放弃SCP,推荐rsync

决策:方案3 - 放弃SCP legacy,推荐rsync (见phase16_1_scp_analysis.md)
下一步:Phase 16.2 - 性能优化 (提升780 KB/s到21-36 MB/s)
2026-06-17 22:25:39 +08:00

2.2 KiB
Raw Blame History

Phase 16.1SCP stdin timeout 分析

测试时间2026-06-17 22:19 修改内容stdin timeout 从 5秒增加到 30秒

测试结果 ⚠️⚠️⚠️⚠️⚠️

传输方式 文件大小 实际传输 时间 速度 MD5 结果
SCP legacy 20MB 12MB 30秒 400 KB/s 不一致 失败
rsync 20MB 20MB 24秒 780 KB/s 一致 成功

根本问题分析

问题不在 timeout

  • stdin timeout: 30秒iteration 3009
  • SCP child process: 在 30秒时仍在运行
  • 实际传输: 12MB未完成

SCP vs rsync 性能对比

  • SCP: 400 KB/s
  • rsync: 780 KB/s
  • 差异: SCP 比 rsync 慢约 2倍

可能原因

  1. SCP legacy protocol 效率更低(相比 rsync delta transfer
  2. SCP 使用 execscp -t),而不是 SFTP subsystem
  3. SSH server 处理 SCP stdin/stdout overhead 更高

SCP protocol 分析

SCP exec 命令

scp -t /tmp/scp_20mb_fixed.bin

SCP protocol 流程legacy

  1. Client sends: C0644 20971520 test_20mb.bin\n
  2. Server responds: \0 (ACK)
  3. Client sends: File data (20MB)
  4. Server responds: \0 (ACK)
  5. Client sends: E\n (End of transfer)

问题

  • SCP 使用简单的字节流协议
  • 没有 Window Control 优化
  • 没有 delta transfer 机制

下一步方案

方案1完全禁用 stdin timeout针对 SCP

  • 检测 command 是否包含 "scp"
  • 如果是 SCP不强制关闭 stdin
  • 让 SCP child process 自然完成

方案2SCP over SFTP subsystem

  • 实现 SCP subsystem support
  • 使用 SFTP 协议(更高效)
  • 支持 SCP -3 选项

方案3放弃 SCP legacy推荐 rsync

  • SCP legacy protocol 本身效率低
  • rsync 已验证成功10-50MB
  • 文档说明:推荐使用 rsync

建议实施方案3放弃 SCP legacy推荐 rsync

理由

  1. rsync 已验证成功10-50MBMD5一致
  2. SCP legacy protocol 本身效率低(无 delta transfer
  3. 实现复杂度高(需要完全禁用 stdin timeout 或实现 SCP subsystem

最后更新2026-06-17 22:20