TinyOS论文11:Sentomist

Sentomist:通过症状挖掘检测传感器网络的瞬态错误

Abstract

在摘要部分首先介绍了

  1. 无线传感网络应用程序:事件驱动、看似简单、以复杂的并发模型执行的,很容易产生错误,特别是瞬态错误(瞬态错误:会产生,持续的时间不长)
  2. 瞬态错误产生的原因:传感网程序中具有隐式依赖关系的事件过程交错执行时很可能产生瞬态错误;而且这种瞬态错误隐藏的很深,现有的测试工具不只很难检测这种瞬态错误,连这种瞬态错误的症状也很难识别。
  3. 论文提出了一种新的用于识别传感网程序瞬态错误的工具Sentomist,这篇文章核心部分就是讲解了sentomist实现的基本思想,主要包括:

1)将程序的运行流程根据事件过程划分区间
2)区间特征属性的选取
3)采用一类支持向量机这种异常检测算法划分正常区间和异常区间
这三个部分的内容到后面都会详细介绍

  1. 之后论文采用sentomist对三个传感网程序进行测试,发现sentomist确实能够有效检测程序中的瞬态错误 Introduce

接着introduce部分介绍了
1、传感器程序会有bug的原因:
1)传感器程序是基于事件驱动模式、并以复杂的并发模型运行的:根据的硬件中断执行相应的事件过程。怎么理解事件驱动和并发模型呢?因为传感器对能耗的要求很高,它不能一直处于激活状态,只有当相应的系统中断发生时,才会去执行相应的事件过程,而没有中断发生的时候就可能处于低能耗的睡眠状态,这个就是所谓的事件驱动。
2)而且在一个事件过程执行过程中如果发生了新的系统中断,就会发生抢占,转而去执行新事件过程,这就可能引起了两个事件过程的交错执行,很容易产生瞬态错误
2、论文还说了当具有隐式依赖关系的处理事件过程在交错执行的时候,很可能产生错误,而且这种错误本生具有短暂性,要检测这种瞬态bug和识别瞬态bug的症状都是很困难的
3、Sentomist方法的基本思想
1)sentomist设计的一个核心观点是:含有瞬态错误的传感网程序行为与正常的传感网程序行为有差异,可以采用离群值作为瞬态错误的检测指标。
2)Sentomist方法的基本思想是基于这样一个流程的:sentomist根据指定的中断事件处理划分区间;这些区间中所发生的正常程序行为应具有统计相似性、而偶然性的程序行为可能含有瞬态错误;而且sentomist以程序指令的执行计数作为区间特征属性;sentomist根据指令计数对这些区间进行聚类,把离群值作为瞬态错误区间的检测指标(值越大,表示含有瞬态错误的可能性越高),对于这些离群值越大的区间采用人工的方式来检测该区间是否包含了瞬态错误。

3)Sentomist的实现是基于TinyOS的,TinyOS是一种专门为无线传感器网络设计的操作系统

WSN应用程序的并发模型
1、这里首先介绍了事件过程的概念,事件过程就是事件处理的特定应用程序逻辑。
也就是说当发生一个系统中断时,微控制单元(MCU)会自动调用相应中事件处理逻辑(也就是事件过程),其实意思就是特定的事件过程可以处理特定的系统中断。
2、无线传感器网络操作系统(TinyOS)实现事件过程的两个机制:中断处理器+ 任务
1)中断处理器:中断处理器怎么理解呢,当系统中断发生,会启动一个特定的中断处理器实例处理相应的系统中断。
但是只靠中断处理器处理系统中断是不行的,原因是在执行一些很耗时操作的时候,一个中断处理器实例可能会霸占整个MCU资源,这是不允许的,这就引进了任务的概念
2)task实质上就是一种延时操作,中断处理器可以post任务、任务也可以post任务;任务的是通过FIFO方式执行的;新的中断处理器可以抢占任务
接下来看一个的事件过程的完整实例
3、图1讲解:一个的事件过程的完整实例

通过这个图的讲解就能比较清楚的理解了事件驱动、并发模型、事件过程、事件处理器、任务这些概念以及事件过程的交错执行了
接下来我们用“数据污染”这个传感器程序例子来讲解为什么这种事件过程的交错执行很容易引入瞬态错误

一个动态实例:数据污染
1、这个传感网程序的功能是接受和发送传感器节点获取的数据。
传感器节点获取到周围环境的数据,会产生一个ADC(模拟数字转换器)中断,相应的ADC中断处理器会调用这个readDone方法将数据存储到packet结构体中的data数组中,数组大小为3,当接收到了三个数据以后,把这个数据包发送出去,因为包的发送用到了用到了网络,是个比较耗时的操作,这里把这个提交数据包的操作定义为任务延时操作
(例子讲解)
2、通过这个例子就能发现瞬件过程的交错执行很有可能产生瞬态错误,而且这种错误要复现的话挺困难的,因为刚好要在执行9-11代码的时候产生一个新的事件中断,概率很小;而且错误的症状也不明显,譬如说这里只是把数据偷换了而已,并不会引起程序崩溃,其他功能模块的还是正常执行。

所以要采用一个合适的传感网程序的检测方法,要求既能将瞬态错误的的症状显现出来,又能识别瞬态错误;这里采用的方法是

通过机器学习的方法自动挖掘错误症状
1、这里首先总结正常事件过程的执行模式:因为大部分正常执行的事件过程是没有交错的,可能引起瞬态错误的交错执行的事件过程发生的概率还是比较少的
譬如正常模式:ADC中断—中断处理完成;这个是事件处理器中没有提交任务情况的执行模式;
会在事件处理器中提交任务的模式是:ADC中断—提交任务—中断完成—运行任务;
事件过程交错执行模式:ADC中断—提交任务—中断完成—新的ADC中断—中断完成—运行任务,这种交错执行模式就可以定义成一个离群值、
2、Sentomist的错误症状挖掘的完整流程:
首先Sentomist将传感网程序程序的可执行代码还有测试场景作为输入,运行程序得到程序执行轨迹
Sentomist将程序执行轨迹分解成一系列的区间——这里每一个区间对应了一个事件过程实例
之后再调用一个异常检测算法找出可能含有瞬态错误的区间,
最后采用人工检测的方式检测事件过程是否包含瞬态错误。
要想实现上面整个sentomist执行流程,就需要解决一下三个主要问题:
3、实现Sentomist的三个主要问题
1)怎么将程序的执行轨迹流划分区间
2)对区间特征属性怎么选取
3)错误区间的检测算法
首先来看一下第一个问题是怎么解决的
根据事件过程实例划分区间
1、由于之前说过,大部分的事件过程的执行模式都是相似的,划分之后的区间也应该具有的统计相似性。因此这里根据事件过程实例划分区间

2、这里首先介绍几个基本的概念
1)事件处理区间的定义:一个事件处理区间对应着一个事件过程实例(开始:相应的事件处理器启动;结束:若最后一个task执行完成或者事件处理器退出)
2)事件过程的生命周期序列定义:包括以下四个过程:int(n)(第n个中断处理器的入口)、postTask、runTask、reti(中断处理器的出口),
3)Int-reti串:从中断处理器的入口到中断处理器的出口,也就是途中的t0-t3
3、在划分区间的时候遇到的一个问题就是,区间的开始位置很好定位,它对应着一个特定中断处理器的入口,但是它的结束位置却很难定位主要是因为不知道在处理过程中提交了多少个任务、什么时候提交的的、任务什么时候开始执行、任务什么时候task结束、而且还有可能存在交错执行)
4、这里就引入了三个准则用于找出区间的结束位置,这三个准则都是根据传感网程序中任务的实现机制抽象出来的
1) 规则1描述了任务的执行方式:FIFO队列
2)规则2描述了int-reti串(也就是中断处理器)中提交的任务序列
3)规则3描述了在任务中提交的任务序列

5、区间的识别方式:首先根据规则2可以确定int-reti串中提交的任务序列,再根据规则1确定相应的runTask序列;规则3又可以确定在任务中提交任务序列,最后再根据规则1确定相应的的runTask序列;最后一个runTask执行完毕位置就表明区间的结束位。
总而言这,区间的划分就是根据事件过程实例来划分的,初始位置就是中断处理器的入口,结束位置就是最后一个任务的执行的结束。

根据事件过程实例得到事件处理区间之后,还要对区间进行抽象得到区间的特征属性,这样就能用相关机器学习的方法自动挖掘区间的错误症状,这里就是我么你要解决的第二个问题了:区间特征属性的选取策略
区间特征属性的选取策略
1、区间特征属性的选取策略有很多种,譬如说函数的调用序列、特定函数的调用次数,这里采用的特征选取策略是指令的执行计数。
2、我们知道一个指令对应了一条机器码语句,指令的执行计数就是程序执行全部的机器码、这就有点像程序的语句覆盖。
1) 选择这个作为的区间的特征属性是因为:
①:这种抽象方式对所有的传感网程序都适用
②:而且这里还说了,机器学习的方法同坐这种特征选举方式能够有效的捕获瞬态错误症状,从而区分正常区间和异常区间。
2) 我们来看一下这个例子来理解一下怎么把程序的执行计数作为区间的特征属性,还是以数据污染这个程序威力:传感器节点接受到一个数据后,这场的指令执行是:5,6,9语句各执行一次;但是如果是事件过程交错执行的时候,5,6,9指令会执行两次;像这种执行了两次的模式就可以看成可能含有瞬态错误的异常区间。
异常检测算法:一类支持向量机
之前区间划分好了,区间的特性属性也选取好了,接下来是要对区间进行分类,找出可能包含瞬态错误的异常区间,这里采用的异常检测算法是:一类支持向量机。
1、支持向量机:就是一中分类算法,简单的来说支持向量机找到一个超平面将一组点或者数据分成不同的两类
2、一类支持向量机:
1)根据大部分事件过程实例区间都属于的正常区间,应具有统计相似性、少部分的异常区间可能含有瞬态错误。
2)采用one-Class SVM就能是找到一个边界划分正常区间和异常区间。
3)而且它能够对大部分未分类的样例特征建模,然后根据边界值决定一个样例是否属于离群值。
4)但是这种划分并不是很十分严格,有可能产生误报。意思就是说对于异常区间,它的离群值越大,就代表它含有瞬态错误的可能性越大而已,而不能断定这个异常区间一定包含有瞬态错误
Evaluation
论文通过三个实验研究sentomist对瞬态错误检测的有效性
1、数据采集传感网程序——数据污染
2、多跳数据转发传感网程序——包丢失
3、两个共存的交互协议——对硬件资源的竞争

这三个例子的事件过程对应的硬件中断分别是ADC中断、SPI中断还有时间中断

这里无线传感器模拟器采用的是Avrora,主要是因为Avrora对传感器节点的能和交互的模拟十分精确,这就很好的满足了捕获瞬态错误发生的实时性要求

在Sentomist中整合了Avrora,就能实现前端数据的采集和获取程序执行的流程,再根据相应的事件过程实例划分区间、在获取区间指令执行的计数,最后采用one-Class SVM 算法分类和排序找出可能含有瞬态错误的区间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值