云函数benchmark
2023-02-18 16:37:58 时间
调试一个计算密集型的小玩意儿,本机计算挺久的,感觉还是需要更多cpu,正在想要不要用批量计算,读文档的时候发现启动也并不是很方便,数据准备到COS/CFS上,然后启动运行,再去COS/CFS上捞结果,这样用云函数来做岂不是更轻松?而且云函数就可以并发几十几百个实例,如果用来做计算性能怎么样呢?干脆做了个一个benchmark。这里用crypto的大质数生成算法来测试计算能力。
'use strict';
const {Worker}=require('worker_threads')
const threads = 1;
let counter=0;
let arr=[]
let workerScript = `import {parentPort} from 'worker_threads';
import crypto from 'crypto';
let counter=0;
parentPort.onmessage = async (event) => {
const cmd = event.data;
if(cmd=="start"){
while(true){
await new Promise((res,rej)=>{
crypto.createDiffieHellman(512).getPrime();
counter++
setImmediate(res);
})
}
}else if(cmd=="stop"){
parentPort.postMessage(counter)
}
}`
let url = new URL("data:text/javascript;charset=UTF-8,"+encodeURIComponent(workerScript));
for(let i=0;i<threads;i++){
let worker = new Worker(url)
worker.on('message', value => {
counter+=value
worker.res();
worker.terminate()
});
arr.push(worker)
}
exports.main_handler = (event, context,callback) => {
Promise.all(arr.map(worker=>{
let p = new Promise((res,rej)=>{
worker.res = res;
})
worker.postMessage("start");
return p;
})).then(()=>{
console.log("threads: "+threads+" score: "+(counter/10)+" avg: "+(counter/threads/10))
callback(null,"threads: "+threads+" score: "+(counter/10)+" avg: "+(counter/threads/10))
})
setTimeout(()=>{
arr.forEach(worker=>worker.postMessage("stop"))
},20000)
return event
};
require('os').cpus().length在一些环境下会拿到0,因此这里干脆hardcode了线程数,每次按照具体的环境改一下代码也不麻烦。在多核场景下运行的时候可以修改threads常量来增加并发线程数。在一台8核16G上测试到的数值作为100分。
threads: 8 score: 104 avg: 13
在4核的macbook上测试的时候成绩也差不多。
threads: 6 score: 106.5 avg: 17.75
在手机(Mate40pro)上测的就比较惊喜了
能顶大半台服务器或者笔记本了,看来以后可以把一些计算交给手机。
回到云函数。在腾讯云64M的SCF实例上测得10分左右,这就超出期望了,十个这样的微小实例岂不是就可以打得过一台8核服务器?不过增加内存的时候分配到的cpu并没有成比例增加。因此任务拆给更多的小实例计算可能可以蹭到更多的计算资源。
同时也测试了一下阿里云FC的最低配0.05核128M
结果也类似,用最小实例能蹭到最多的计算资源。
相关文章
- 从零开始的内存马分析——如何骑马反杀(三)
- 神兵利器|网络资产测绘平台聚合工具(AsamF)
- Hadoop3.0-Hdfs | Apache Hadoop介绍
- 记一次对HTB:Timelapse的渗透测试
- Ansible环境部署 | 概述
- Veinmind 在 Jenkins 的0部署成本自动化扫描方案
- 攻防|记一次攻防演练实战总结
- Java入门学习
- 168张图,万字长文,手把手教你开发vue后台管理系统!
- 这才是文件上传和下载的正确方式!
- 如何自学编程?
- 一篇文章快速学会shiro框架!(建议收藏)
- 学会ES6模块化,看这篇就够了
- 90%的人不知道的6个微信小技巧!
- Shiro整合JWT实现登录认证,原来这么简单!
- CSS概述
- Spring注解解析 | P/C命名空间
- 超详细!10分钟开发一个Vue3的后台管理系统!
- 二叉树遍历原理 | 深度优先-广度优先 | 栈-队列
- 推荐几个算法可视化网站!