cyclictest stress 工具 使用

工具介绍

1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟
2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试

cyclictest 工具

cyclictest 功能介绍,安装编译

Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟

  1. 下载地址
    git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
  2. 安装依赖库
    sudo apt-get install libnuma-dev
  3. make && make install 编译

cyclictest 使用介绍

1.参数介绍
2. 使用举例

  1. 输出参数介绍

cyclictest 工具原理

主要逻辑在线程timerthread 中,在代码rt-tests/src/cyclictest/cyclictest.c

一句话的原理:记录当前时间next 通过nanosleep 函数,延时固定的时间,切出任务,等待任务重新切回来的时候,获取当前时间now,now减去时间间隔,减去next时间,则为系统延时的时间,统计该延时的时间,则为系统调度的延时时间。

默认参数

复制代码
void *timerthread(void *param)
{
	/* 设置时间间隔 也就是参数 -i 指定的时间, 默认1000us */
    interval.tv_sec = par->interval / USEC_PER_SEC;
    interval.tv_nsec = (par->interval % USEC_PER_SEC) * 1000;

    ... 
	while(1)
	{
	/* 延时切出任务 */
       if (nanosleep(&interval, NULL)) {
           if (errno != EINTR)
               warn("nanosleep failed. errno: %d\n", errno);
           goto out;
       }
       next.tv_sec = now.tv_sec + interval.tv_sec;
       next.tv_nsec = now.tv_nsec + interval.tv_nsec;

   if ((ret = clock_gettime(par->clock, &now))) {
       if (ret != EINTR)
           warn("clock_getttime() failed. errno: %d\n", errno);
       goto out;
   }
/* 计算系统调度延时 */
  ....
        if (use_nsecs)
            diff = calcdiff_ns(now, next);
        else
            diff = calcdiff(now, next);
        if (diff < stat->min)
            stat->min = diff;
        if (diff > stat->max) {
            stat->max = diff;
            if (refresh_on_max)
                pthread_cond_signal(&refresh_on_max_cond);
        }
....
}

stress 工具

stress 功能介绍,安装

sudo apt-get install stress 直接使用命令安装就可以啦

stress 参数介绍

-c, --cpu N:产生N个进程,每个进程都循环调用sqrt函数产生CPU压力。

-i, --io N:产生N个进程,每个进程循环调用sync将内存缓冲区内容写到磁盘上,产生IO压力。通过系统调用sync刷新内存缓冲区数据到磁盘中,以确保同步。如果缓冲区内数据较少,写到磁盘中的数据也较少,不会产生IO压力。在SSD磁盘环境中尤为明显,很可能iowait总是0,却因为大量调用系统调用sync,导致系统CPU使用率sys 升高。

-m, --vm N:产生N个进程,每个进程循环调用malloc/free函数分配和释放内存。

--vm-bytes B:指定分配内存的大小

--vm-stride B:不断的给部分内存赋值,让COW(Copy On Write)发生

--vm-hang N :指示每个消耗内存的进程在分配到内存后转入睡眠状态N秒,然后释放内存,一直重复执行这个过程

--vm-keep:一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)

-d, --hdd N:产生N个不断执行write和unlink函数的进程(创建文件,写入内容,删除文件)

--hdd-bytes B:指定文件大小

--hdd-noclean:不要将写入随机ASCII数据的文件Unlink

-t, --timeout N:在N秒后结束程序

--backoff N:等待N微秒后开始运行

-q, --quiet:程序在运行的过程中不输出信息

-n, --dry-run:输出程序会做什么而并不实际执行相关的操作

--version:显示版本号

-v, --verbose:显示详细的信息

stress 使用介绍

  1. cpu 测试
    stress --cpu 8 --timeout 60
    开启8个CPU进程执行sqrt计算,60秒后结束
    2. io 测试
    stress --io 2 --hdd 2 --timeout 60s
    开启2个IO进程,2个磁盘IO进程

    测试结果,查看iowait 参数
  2. 内存测试
    stress --vm 2 --vm-bytes 1G --vm-hang 100 --timeout 100s
    开启2个IO进程,2个磁盘IO进程
    开启2个进程分配内存,每次分配1GB内存,保持100秒后释放,100秒后退出。

    测试结果,使用htop 查看
相关推荐
段一凡-华北理工大学10 分钟前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
狒狒热知识1 小时前
合规筑基专业赋能178软文网引领软文营销行业规范化发展
大数据
weixin_468466852 小时前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
ZGi.ai3 小时前
企业AI资产管理体系:提示词、工作流、知识库应该怎么管
大数据·知识库·工作流编排·ai资产·提示词管理
爱分享的康康3 小时前
低成本自动驾驶数据采集设备理性分析:康谋入门套装适配性解析
大数据·人工智能
程序鉴定师4 小时前
上海小程序开发的坚实保障与行业优势解析
大数据·小程序
Elastic 中国社区官方博客5 小时前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
zgl_200537796 小时前
源代码:跨数据库通用SQL语法解析与标注拆解
大数据·数据库·数据仓库·sql·etl·源代码管理
Ajie'Blog7 小时前
Claude 大模型深度评测:从参数架构到实战边界
大数据·人工智能·架构
暴躁小师兄数据学院7 小时前
【AI大数据工程师特训笔记】第13讲:数据库性能手术刀
大数据·数据库·数据仓库·sql·postgresql