은 내가 먼저 간단한 상황을 들어 보겠습니다 :차량과 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가 시도 어떤
. 이것은 각 시뮬레이션 초 초에 메시지가 쌓이는 것을 막는 것처럼 보입니다.
정상적인 동작인지 또는 내가 잘못했는지 알려 줄 수 있습니까?
또한 긴 게시물에 대해 사과드립니다. 나는 문맥을 제공하지 않고 내 문제를 설명 할 수 없었다.