任务描述

这个任务是纯cpu任务,两个任务之间没有依赖,单个任务可以分为三层,每一层是有计算先后顺序的,且多一层需要的资源翻8倍。每个任务的大小都不相同,和原始数据大小有关,每一个任务每一层都可以单线程计算或多线程计算。

image-20220322163217435

调优经历

第一次

第一次没多想开个多线程让它跑,

结果资源占用非常低,20%不到,

原因是来回调度和等待消耗时间,很多无效的调度

第二次

使用taskset平均绑定cpu,指定哪几个核心跑一个任务

结果提高有限,而且存在超内存现象

原因是单个任务的第一层任务开始阶段占用少,后面第三层资源又不够了

image-20220322163858652

第三次

三层分开计算,一二层单线程,第三层多线程,

结果,可以提高很大,但是还是存在超内存

原因,部分大任务需求资源不够导致任务失败

image-20220322164257472

第四次

三层完全打散,按照需求分配资源

结果,占用在85~95之间,发现存在空档,且小任务先执行

原因,同样在等待资源,小任务先满足资源需求,等到小的都跑完才能轮到大的,而大的是凑不齐的

image-20220322165004048

第五次

三层完全打散,按照需求分配资源,设置每一层最少执行数目

结果,占用在80~95之间,发现存在空档

原因,假设设置层最少跑三个,那么第三层在等资源时可能会造成浪费

image-20220322164740262

第六次

三层完全打散,按照需求分配资源,设置每一层最少执行数目,设置第一次游走占用

结果,占用在85~95之间,但是存在超内存现象

原因,让第一层计算临时游走占用第三层计算前的空余时间,但是存在剩余资源不满足第一层计算的情况,因为不同任务需要资源不一样。

image-20220322165432526

结论

第五次是比较合适的,即

三层完全打散,按照需求分配资源,设置每一层最少执行数目,如每层最少跑三个,

虽然,那么第三层在等资源时可能会造成浪费,但是不会产生超内存等现象。

image-20220322164740262