破坏测试工具——CPU压力

Posted 搜狗测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了破坏测试工具——CPU压力相关的知识,希望对你有一定的参考价值。

前言

小编所在的项目组前段时间出现了一个BUG,键盘在一定的情况下会持续进行app间的跳转,定位原因后发现,该问题是因为机器性能较差,且机器CPU资源已消耗过大,导致键盘与App间的通讯一直失败,因此就出现了无休止的跳转,借由此事,小编便开始想要制作一个工具去抢占手机中的部分资源,让自己的app处在一个高压力的状态下运行并进行测试工作。

思考

说起资源的抢占,那首先就是CPU压力测试,那么我们该如何去做呢?

众所周知,CPU压力即是CPU占用与休息的时间占比,那我们这边要做的工具必然就需要进行精确的计算,确保CPU增加的数值符合预期。之前在网上找了一些别人写的代码,基本都是把一些耗时的计算放入CPU中进行死循环执行,之后再休息短暂的时间进行进行运算,虽然这给小编提供了思路但是并不满足此处的需求,由于小编需要在不同的手机上进行测试,所以希望CPU占用都能保持一致,而不是在性能好的手机上CPU压力低,在性能差的手机上CPU压力高。

解决方案

于是小编依靠时间来控制CPU压力,也就是说当10%CPU压力时,CPU会在1个单位时间内满负荷运算,在之后9个单位时间内进入休息状态,因为CPU的时间片段比较精细,所以我们选择的时间计算函数也是在C中非常精细的统计函数,具体代码如下:

 由于代码是在ios上进行测试的,所以仅供参考

//首先是cpu运算的函数

void func() {

    sqrt(rand());//进行开方运算
}

 

//建立获取基准时间

static inline uint64_t nanos_to_abs(uint64_t nanos) {
    return nanos * timebase_info.denom / timebase_info.numer;
}

 

//在本函数中,大家可以根据需要去将CPU压力分配到多个线程中

void cpu_stress_threads(double percentage, int thread_count) {
    for (int i = 0; i < thread_count; i++) {
        cpu_stress(percentage/thread_count);
    }
}

 

//CPU加压函数

void cpu_stress(double percentage) {//我们首先传入希望达到的CPU占比
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mach_timebase_info(&timebase_info);//基准时间校准
    });
    dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue2, ^{//开辟线程执行加压动作
        uint64_t bias = 0;
        while (true) {//死循环持续加压,这里大家可以自行添加停止的时机
            uint64_t t1, t2, t3, t, delay;
            t1 = mach_absolute_time();
            uint64_t sliceEnd = t1 + nanos_to_abs(1e7);//一个时间片为10ms
            do {
                //占用cpu的函数
                func();
                t2 = mach_absolute_time();
            }
            while(t2 < sliceEnd);//执行10ms的CPU持续运行
            t = t2 - t1;
            delay = t * ( 1.0 / percentage - 1.0);
            delay -= bias;
            mach_wait_until(mach_absolute_time() + delay);//执行对应比例的CPU休息时间
            t3 = mach_absolute_time();
            bias = (t3 - t2) - delay;//将代码执行的时间损耗计入休息时间
        }
    });


破坏测试工具——CPU压力

总结

以上就是小编制作的CPU压力测试工具,如果大家需要让此APP在后台运行只需要使其增加后台播放音乐的权限,并每隔一段时间播放一个音频文件即可,由于小编是输入法项目组的所以并不需要做这么多的工作,大家自行查找资料很容易就能做出来的。至此,本次的CPU压力测试就介绍到这里。

以上是关于破坏测试工具——CPU压力的主要内容,如果未能解决你的问题,请参考以下文章

公开课资料

cpu 鲁大师压力测试温度多少算合适

鲁大师压力测试cpu温度多少正常

cpu利用率和cpu 队列

Linux压力测试工具-stress

[转帖]linux下CPU内存IO网络的压力测试,硬盘读写速度测试,Linux三个系统资源监控工具