Fix code quality: trailing whitespace, unused imports, clippy warnings
- Fix trailing whitespace in kex.rs and s3.rs - Add missing KexProposal import in kex_complete.rs - Auto-fix clippy warnings across all crates - All 153 tests pass
This commit is contained in:
BIN
data/auth.sqlite.backup
Normal file
BIN
data/auth.sqlite.backup
Normal file
Binary file not shown.
83
data/phase16_2_performance_analysis.md
Normal file
83
data/phase16_2_performance_analysis.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# Phase 16.2:性能优化分析
|
||||
|
||||
**测试时间**:2026-06-17 22:30
|
||||
**目标**:将传输速度从780 KB/s提升到21-36 MB/s
|
||||
|
||||
## 性能瓶颈分析 ⭐⭐⭐⭐⭐
|
||||
|
||||
**当前配置**:
|
||||
- Window size: 2MB (local_window = 2097152)
|
||||
- poll timeout: 10ms (每iteration)
|
||||
- max_poll_iterations: 5000 (50s总timeout)
|
||||
- stdin timeout: 3000 iterations (30s)
|
||||
|
||||
**瓶颈1:poll iteration overhead ⭐⭐⭐⭐⭐**
|
||||
- 每iteration: 10ms poll timeout
|
||||
- 总iteration: 5000次
|
||||
- 每iteration开销: log输出 + try_wait() check
|
||||
- **估算开销**: 5000 iterations * 10ms = 50秒(理论最大)
|
||||
- **实际开销**: 20MB传输用了24秒,说明poll overhead占用了大量时间
|
||||
|
||||
**瓶颈2:Window size太小 ⭐⭐⭐⭐**
|
||||
- OpenSSH默认: 2MB
|
||||
- 实际测试: 20MB传输用了24秒
|
||||
- **问题**: Window size限制了单次传输的数据量
|
||||
- **解决方案**: 增加到16MB或32MB
|
||||
|
||||
**瓶颈3:AES-CTR encryption overhead ⭐⭐⭐**
|
||||
- AES-256-CTR加密/解密: 每packet需要计算
|
||||
- MAC计算: HMAC-SHA256 (每packet)
|
||||
- **估算**: 每packet约100-200us开销
|
||||
- **影响**: 780 KB/s可能受encryption限制
|
||||
|
||||
**瓶颈4:sshbuf zero-copy性能 ⭐⭐**
|
||||
- sshbuf实现: 339行
|
||||
- **问题**: 未进行性能测试
|
||||
- **可能**: zero-copy优化不足
|
||||
|
||||
## 性能优化方案 ⭐⭐⭐⭐⭐
|
||||
|
||||
**方案1:减少poll iteration overhead(优先 ⭐⭐⭐⭐⭐)**
|
||||
- 增加poll timeout: 从10ms改到100ms
|
||||
- 减少iteration次数: 从5000改到500
|
||||
- 减少log频率: 从每10次改到每50次
|
||||
- **预期效果**: 减少50-80% poll overhead
|
||||
|
||||
**方案2:增加Window size ⭐⭐⭐⭐**
|
||||
- 从2MB增加到16MB或32MB
|
||||
- 动态调整Window size(根据传输速度)
|
||||
- **预期效果**: 提升单次传输数据量
|
||||
|
||||
**方案3:优化encryption ⭐⭐⭐**
|
||||
- 使用AES-NI硬件加速(检查是否已启用)
|
||||
- 减少MAC计算频率(批量计算)
|
||||
- **预期效果**: 减少encryption overhead
|
||||
|
||||
**方案4:sshbuf性能测试 ⭐⭐**
|
||||
- 编写benchmark测试sshbuf性能
|
||||
- 对比临时buffer vs zero-copy
|
||||
- **预期效果**: 验证zero-copy优势
|
||||
|
||||
## 实施计划 ⭐⭐⭐⭐⭐
|
||||
|
||||
**Phase 16.2.1:减少poll overhead(立即实施)**
|
||||
- 修改poll timeout: 10ms → 100ms
|
||||
- 修改iteration次数: 5000 → 500
|
||||
- 修改log频率: 每10次 → 每50次
|
||||
- **预期传输速度**: 从780 KB/s提升到10-20 MB/s
|
||||
|
||||
**Phase 16.2.2:增加Window size**
|
||||
- 从2MB增加到16MB
|
||||
- 测试传输速度变化
|
||||
|
||||
**Phase 16.2.3:encryption优化**
|
||||
- 检查AES-NI是否启用
|
||||
- 如果未启用,添加AES-NI支持
|
||||
|
||||
---
|
||||
|
||||
**立即实施Phase 16.2.1**(减少poll overhead)
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-06-17 22:30
|
||||
441
data/sftp_client_test_recommendations.md
Normal file
441
data/sftp_client_test_recommendations.md
Normal file
@@ -0,0 +1,441 @@
|
||||
# SFTP Client 测试建议与分析
|
||||
|
||||
**测试目标**:验证 MarkBaseSSH SFTP 实现(Phase 7)的兼容性和稳定性
|
||||
**测试环境**:MarkBaseSSH server (port 2024) + macOS client
|
||||
**测试用户**:demo (password: demo123)
|
||||
|
||||
---
|
||||
|
||||
## 推荐测试方案 ⭐⭐⭐⭐⭐
|
||||
|
||||
### 方案 1: OpenSSH sftp client(必须测试)
|
||||
|
||||
**推荐等级**:⭐⭐⭐⭐⭐ **最高优先级**
|
||||
|
||||
**理由**:
|
||||
- ✅ OpenSSH 是标准实现,MarkBaseSSH 必须完全兼容
|
||||
- ✅ macOS 内置,无需额外安装
|
||||
- ✅ 命令行工具,适合自动化测试
|
||||
- ✅ 完整的 SFTP 协议支持(SSH_FXP_* 所有 packet)
|
||||
- ✅ 错误信息清晰,易于调试
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
# 基本连接测试
|
||||
sftp -P 2024 demo@127.0.0.1
|
||||
|
||||
# 批量测试脚本
|
||||
sftp -P 2024 -b /tmp/sftp_test_batch.txt demo@127.0.0.1
|
||||
|
||||
# 大文件传输测试
|
||||
sftp -P 2024 demo@127.0.0.1 <<EOF
|
||||
put /tmp/test_100mb.bin /data/test_100mb.bin
|
||||
get /data/test_100mb.bin /tmp/test_download.bin
|
||||
ls -la /data/
|
||||
bye
|
||||
EOF
|
||||
|
||||
# MD5 校验
|
||||
md5 /tmp/test_100mb.bin /tmp/test_download.bin
|
||||
```
|
||||
|
||||
**测试覆盖**:
|
||||
- ✅ SSH_FXP_INIT/VERSION(握手)
|
||||
- ✅ SSH_FXP_REALPATH(路径解析)
|
||||
- ✅ SSH_FXP_OPENDIR/READDIR(目录浏览)
|
||||
- ✅ SSH_FXP_OPEN/READ/WRITE(文件传输)
|
||||
- ✅ SSH_FXP_CLOSE(句柄管理)
|
||||
- ✅ SSH_FXP_STAT/LSTAT(文件属性)
|
||||
- ✅ SSH_FXP_MKDIR/RMDIR(目录操作)
|
||||
- ✅ SSH_FXP_REMOVE/RENAME(文件操作)
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 所有操作成功
|
||||
- ✅ 文件完整性校验一致
|
||||
- ✅ 错误处理正确(权限、路径不存在等)
|
||||
|
||||
---
|
||||
|
||||
### 方案 2: Cyberduck(macOS 推荐 GUI client)
|
||||
|
||||
**推荐等级**:⭐⭐⭐⭐⭐ **强烈推荐**
|
||||
|
||||
**理由**:
|
||||
- ✅ macOS 原生应用,用户友好
|
||||
- ✅ 广泛使用,稳定可靠
|
||||
- ✅ 支持 SFTP、FTP、WebDAV 等多种协议
|
||||
- ✅ 支持大文件传输(断点续传)
|
||||
- ✅ 支持同步功能(同步本地和远程目录)
|
||||
- ✅ 书签管理(保存连接配置)
|
||||
|
||||
**安装方式**:
|
||||
```bash
|
||||
# Homebrew 安装
|
||||
brew install --cask cyberduck
|
||||
|
||||
# 或从 App Store 下载
|
||||
# https://apps.apple.com/app/cyberduck/id409222152
|
||||
```
|
||||
|
||||
**测试配置**:
|
||||
```
|
||||
协议: SFTP
|
||||
服务器: 127.0.0.1
|
||||
端口: 2024
|
||||
用户名: demo
|
||||
密码: demo123
|
||||
路径: /Users/accusys/markbase/data
|
||||
```
|
||||
|
||||
**测试覆盖**:
|
||||
- ✅ GUI 连接测试(用户交互)
|
||||
- ✅ 文件上传(拖拽上传)
|
||||
- ✅ 文件下载(拖拽下载)
|
||||
- ✅ 目录浏览(双击进入)
|
||||
- ✅ 文件删除(右键菜单)
|
||||
- ✅ 文件重命名(右键菜单)
|
||||
- ✅ 新建目录(右键菜单)
|
||||
- ✅ 大文件传输(100MB+)
|
||||
- ✅ 断点续传测试(中断后重新连接)
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 连接成功,显示文件列表
|
||||
- ✅ 上传/下载正常,进度显示
|
||||
- ✅ 文件操作正常,错误提示清晰
|
||||
|
||||
---
|
||||
|
||||
### 方案 3: FileZilla(跨平台 GUI client)
|
||||
|
||||
**推荐等级**:⭐⭐⭐⭐ **推荐**
|
||||
|
||||
**理由**:
|
||||
- ✅ 跨平台(Windows, macOS, Linux)
|
||||
- ✅ 广泛使用,社区活跃
|
||||
- ✅ 支持多种协议(SFTP, FTP, FTPS)
|
||||
- ✅ 详细日志显示(packet 级别)
|
||||
- ✅ 支持并发传输(多文件同时上传/下载)
|
||||
- ✅ 站点管理器(保存连接配置)
|
||||
|
||||
**安装方式**:
|
||||
```bash
|
||||
# Homebrew 安装
|
||||
brew install --cask filezilla
|
||||
|
||||
# 或从官网下载
|
||||
# https://filezilla-project.org/download.php
|
||||
```
|
||||
|
||||
**测试配置**:
|
||||
```
|
||||
协议: SFTP - SSH File Transfer Protocol
|
||||
主机: 127.0.0.1
|
||||
端口: 2024
|
||||
用户: demo
|
||||
密码: demo123
|
||||
```
|
||||
|
||||
**测试覆盖**:
|
||||
- ✅ GUI 连接测试
|
||||
- ✅ 文件传输(上传/下载)
|
||||
- ✅ 目录浏览
|
||||
- ✅ 文件操作(删除、重命名、新建目录)
|
||||
- ✅ 并发传输测试(多文件同时传输)
|
||||
- ✅ 日志分析(查看 SFTP packet)
|
||||
- ✅ 大文件传输(100MB+)
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 连接成功
|
||||
- ✅ 日志显示 SSH_FXP_* packet(验证协议实现)
|
||||
- ✅ 文件传输正常
|
||||
- ✅ 并发传输正常(Window Control 验证)
|
||||
|
||||
---
|
||||
|
||||
### 方案 4: lftp(高级命令行 client)
|
||||
|
||||
**推荐等级**:⭐⭐⭐⭐ **推荐(高级测试)**
|
||||
|
||||
**理由**:
|
||||
- ✅ 功能丰富(镜像、同步、断点续传)
|
||||
- ✅ 支持多种协议(SFTP, FTP, HTTP, HTTPS)
|
||||
- ✅ 支持并行传输(多连接并发)
|
||||
- ✅ 支持脚本化(批量操作)
|
||||
- ✅ 详细日志(调试信息)
|
||||
|
||||
**安装方式**:
|
||||
```bash
|
||||
# Homebrew 安装
|
||||
brew install lftp
|
||||
```
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
# 基本连接测试
|
||||
lftp sftp://demo:demo123@127.0.0.1:2024
|
||||
|
||||
# 镜像测试(同步目录)
|
||||
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
|
||||
mirror -R /tmp/test_folder /data/test_folder
|
||||
mirror /data/test_folder /tmp/download_folder
|
||||
bye
|
||||
EOF
|
||||
|
||||
# 并行传输测试
|
||||
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
|
||||
set sftp:parallel 4
|
||||
mput /tmp/test_*.bin
|
||||
bye
|
||||
EOF
|
||||
|
||||
# 断点续传测试
|
||||
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
|
||||
pget -n 4 -c /data/test_100mb.bin
|
||||
bye
|
||||
EOF
|
||||
```
|
||||
|
||||
**测试覆盖**:
|
||||
- ✅ 基本操作(ls, get, put, rm)
|
||||
- ✅ 镜像功能(mirror,同步目录)
|
||||
- ✅ 并行传输(mput, mget)
|
||||
- ✅ 断点续传(pget -c)
|
||||
- ✅ 高级功能验证
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 连接成功
|
||||
- ✅ 镜像同步正常
|
||||
- ✅ 并行传输正常(Window Control 验证)
|
||||
- ✅ 断点续传正常
|
||||
|
||||
---
|
||||
|
||||
## 测试优先级排序 ⭐⭐⭐⭐⭐
|
||||
|
||||
| 优先级 | Client | 类型 | 安装状态 | 测试必要性 |
|
||||
|--------|--------|------|---------|-----------|
|
||||
| **1** | OpenSSH sftp | 命令行 | ✅ 已安装 | ⭐⭐⭐⭐⭐ **必须测试** |
|
||||
| **2** | Cyberduck | GUI | ❌ 未安装 | ⭐⭐⭐⭐⭐ **强烈推荐** |
|
||||
| **3** | FileZilla | GUI | ❌ 未安装 | ⭐⭐⭐⭐ **推荐** |
|
||||
| **4** | lftp | 命令行 | ❌ 未安装 | ⭐⭐⭐⭐ **推荐(高级测试)** |
|
||||
|
||||
---
|
||||
|
||||
## 建议测试流程 ⭐⭐⭐⭐⭐
|
||||
|
||||
### Phase 1: OpenSSH sftp(必须)
|
||||
|
||||
**时间**:30 分钟
|
||||
|
||||
**步骤**:
|
||||
1. 基本连接测试(pwd, ls, cd)
|
||||
2. 文件上传测试(put)
|
||||
3. 文件下载测试(get)
|
||||
4. 文件操作测试(rm, rename, mkdir)
|
||||
5. 大文件传输测试(100MB)
|
||||
6. MD5 校验验证
|
||||
|
||||
**验证重点**:
|
||||
- ✅ SSH_FXP_* packet 完整实现
|
||||
- ✅ Window Control 正常工作
|
||||
- ✅ 文件完整性校验
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Cyberduck(强烈推荐)
|
||||
|
||||
**时间**:20 分钟
|
||||
|
||||
**步骤**:
|
||||
1. GUI 连接测试
|
||||
2. 文件拖拽上传
|
||||
3. 文件拖拽下载
|
||||
4. 目录浏览测试
|
||||
5. 文件操作测试(右键菜单)
|
||||
6. 大文件传输测试(100MB)
|
||||
7. 断点续传测试
|
||||
|
||||
**验证重点**:
|
||||
- ✅ 用户交互友好性
|
||||
- ✅ 大文件传输稳定性
|
||||
- ✅ 错误提示清晰性
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: FileZilla(推荐)
|
||||
|
||||
**时间**:30 分钟
|
||||
|
||||
**步骤**:
|
||||
1. GUI 连接测试
|
||||
2. 文件传输测试
|
||||
3. 并发传输测试(多文件同时)
|
||||
4. 日志分析(SSH_FXP_* packet)
|
||||
5. 大文件传输测试
|
||||
|
||||
**验证重点**:
|
||||
- ✅ 并发传输(Window Control)
|
||||
- ✅ 协议实现验证(packet 日志)
|
||||
- ✅ 错误处理
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: lftp(高级测试)
|
||||
|
||||
**时间**:40 分钟
|
||||
|
||||
**步骤**:
|
||||
1. 基本连接测试
|
||||
2. 镜像同步测试(mirror)
|
||||
3. 并行传输测试(mput)
|
||||
4. 断点续传测试(pget)
|
||||
5. 性能对比
|
||||
|
||||
**验证重点**:
|
||||
- ✅ 高级功能兼容性
|
||||
- ✅ 性能优化验证
|
||||
- ✅ 稳定性测试
|
||||
|
||||
---
|
||||
|
||||
## 测试脚本建议 ⭐⭐⭐⭐⭐
|
||||
|
||||
### OpenSSH sftp 批量测试脚本
|
||||
|
||||
**文件**:`/tmp/sftp_test_batch.txt`
|
||||
|
||||
```bash
|
||||
# 基本操作测试
|
||||
pwd
|
||||
ls -la
|
||||
cd data
|
||||
ls -la
|
||||
|
||||
# 文件上传测试
|
||||
put /tmp/test_5mb.bin test_5mb.bin
|
||||
put /tmp/test_10mb.bin test_10mb.bin
|
||||
put /tmp/test_100mb.bin test_100mb.bin
|
||||
|
||||
# 文件下载测试
|
||||
get test_100mb.bin /tmp/test_download.bin
|
||||
|
||||
# 文件操作测试
|
||||
mkdir test_dir
|
||||
rename test_5mb.bin test_5mb_renamed.bin
|
||||
rm test_10mb.bin
|
||||
rmdir test_dir
|
||||
|
||||
# 属性查询测试
|
||||
stat test_100mb.bin
|
||||
ls -la
|
||||
|
||||
# 退出
|
||||
bye
|
||||
```
|
||||
|
||||
**执行命令**:
|
||||
```bash
|
||||
# 创建测试文件
|
||||
dd if=/dev/urandom of=/tmp/test_5mb.bin bs=1M count=5
|
||||
dd if=/dev/urandom of=/tmp/test_10mb.bin bs=1M count=10
|
||||
dd if=/dev/urandom of=/tmp/test_100mb.bin bs=1M count=100
|
||||
|
||||
# 执行批量测试
|
||||
sftp -P 2024 -b /tmp/sftp_test_batch.txt demo@127.0.0.1
|
||||
|
||||
# MD5 校验
|
||||
md5 /tmp/test_100mb.bin /tmp/test_download.bin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 错误处理测试 ⭐⭐⭐⭐⭐
|
||||
|
||||
**测试场景**:
|
||||
1. ✅ 路径不存在(SSH_FXP_NO_SUCH_FILE)
|
||||
2. ✅ 权限不足(SSH_FXP_PERMISSION_DENIED)
|
||||
3. ✅ 文件已存在(SSH_FXP_FILE_ALREADY_EXISTS)
|
||||
4. ✅ 磁盘空间不足(SSH_FXP_FAILURE)
|
||||
5. ✅ 连接中断(断点续传)
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
# 路径不存在测试
|
||||
sftp -P 2024 demo@127.0.0.1 <<EOF
|
||||
get /data/nonexistent_file.bin /tmp/test.bin
|
||||
EOF
|
||||
# 预期: "No such file"
|
||||
|
||||
# 权限不足测试
|
||||
sftp -P 2024 demo@127.0.0.1 <<EOF
|
||||
put /tmp/test.bin /root/test.bin
|
||||
EOF
|
||||
# 预期: "Permission denied"
|
||||
|
||||
# 文件已存在测试
|
||||
sftp -P 2024 demo@127.0.0.1 <<EOF
|
||||
put /tmp/test_100mb.bin /data/test_100mb.bin
|
||||
EOF
|
||||
# 预期: 文件已存在,询问是否覆盖
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 性能测试建议 ⭐⭐⭐⭐⭐
|
||||
|
||||
**测试指标**:
|
||||
- 传输速率(MB/s)
|
||||
- 并发传输能力(多文件同时)
|
||||
- 大文件传输稳定性(100MB+)
|
||||
- Window Control 效率(window adjust frequency)
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
# OpenSSH sftp 性能测试
|
||||
time sftp -P 2024 demo@127.0.0.1 <<EOF
|
||||
put /tmp/test_100mb.bin /data/test_100mb.bin
|
||||
bye
|
||||
EOF
|
||||
|
||||
# FileZilla 并发传输测试
|
||||
# 同时上传 10 个 10MB 文件,测试 Window Control
|
||||
|
||||
# lftp 并行传输测试
|
||||
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
|
||||
set sftp:parallel 4
|
||||
mput /tmp/test_1*.bin
|
||||
bye
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结与建议 ⭐⭐⭐⭐⭐
|
||||
|
||||
**必须测试**:
|
||||
- ⭐⭐⭐⭐⭐ **OpenSSH sftp**(标准实现,兼容性验证)
|
||||
|
||||
**强烈推荐**:
|
||||
- ⭐⭐⭐⭐⭐ **Cyberduck**(macOS 原生,用户友好)
|
||||
- ⭐⭐⭐⭐ **FileZilla**(跨平台,日志详细)
|
||||
|
||||
**可选测试**:
|
||||
- ⭐⭐⭐⭐ **lftp**(高级功能,性能优化)
|
||||
|
||||
**测试时间估算**:
|
||||
- Phase 1(OpenSSH sftp):30 分钟
|
||||
- Phase 2(Cyberduck):20 分钟
|
||||
- Phase 3(FileZilla):30 分钟
|
||||
- Phase 4(lftp):40 分钟
|
||||
- **总计**:约 2 小时
|
||||
|
||||
**预期结果**:
|
||||
- ✅ 所有 client 连接成功
|
||||
- ✅ 所有操作正常(上传、下载、浏览、删除等)
|
||||
- ✅ 文件完整性校验一致
|
||||
- ✅ 错误处理正确
|
||||
- ✅ Window Control 正常工作
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-06-17
|
||||
Reference in New Issue
Block a user