数据传输优化篇之:scp 或 rsync+ssh 参数优化
经过一个快速的简单测试,可以明显看到:建立ssh数据通道进行传输时,缺省使用的加密方式(3des-cbc为缺省优先选择加密算法)和指定arcfour(在openssl中为rc4)的传输速率相差很大,是否使用压缩参数也差异显著,大概有5倍左右的传输速率差异。因此有必要对scp或者rsync+ssh数据传输的参数进行调整。我的最终调整结果如下:
rsync -apur --partial -e "ssh -p 22 -c arcfour" SRC DEST
其中数字22为ssh服务监听端口号,可以根据实际情况变更。大多数情况下服务器内都是缺省22端口的,同时在比较新的GNU/Linux Distros如RHEL5U4、CentOS 5.2里边rsync缺省已经设置—rsh=ssh,因此可以省略-e选项中的[-p 22]部分。但是为了完整起见,请尽量不要省略此参数。
我之前给过的命令行参数是:
rsync -azpur --progress -e "ssh -p 22" SRC DEST
请取消如下参数:
-z压缩选项,避免浪费CPU解压缩计算资源。对于已经压缩过或者可压缩性很低的文件就不要使用此选项了。对于纯文本或者有高压缩率的文件可以考虑使用。但建立ssh加密通道时最好是别用了。鉴于目前大多数情况下的数据传输的实际使用场景,建议不要使用-z压缩选项。
-v和--progress选项是适合于交互使用或者需要日志统计的情况,可以随时观察进度;对于后台执行的可以忽略不要。
ssh的cipher可用算法列表,同时也是缺省使用次序:3des-cbc, aes128-cbc, aes192-cbc, aes256-cbc, aes128-ctr, aes192-ctr, aes256-ctr, arcfour128, arcfour256, arcfour, blowfish-cbc, andcast128-cbc
寻找最快的加密算法的方法,用于选择ssh的fastest cipher参数:openssl speed或者openssl speed aes rc4 blowfish
执行openssl speed后一般结果类似如下,可见在ssh可用cipher范围内rc4即arcfour是最快的:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
md2 1384.62k 2981.03k 4037.40k 4448.60k 4575.00k
mdc2 0.00 0.00 0.00 0.00 0.00
md4 19895.28k 70035.88k 203554.99k 391295.91k 534844.76k
md5 16912.29k 56978.09k 150375.42k 255405.33k 327666.35k
hmac(md5) 26742.97k 78918.78k 186822.66k 280025.22k 328025.64k
sha1 16956.33k 52774.93k 131750.61k 205110.95k 242145.72k
rmd160 13317.83k 38738.54k 82252.89k 114359.03k 132024.56k
rc4 137556.45k 145273.47k 150050.62k 145494.07k 145716.57k
des cbc 31621.27k 32913.00k 33047.81k 33397.71k 33357.82k
des ede3 12143.84k 12626.01k 12332.40k 12461.16k 12394.50k
idea cbc 0.00 0.00 0.00 0.00 0.00
rc2 cbc 19102.94k 19044.85k 19397.97k 19251.20k 19304.27k
rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00
blowfish cbc 63417.48k 65578.21k 67336.11k 67362.53k 67982.71k
cast cbc 50512.07k 53306.26k 53302.70k 53730.30k 53770.55k
aes-128 cbc 88831.05k 96848.85k 99854.93k 98875.39k 97495.69k
aes-192 cbc 80169.20k 83880.75k 84916.82k 86935.21k 86690.96k
aes-256 cbc 71787.50k 74987.33k 75160.83k 74983.00k 75999.91k
sha256 10791.78k 27241.64k 50905.39k 66458.28k 73566.89k
sha512 7165.80k 28350.70k 57986.65k 93516.37k 113161.19k
sign verify sign/s verify/s
rsa 512 bits 0.000314s 0.000023s 3185.2 43532.5
rsa 1024 bits 0.001162s 0.000062s 860.5 16111.0
rsa 2048 bits 0.006553s 0.000185s 152.6 5406.7
rsa 4096 bits 0.040898s 0.000606s 24.5 1649.5
sign verify sign/s verify/s
dsa 512 bits 0.000200s 0.000228s 5007.7 4387.9
dsa 1024 bits 0.000550s 0.000666s 1817.1 1501.3
dsa 2048 bits 0.001709s 0.002058s 585.2 486.0
执行openssl speed aes rc4 blowfish后一般结果类似如下:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
rc4 133412.22k 143452.66k 144250.16k 147214.38k 145713.39k
blowfish cbc 63015.38k 65686.18k 65891.08k 68284.76k 67544.54k
aes-128 cbc 91761.54k 97438.66k 94242.07k 95801.94k 94533.98k
aes-192 cbc 79059.61k 83866.89k 84766.83k 82777.51k 86793.26k
aes-256 cbc 71811.05k 76131.73k 75018.97k 75897.11k 77007.53k
还有其他参数是可以再进行调优的,比如--block-size。有兴趣的同学可以参考我提供的思路和命令行进行扩展,继续测试并优化。如果将来有机会,还可以使用ssl硬件卡和给openssh加上HPN补丁,留待以后再细述了。
测试传输时生成的文件方法:
1、生成高可压缩文件:
dd if=/dev/zero of=bigfile.dat bs=1M count=100
2、生成不可压缩文件:
dd if=/dev/urandom of=bigfile.dat bs=1M count=100
或
dd if=/dev/zero of=/tmp/bigfile.dat bs=1M count=100; shred -v -n3 /tmp/bigfile.dat
我测试过程当中使用的若干完整命令行,仅供参考:
生成不可压缩测试文件:
time (dd if=/dev/zero of=bigfile.dat bs=1M count=100; shred -v -n3 /tmp/bigfile.dat)
不同算法不压缩传输速率测试:
set -x; for cipher in none 3des-cbc aes128-cbc aes256-cbc arcfour blowfish; do rm -f /tmp/bigfile.dat; rsync -apur --stats --progress -e "ssh -c ${cipher}" bigfile.dat localhost:/tmp/; sleep 3; done; set +x
不同算法压缩传输速率测试:
set -x; for cipher in none 3des-cbc aes128-cbc aes256-cbc arcfour blowfish; do rm -f /tmp/bigfile.dat; rsync -zapur --stats --progress -e "ssh -c ${cipher}" bigfile.dat localhost:/tmp/; sleep 3; done; set +x
不同算法不同传输块大小不压缩传输速率测试:
for i in 1 2 3; do for SIZE_BLOCK in 8 16 32 64 126 256 1024 2048 4196 8192; do rm -f /tmp/bigfile.dat; echo "---------->${SIZE_BLOCK}<----------"; time rsync -apur --block-size=${SIZE_BLOCK} --stats --progress -e "ssh -c arcfour" bigfile.dat localhost:/tmp/; sleep 3; done; done
不同算法不同传输块大小压缩传输速率测试:
for i in 1 2 3; do for SIZE_BLOCK in 8 16 32 64 126 256 1024 2048 4196 8192; do rm -f /tmp/bigfile.dat; echo "---------->${SIZE_BLOCK}<----------"; time rsync -zapur --block-size=${SIZE_BLOCK} --stats --progress -e "ssh -c arcfour" bigfile.dat localhost:/tmp/; sleep 3; done; done
转载于:https://blog.51cto.com/floss/138088
数据传输优化篇之:scp 或 rsync+ssh 参数优化相关推荐
- MySQL-索引优化篇(2)_使用索引扫描来优化排序
文章目录 生猛干货 官方文档 使用索引扫描来优化排序 索引的列顺序和Order By子句的顺序完全一致 索引中所有列的方向(升序.降序)和 order by子句完全相同 order by中的字段全部在 ...
- mysql 优化300例_MySQL配置文件my.cnf参数优化和中文详解
Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...
- Mysql优化系列(1)--Innodb重要参数优化
1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特 ...
- Mysql优化系列(1)--Innodb重要参数优化(转)
原创作者:https://www.cnblogs.com/kevingrace/p/6133818.html 1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACI ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启 ...
- android 优化启动事件,张绍文android开发高手课读书笔记4-启动优化篇
启动优化篇 在说如何对启动时间进行优化之前,我们得先知道从用户点击应用图标开始,一共经历了那些阶段. 主要阶段如下图. image T0-T1阶段 这个阶段是手机系统解析点击事件,效应快慢跟手机性能有 ...
- android开发 解析 b5,张绍文android开发高手课读书笔记4-启动优化篇
启动优化篇 在说如何对启动时间进行优化之前,我们得先知道从用户点击应用图标开始,一共经历了那些阶段. 主要阶段如下图. image T0-T1阶段 这个阶段是手机系统解析点击事件,效应快慢跟手机性能有 ...
- 2011 DB2著作---舞动DB2系列之设计优化篇隆重问世!
舞动DB2系列丛书简介: 舞动DB2系列丛书是王飞鹏等人编写的数据库系列著作,包括: 设计优化篇---<DB2设计与性能优化---原理.方法与实践> 应用开发篇---<从Oracle ...
- java虚拟机参数优化_JAVA虚拟机JVM参数优化(2):垃圾收集算法选择
JAVA虚拟机JVM优化重要性,昨天JAVA虚拟机JVM参数优化(1)文章中已经描述,今天我们来讨论JAVA虚拟机在不同性能要求下如何选择三种垃圾收集算法. JVM内部结构如下图所示: 串行收集用于单 ...
最新文章
- qt获取当前系统音量值_Qt编写自定义控件50-迷你仪表盘
- 2020大部分知名公司Java面试题(一)
- 管理距离 路由与交换_动态路由选择原理(距离矢量路由协议RIP)
- 利用 squid 反向代理提高网站性能
- XCTF WEB backup
- 华容道游戏开发--android小组
- python二维列表做参数_python sum函数iterable参数为二维list,start参数为“[]”该如何理解...
- MongoDB基本应用操作整理
- Mariadb升级到mysql_mariadb的版本升级方法
- LeetCode(121)——买卖股票的最佳时机(JavaScript)
- 基于matlab的16QAM调制解调仿真
- 原子结构示意图全部_原子结构示意图大全
- C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
- 含泪整理最优质美食壁纸素材,你想要的这里都有
- 数据结构与算法学习(第九天)(系列结束)
- JAVA spring定时任务
- 单片机如何烧录程序?单片机的下载方式讲解
- 宇视NVR录像机,录像下载过程中,查询录像搜索列别里面为空
- springboot配置文件不生效的原因
- Lua 打印table、ngx.say table
热门文章
- php实现无限级树型菜单(函数递归算法)
- 一个真实的案例———HPUX调整LUN大小识别更改
- Eclipse最新插件的下载地址大全[收集整理] zt
- C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
- 谷歌pay服务端文档_Google pay 服务器验证
- Jetty 与 Tomcat
- 收获,不止SQL优化——抓住SQL的本质--第三章
- PHP重建索引数组的键值
- 基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群
- 看面试题感觉生疏的知识点