2017-11-18 7 views
2

은 내가 먼저 간단한 상황을 들어 보겠습니다 :차량과 RSU가 주기적으로 메시지를 브로드 캐스팅하면 OMNET ++/Veins 시뮬레이션이 매우 느립니 까?

나는 RSUs 모든 T RSU초에 대해 고정 된 메시지 'RSUmessage'를 방송하는 시나리오가 있습니다.

void TraCIDemoRSU11p::handleSelfMsg(cMessage* msg) { 

if (WaveShortMessage* wsm = dynamic_cast<WaveShortMessage*>(msg)) { 
     if(wsm->getPsid()==-100){ 
      sendDown(RSUmessage->dup()); 
      scheduleAt(simTime() + trsu +uniform(0.02, 0.05), RSUmessage); 
     } 
    } 
    else { 
      BaseWaveApplLayer::handleSelfMsg(wsm); 
    } 
} 

자동차가 다른 자동차뿐만 아니라 RSUs에서 이러한 메시지를받을 수 있습니다 : I (또한, 이러한 고정 메시지 PSID = -100 다른 사람과 구분해야한다) RSU에 대해 다음 코드 방송 구현했습니다. RSU는 자동차로부터받은 메시지를 무시합니다. 자동차는 그러한 메시지를 여러 번 수신하고 비교 자료를 보내고 주기적으로 유사한 유형의 메시지를 전송합니다. 간격 : aggregatedMessage '간격 T 자동차. aggregatedMessage는 Psid = -100이기 때문에 메시지를 다른 메시지와 쉽게 구별 할 수 있습니다.

자기 메시지를 사용하여 자동차 이벤트를 예약하고 있습니다. (비록 내가 handlePositionUpdate 내에서 할 수 있었지만). 자동차의 handleSelfMsg는 다음입니다 :

void TraCIDemo11p::handleSelfMsg(cMessage* msg) { 

    if (WaveShortMessage* wsm = dynamic_cast<WaveShortMessage*>(msg)) { 
     wsm->setSerial(wsm->getSerial() +1); 

     if (wsm->getPsid() == -100) { 
      sendDown(aggregatedMessage->dup()); 
      //sendDelayedDown(aggregatedMessage->dup(), simTime()+uniform(0.1,0.5)); 
      scheduleAt(simTime()+tcar+uniform(0.01, 0.05), aggregatedMessage); 
     } 
     //send this message on the service channel until the counter is 3 or higher. 
     //this code only runs when channel switching is enabled 
     else if (wsm->getSerial() >= 3) { 
      //stop service advertisements 
      stopService(); 
      delete(wsm); 
     } 
     else { 
      scheduleAt(simTime()+1, wsm); 
     } 
    } 
    else { 
      BaseWaveApplLayer::handleSelfMsg(msg); 
    } 
} 

문제 :이 설정을, 시뮬레이션은 매우 매우 느립니다. OMNET GUI에서 익스프레스 모드로 5-6 시간 또는 그 이상에 약 50 시뮬레이션 초가 소요됩니다. (RSU 수 : 64, 차량 수 : 40, 약 1kmx1km지도)

또한 this 게시물을 참조하고 있습니다. OP는 각 RSU가 메시지를 수신 한 후 메시지 전송을 제거하여 속도가 더 빨랐다 고 말합니다. 내 경우에는 각 간격 후에 브로드 캐스트 메시지를 보내야하기 때문에 제거 할 수 없습니다.

질문 :모든 노드가 각 시뮬레이션 된 초의 시작 부분에 sendDown 메시지를 보내려고하기 때문에 이러한 속도 저하가 있다고 생각합니다. 모든 차량과 노드가 동시에 메시지를 보내고 메시지를 보내면 OMNET이 느려지는 경우입니까? (느려지지만, 어느 정도까지 느껴질지라도) 그러나 시뮬레이션에는 전체적으로 약 100 개의 노드 만 있습니다. 확실히 천천히 돌아갈 수는 없습니다. I는 각각의 시뮬레이션 된 제 중 하나 일 절반 통해 메시지들의 전송을 전파를 사용하여 시도 sendDelayedDown(wsm->dup(), simTime()+uniform(0.1,0.5)); : I가 시도 어떤

. 이것은 각 시뮬레이션 초 초에 메시지가 쌓이는 것을 막는 것처럼 보입니다.

정상적인 동작인지 또는 내가 잘못했는지 알려 줄 수 있습니까?

또한 긴 게시물에 대해 사과드립니다. 나는 문맥을 제공하지 않고 내 문제를 설명 할 수 없었다.

답변

3

네트워크에 메시지가 넘쳐 흐르고있는 것 같습니다. RSU의 모든 메시지가 복제되어이 메시지를받은 모든 차량에서 다시 전송됩니다. 따라서 계산 시간은 네트워크의 노드 수 (메시지 발신자 수)에 따라 2 차로 증가합니다. 모든 전송 메시지는 수신 범위에있는 모든 노드에서 처리해야합니다. 메시지 당 3 개의 전송 제한은 많은 도움이되지 않는 것처럼 보이며 채널 전환이 없다면 코드의 주석에 표시된 것처럼 전혀 사용되지 않습니다.

따라서 메시지를 줄이거 나 변경하지 못하면 단순히 메시지를 보내야합니다. 지연된 방식으로 메시지를 보내는 작은 조정은 메시지를 1 초 이상 만 배포하지만 홍수 문제는 해결하지 못합니다. ./run -u Cmdenv ...

  • : 터미널 환경 Cmdenv에서 시뮬레이션을 실행 make MODE=Release
  • : 릴리스 모드에서

    1. 컴파일 :

      그러나, 몇 가지 힌트는 시뮬레이션의 성능을 개선하기 위해 수행 할 수 있습니다 아직 없습니다 꼭 그래픽 환경을 사용해야하는 경우, 인터페이스의 상단 부분에있는 슬라이더를 사용하여 적어도 애니메이션의 속도를 높이십시오.