嵌入式linux, sched: RT throttling activated问题求助大神

shinerise 2016-09-13 09:17:31
各位大神:
我最近升级嵌入式linux程序,结果出现这个错误: sched: RT throttling activated。出现的时机,就是我socket程序,select时收到数据时。我的Recv程序片段如下:
while(1)
{
FD_ZERO(&sfFds);
FD_SET(dwSckHandler,&sfFds);

stTmrOut.tv_sec = 5;
stTmrOut.tv_usec = 0;

if(select(dwSckHandler + 1,&sfFds,NULL,NULL,&stTmrOut) > 0)
{
dwRdLen = recv(dwSckHandler,ucRxBuf,(sizeof(ucRxBuf) - 1),0);

if(dwRdLen > 0)
{
uint8_t ucFrm[1024];
int32_t dwFrmLen = 0;

queue_push(sg_piTgNetRxQue,ucRxBuf,dwRdLen);

while((dwFrmLen = queue_has_tg_frame(sg_piTgNetRxQue)) > 0)
{
if(dwFrmLen < 1024)
{
queue_pop(sg_piTgNetRxQue,ucFrm,dwFrmLen);

LOGNOTICE("Parser 1 frame.Len:%d",dwFrmLen);
hdzlog_debug(ucFrm,dwFrmLen);

//Handle TG Rx Queue
tg_handle_rx(ucFrm,dwFrmLen);

}
else //Max frame len should be less than SCK_MAX_FRM_LEN,Queue Maybe err,
{
LOGERROR("Socket Rx Queue Err,flush rx queue.\n");
queue_flush(sg_piTgNetRxQue);
}
}
}
else
{
LOGNOTICE("SckDown.Errno:%d\n",errno);
if((dwRdLen < 0) && (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)) //Recv INTR
{
continue; //Continue Recv
}
else
{
LOGNOTICE("Recv Data Fail.Maybe Socket Down.\n");
br_tg_sckdown(pthread_self()); //Notify BusREq Tsk that this NET Recv Sck is down
while(1) //This sck is down, wait until BR-Tsk delete this tsk
{
pthread_testcancel();
}
}
}
}
else //No data comes,so output system state
{
char ucIP[PEER_IP_LENGTH] = {0};

if(getpeer_inf(dwSckHandler,ucIP) == 0)
{
LOGNOTICE("DevIP:%s is connected.",ucIP);
}
}

}
}
这个是一个pthread线程函数,专门负责接收Socket数据。每当收到数据,执行select(dwSckHandler + 1,&sfFds,NULL,NULL,&stTmrOut) 时,收到数据时,系统就会抛出sched: RT throttling activated,此时top查看CPU占用率,达到98%以上。想问一下,为啥执行select,会导致系统出现这个异常呢?那个socet句柄,是个正确的值啊。我accept连接后,socket句柄是8,Select时,句柄也是8啊,没错啊?为啥执行select会导致出现这个问题呢?有知道的大侠帮忙解答一下吧,多谢。
...全文
3677 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
源码链接: https://pan.quark.cn/s/651b74ed6067 《MQL4中文帮助手册》是一部详尽阐述MetaQuotes Language 4(MQL4)编程语言的参考书籍,其核心目标在于协助用户掌握并运用MQL4进行金融市场的自动化交易系统构建。MQL4作为MetaTrader 4交易平台的核心编程语言,赋予了交易者开发自定义指标、Expert Advisors(EA智能交易系统)以及脚本的能力。 ### MQL4基础知识 1. **Syntax 语法**:MQL4的语法规则与C/C++语言展现出相似性,涵盖了变量声明、函数调用、条件判断、循环机制等核心要素。熟练掌握并合理运用语法是开发高效MQL4代码的先决条件。 2. **Comments 注释**:在MQL4编程环境中,单行注释采用两个斜线(//)进行标识,而多行注释则通过/* 和 */进行界定。注释的主要功能在于阐释代码用途,从而提升代码的可读性与可维护性。 3. **Identifiers 标识符**:标识符是程序中用于命名变量、函数、类等元素的字符序列。其命名规则要求必须以字母或下划线作为开头,后续可包含字母、数字或下划线组合。MQL4语言对大小写敏感,因此`MyVariable`与`myvariable`被视为两个独立的标识符。 4. **Reserved words 保留字**:保留字是MQL4语言中预先设定的特殊词汇,例如`int`, `bool`, `double`, `if`, `else`, `for`, `while`等,这些词汇不可用作自定义标识符,以防止与语言关键字产生冲突。 5. **Data types 数据类型**:MQL4支持多元化的数据类型,包括...
内容概要:本文针对电动汽车参与充放电调度时因放电奖励差异导致车主响应意愿不均衡的问题,提出了一种量化用户响应行为的电动汽车响应率计算方法,并提供了基于Matlab的代码实现。该方法通过建立激励机制与用户参与度之间的数学关系,有效刻画不同奖励水平下车主对放电调度的响应概率,为核心研究电动汽车集群调控、需求侧响应策略优化及电力市场激励机制设计等问题提供了关键建模工具,有助于提升电网对大规模电动汽车负荷的调度能力与互动效率。; 适合人群:具备电力系统、智能交通或能源管理等相关专业背景,熟悉Matlab编程语言,从事科研工作或工程应用的研究生及研究人员。; 使用场景及目标:①用于分析不同激励政策对电动汽车用户行为的影响程度;②构建需求响应模型中的用户响应概率模块,提升负荷预测与调度决策精度;③支撑车网互动(V2G)场景下的优化调度算法开发与仿真验证,推动电动汽车资源的规模化协同利用。; 阅读建议:建议结合具体的调度场景和实测用户行为数据,对该响应率模型进行参数标定与适应性调整,并可进一步将其融入多目标优化、博弈论或强化学习等高级决策框架中,以增强模型的实际应用价值与理论深度。

23,224

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧