云函数benchmark

2022-12-23 12:37:41 浏览数 (1)

调试一个计算密集型的小玩意儿,本机计算挺久的,感觉还是需要更多cpu,正在想要不要用批量计算,读文档的时候发现启动也并不是很方便,数据准备到COS/CFS上,然后启动运行,再去COS/CFS上捞结果,这样用云函数来做岂不是更轻松?而且云函数就可以并发几十几百个实例,如果用来做计算性能怎么样呢?干脆做了个一个benchmark。这里用crypto的大质数生成算法来测试计算能力。

代码语言:javascript复制
'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分。

代码语言:javascript复制
threads: 8 score: 104 avg: 13

在4核的macbook上测试的时候成绩也差不多。

代码语言:javascript复制
threads: 6 score: 106.5 avg: 17.75

在手机(Mate40pro)上测的就比较惊喜了

能顶大半台服务器或者笔记本了,看来以后可以把一些计算交给手机。

回到云函数。在腾讯云64M的SCF实例上测得10分左右,这就超出期望了,十个这样的微小实例岂不是就可以打得过一台8核服务器?不过增加内存的时候分配到的cpu并没有成比例增加。因此任务拆给更多的小实例计算可能可以蹭到更多的计算资源。

同时也测试了一下阿里云FC的最低配0.05核128M

结果也类似,用最小实例能蹭到最多的计算资源。

0 人点赞