Merge decode and stream threads in RunModeIdsPcapAuto like in the file runmode. Fix these runmodes not adhering to the cpu affinity setting if CUDA is compiled in.

remotes/origin/master-1.0.x
Victor Julien 15 years ago
parent ead29dc691
commit 1bd2d59253

@ -2104,7 +2104,12 @@ int RunModeIdsPcapAuto(DetectEngineCtx *de_ctx, char *iface) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
ThreadVars *tv_decode1 = TmThreadCreatePacketHandler("Decode1","pickup-queue","simple","decode-queue1","simple","1slot"); #if defined(__SC_CUDA_SUPPORT__)
if (PatternMatchDefaultMatcher() == MPM_B2G_CUDA) {
ThreadVars *tv_decode1 = TmThreadCreatePacketHandler("Decode",
"pickup-queue", "simple",
"decode-queue1", "simple",
"1slot");
if (tv_decode1 == NULL) { if (tv_decode1 == NULL) {
printf("ERROR: TmThreadsCreate failed for Decode1\n"); printf("ERROR: TmThreadsCreate failed for Decode1\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -2114,7 +2119,7 @@ int RunModeIdsPcapAuto(DetectEngineCtx *de_ctx, char *iface) {
printf("ERROR: TmModuleGetByName DecodePcap failed\n"); printf("ERROR: TmModuleGetByName DecodePcap failed\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
Tm1SlotSetFunc(tv_decode1,tm_module,NULL); Tm1SlotSetFunc(tv_decode1, tm_module, NULL);
if (threading_set_cpu_affinity) { if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_decode1, 0); TmThreadSetCPUAffinity(tv_decode1, 0);
@ -2127,7 +2132,38 @@ int RunModeIdsPcapAuto(DetectEngineCtx *de_ctx, char *iface) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
ThreadVars *tv_stream1 = TmThreadCreatePacketHandler("Stream1","decode-queue1","simple","stream-queue1","simple","1slot"); ThreadVars *tv_cuda_PB = TmThreadCreate("CUDA_PB",
"decode-queue1", "simple",
"cuda-pb-queue1", "simple",
"custom", SCCudaPBTmThreadsSlot1, 0);
if (tv_cuda_PB == NULL) {
printf("ERROR: TmThreadsCreate failed for CUDA_PB\n");
exit(EXIT_FAILURE);
}
tv_cuda_PB->type = TVT_PPT;
tm_module = TmModuleGetByName("CudaPacketBatcher");
if (tm_module == NULL) {
printf("ERROR: TmModuleGetByName CudaPacketBatcher failed\n");
exit(EXIT_FAILURE);
}
Tm1SlotSetFunc(tv_cuda_PB, tm_module, (void *)de_ctx);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_cuda_PB, 0);
if (ncpus > 1)
TmThreadSetThreadPriority(tv_cuda_PB, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_cuda_PB) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n");
exit(EXIT_FAILURE);
}
ThreadVars *tv_stream1 = TmThreadCreatePacketHandler("Stream1",
"cuda-pb-queue1", "simple",
"stream-queue1", "simple",
"1slot");
if (tv_stream1 == NULL) { if (tv_stream1 == NULL) {
printf("ERROR: TmThreadsCreate failed for Stream1\n"); printf("ERROR: TmThreadsCreate failed for Stream1\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -2149,7 +2185,73 @@ int RunModeIdsPcapAuto(DetectEngineCtx *de_ctx, char *iface) {
printf("ERROR: TmThreadSpawn failed\n"); printf("ERROR: TmThreadSpawn failed\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} else {
ThreadVars *tv_decode1 = TmThreadCreatePacketHandler("Decode & Stream",
"pickup-queue", "simple",
"stream-queue1", "simple",
"varslot");
if (tv_decode1 == NULL) {
printf("ERROR: TmThreadsCreate failed for Decode1\n");
exit(EXIT_FAILURE);
}
tm_module = TmModuleGetByName("DecodePcapFile");
if (tm_module == NULL) {
printf("ERROR: TmModuleGetByName DecodePcap failed\n");
exit(EXIT_FAILURE);
}
TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL);
tm_module = TmModuleGetByName("StreamTcp");
if (tm_module == NULL) {
printf("ERROR: TmModuleGetByName StreamTcp failed\n");
exit(EXIT_FAILURE);
}
TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_decode1, 0);
if (ncpus > 1)
TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n");
exit(EXIT_FAILURE);
}
}
#else
//#if 0
//ThreadVars *tv_decode1 = TmThreadCreatePacketHandler("Decode & Stream","pickup-queue","simple","packetpool","packetpool","varslot");
ThreadVars *tv_decode1 = TmThreadCreatePacketHandler("Decode & Stream","pickup-queue","simple","stream-queue1","simple","varslot");
if (tv_decode1 == NULL) {
printf("ERROR: TmThreadsCreate failed for Decode1\n");
exit(EXIT_FAILURE);
}
tm_module = TmModuleGetByName("DecodePcap");
if (tm_module == NULL) {
printf("ERROR: TmModuleGetByName DecodePcap failed\n");
exit(EXIT_FAILURE);
}
TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL);
tm_module = TmModuleGetByName("StreamTcp");
if (tm_module == NULL) {
printf("ERROR: TmModuleGetByName StreamTcp failed\n");
exit(EXIT_FAILURE);
}
TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_decode1, 0);
if (ncpus > 1)
TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n");
exit(EXIT_FAILURE);
}
#endif
/* start with cpu 1 so that if we're creating an odd number of detect /* start with cpu 1 so that if we're creating an odd number of detect
* threads we're not creating the most on CPU0. */ * threads we're not creating the most on CPU0. */
if (ncpus > 0) if (ncpus > 0)
@ -2326,9 +2428,11 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx, char *file) {
} }
Tm1SlotSetFunc(tv_decode1, tm_module, NULL); Tm1SlotSetFunc(tv_decode1, tm_module, NULL);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_decode1, 0); TmThreadSetCPUAffinity(tv_decode1, 0);
if (ncpus > 1) if (ncpus > 1)
TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM); TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) { if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n"); printf("ERROR: TmThreadSpawn failed\n");
@ -2352,9 +2456,11 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx, char *file) {
} }
Tm1SlotSetFunc(tv_cuda_PB, tm_module, (void *)de_ctx); Tm1SlotSetFunc(tv_cuda_PB, tm_module, (void *)de_ctx);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_cuda_PB, 0); TmThreadSetCPUAffinity(tv_cuda_PB, 0);
if (ncpus > 1) if (ncpus > 1)
TmThreadSetThreadPriority(tv_cuda_PB, PRIO_MEDIUM); TmThreadSetThreadPriority(tv_cuda_PB, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_cuda_PB) != TM_ECODE_OK) { if (TmThreadSpawn(tv_cuda_PB) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n"); printf("ERROR: TmThreadSpawn failed\n");
@ -2376,9 +2482,11 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx, char *file) {
} }
Tm1SlotSetFunc(tv_stream1,tm_module,NULL); Tm1SlotSetFunc(tv_stream1,tm_module,NULL);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_stream1, 0); TmThreadSetCPUAffinity(tv_stream1, 0);
if (ncpus > 1) if (ncpus > 1)
TmThreadSetThreadPriority(tv_stream1, PRIO_MEDIUM); TmThreadSetThreadPriority(tv_stream1, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_stream1) != TM_ECODE_OK) { if (TmThreadSpawn(tv_stream1) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n"); printf("ERROR: TmThreadSpawn failed\n");
@ -2407,9 +2515,11 @@ int RunModeFilePcapAuto(DetectEngineCtx *de_ctx, char *file) {
} }
TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL); TmVarSlotSetFuncAppend(tv_decode1,tm_module,NULL);
if (threading_set_cpu_affinity) {
TmThreadSetCPUAffinity(tv_decode1, 0); TmThreadSetCPUAffinity(tv_decode1, 0);
if (ncpus > 1) if (ncpus > 1)
TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM); TmThreadSetThreadPriority(tv_decode1, PRIO_MEDIUM);
}
if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) { if (TmThreadSpawn(tv_decode1) != TM_ECODE_OK) {
printf("ERROR: TmThreadSpawn failed\n"); printf("ERROR: TmThreadSpawn failed\n");

Loading…
Cancel
Save