场景是一张有10张脸的图片(下图),在包含1万张人脸的库(准备了100张人脸的特征文件,循环100次当做1万个样本)里面进行比对。想得出在不同cpu的情况下,多少线程数是最快的?要多少时间(包括:总体、图片转换、人脸检测、获取特征值、人脸比对的耗时)?主要瓶颈在哪里?
因为公司项目涉及到了从不同服务器拷贝大量小图片的工作,所以做了个测试来测拷贝小文件的性能。
我的程序分别测试1-10个线程的耗时,不同线程数量分别执行3遍取平均值,结论保存在ret.txt文件。
测试了76000个小文件,每个大小200K-300K左右,一共87250M
两台都是linux centos7.5 内存140G ,cpu 为intel E5-2620,千兆网卡。
程序下载:
1.不带sdk的,2.4M
2.包含sdk的,23.4M
磁盘大小为500G,型号是Seagate Constellation ES的ST500nm0011
欢迎大家下载测试,并将结果接龙。
为排除系统缓存的影响,每次测试前,都执行
我的笔记本(Intel Core i3-6100U的cpu,4G内存)的结果:
TaskNumber:1,Total:23192,ImageConvert:0,Detect:37,Extract:1958,Match:21197
TaskNumber:2,Total:15987,ImageConvert:0,Detect:32,Extract:1310,Match:14645
TaskNumber:3,Total:11815,ImageConvert:0,Detect:34,Extract:1122,Match:10659
TaskNumber:4,Total:11558,ImageConvert:0,Detect:40,Extract:1075,Match:10443
TaskNumber:5,Total:11215,ImageConvert:0,Detect:35,Extract:985,Match:10195
TaskNumber:6,Total:11238,ImageConvert:0,Detect:43,Extract:1105,Match:10090
TaskNumber:7,Total:11083,ImageConvert:0,Detect:35,Extract:1075,Match:9973
TaskNumber:8,Total:10875,ImageConvert:0,Detect:44,Extract:1084,Match:9747
TaskNumber:9,Total:10947,ImageConvert:0,Detect:48,Extract:1126,Match:9773
TaskNumber:10,Total:11761,ImageConvert:0,Detect:31,Extract:1042,Match:10688
sync
腾讯云服务器(Intel Xeon E5-26xx 2.29GHz,8G内存)的结果:
TaskNumber:1,Total:25779,ImageConvert:0,Detect:35,Extract:1794,Match:23950
TaskNumber:2,Total:13207,ImageConvert:0,Detect:34,Extract:943,Match:12230
TaskNumber:3,Total:11748,ImageConvert:0,Detect:34,Extract:794,Match:10920
TaskNumber:4,Total:8760,ImageConvert:0,Detect:31,Extract:633,Match:8096
TaskNumber:5,Total:10352,ImageConvert:0,Detect:35,Extract:693,Match:9624
TaskNumber:6,Total:9789,ImageConvert:0,Detect:33,Extract:615,Match:9141
TaskNumber:7,Total:9128,ImageConvert:0,Detect:32,Extract:600,Match:8496
TaskNumber:8,Total:8121,ImageConvert:0,Detect:32,Extract:606,Match:7483
TaskNumber:9,Total:8877,ImageConvert:0,Detect:35,Extract:656,Match:8186
TaskNumber:10,Total:7928,ImageConvert:0,Detect:35,Extract:632,Match:7261
echo 3 > /proc/sys/vm/drop_caches
这两条命令清除缓存
不同的传递方式性能如下:
| 方式 | 耗时 | 平均速率
|命令
|
————- | :—————-: | |
---|---|---|
| scp | 00:59:38 |24.2M/S |scp -r srcDir
destIp:destDir |
| rsync | 00:14:59 |96.9M/S |rsync -aW -e ssh srcDir
destIp:destDir |
| tar | 00:14:58 |96.9M/S | ssh destIp `tar -xf
- -C destDir` |
有同事指出,先打包(由于是图片,再次压缩没有多大的意义,不压缩只打包,大小增大为91075M),再scp是不是会快一些。我也测试了一下这种方案的性能,数据如下:
| 过程 | 耗时 | 平均速率 |命令
|
————- | :——————: | |
---|---|---|
| 打包 | 00:50:56 | |tar -cf
srcDir.tgz srcDir |
| 传输(scp) | 00:15:32 |97.1M/s |scp srcDir.tgz
destIp:destDir |
博必发线上开户,| 解包 | 00:28:04 | |tar -xf
destIp:destDir/destDir.tgz -C destIp:destDir |
网上有很多资料都说ftp的方式很慢,多线程下载小文件的方式我没有(如果以后有时间,我会测的),但下载打包后的整个大文件我测了一下,性能如下:
| 传输(ftp) | 00:13:54 |108.4M/s |ftp get dstDir.tgz
|
结论:
1.linux系统跨网络拷贝小文件,打包后再传递的方式很不可取,因为要来回写磁盘,打包落盘的时间比传输长。
2.rsync和tar的方式都比较快,差距不大。scp的方式慢。
参考链接