[Oisf-users] Detect_Thread_Ratio

Gene Albin gene.albin at gmail.com
Sat Aug 13 03:26:08 UTC 2011


Ah soo.  It appears that when taking a float and making it an int it rounds
down.  So when I set my detect_thread_ratio values at .1, .2, .3, .4, .5,
.6, .7, .8, .9, I will get 4, 9, 14, 19, 24, 28, 33, 38, and 43
respectively.

Do I get a star?

Gene

On Fri, Aug 12, 2011 at 4:05 PM, Will Metcalf <william.metcalf at gmail.com>wrote:

> I did leave out this piece...
>
> src/runmodes.h:extern float threading_detect_ratio;
>
> It is key...
>
> mmmmm grasshopper the answer lies in the code below...
>
> gcc -o makin-stuff makin-stuff.c
> ./makin-stuff
>
> --------snip---------------
> #include <stdio.h>
>
> main(){
>    int foo = 48;
>    float bar = 0.2;
>    int blat;
>
>    blat = foo * bar;
>    printf("where did my remainder go? %i\n", blat);
>
>    printf("how many do we make?\n");
>    int i;
>    for (i = 0; i < blat; i++) {
>       printf("%i\n", i +1);
>    }
>    return 0;
> }
>
>
>
> On Fri, Aug 12, 2011 at 5:10 PM, Gene Albin <gene.albin at gmail.com> wrote:
> > Ok, so if I'm reading that right (and it's like reading
> > ancient hieroglyphics to me!) it looks like first we will never have less
> > than 1 thread, and second we are working with integers so no decimals.
>  If
> > that is the case, then does the 'int' function round decimals to the
> nearest
> > integer or does it round all down?  I don't see anything there forcing it
> to
> > round down so I'd assume it rounds to the nearest.
> > So my 'homework' answer would be that it uses integers and rounds to the
> > nearest integer > 0.
> > How'd I do, teach?
> > Gene
> > On Fri, Aug 12, 2011 at 2:59 PM, Will Metcalf <william.metcalf at gmail.com
> >
> > wrote:
> >>
> >> Since this all sounds a bit like a homework assignment you tell me :D?
> >>
> >>   * threads we're not creating the most on CPU0. */
> >>    if (ncpus > 0)
> >>        cpu = 1;
> >>
> >>    /* always create at least one thread */
> >>    int thread_max = TmThreadGetNbThreads(DETECT_CPU_SET);
> >>    if (thread_max == 0)
> >>        thread_max = ncpus * threading_detect_ratio;
> >>    if (thread_max < 1)
> >>        thread_max = 1;
> >>
> >>    int thread;
> >>    for (thread = 0; thread < thread_max; thread++) {
> >>        snprintf(tname, sizeof(tname), "Detect%"PRIu16, thread+1);
> >>
> >>        char *thread_name = SCStrdup(tname);
> >>        SCLogDebug("Assigning %s affinity to cpu %u", thread_name, cpu);
> >>
> >>        ThreadVars *tv_detect_ncpu =
> >>            TmThreadCreatePacketHandler(thread_name,
> >>                                        "stream-queue1", "simple",
> >>                                        "alert-queue1", "simple",
> >>                                        "1slot");
> >>        if (tv_detect_ncpu == NULL) {
> >>            printf("ERROR: TmThreadsCreate failed\n");
> >>            exit(EXIT_FAILURE);
> >>        }
> >>        tm_module = TmModuleGetByName("Detect");
> >>        if (tm_module == NULL) {
> >>            printf("ERROR: TmModuleGetByName Detect failed\n");
> >>            exit(EXIT_FAILURE);
> >>        }
> >>        Tm1SlotSetFunc(tv_detect_ncpu, tm_module, (void *)de_ctx);
> >>
> >>        TmThreadSetCPU(tv_detect_ncpu, DETECT_CPU_SET);
> >>
> >>        char *thread_group_name = SCStrdup("Detect");
> >>        if (thread_group_name == NULL) {
> >>            printf("Error allocating memory\n");
> >>            exit(EXIT_FAILURE);
> >>        }
> >>        tv_detect_ncpu->thread_group_name = thread_group_name;
> >>
> >>        if (TmThreadSpawn(tv_detect_ncpu) != TM_ECODE_OK) {
> >>            printf("ERROR: TmThreadSpawn failed\n");
> >>            exit(EXIT_FAILURE);
> >>        }
> >>
> >>        if ((cpu + 1) == ncpus)
> >>            cpu = 0;
> >>        else
> >>            cpu++;
> >>    }
> >>
> >>
> >> On Fri, Aug 12, 2011 at 4:38 PM, Gene Albin <gene.albin at gmail.com>
> wrote:
> >> > I understand that the detect_thread_ratio in the suricata.yaml file
> >> > determines the number of threads created by multiplying the ratio
> number
> >> > by
> >> > the number of CPU cores.  What does Suricata do when the result is not
> >> > an
> >> > integer?  For example .2*48=9.6.  Is this rounded down to the lowest
> >> > integer?  Does it create 9.6 threads?  Does it round up?
> >> >
> >> > Thanks,
> >> > --
> >> > Gene Albin
> >> > gene.albin at gmail.com
> >> >
> >> >
> >> > _______________________________________________
> >> > Oisf-users mailing list
> >> > Oisf-users at openinfosecfoundation.org
> >> > http://lists.openinfosecfoundation.org/mailman/listinfo/oisf-users
> >> >
> >> >
> >
> >
> >
> > --
> > Gene Albin
> > gene.albin at gmail.com
> >
> >
>



-- 
Gene Albin
gene.albin at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openinfosecfoundation.org/pipermail/oisf-users/attachments/20110812/9e97ee6d/attachment-0002.html>


More information about the Oisf-users mailing list