Thanks very much Bill

1, --enable-test-perf-proc enables:
    Entering directory '.../odp-linux/test/linux-generic/performance'
    PASS: odp_scheduling_run_proc.sh

2, ./configure: line 20700: schedule-iquery=yes: command not found

Yes, I'll send a patch for this problem today, thanks for catching this.

Best Regards, Yi



On 7 February 2017 at 09:07, Bill Fischofer <[email protected]>
wrote:

> Also, when doing ./configure --enable-schedule-iquery I notice this
> message output from ./configure:
>
> ...
> checking for pcap/bpf.h... yes
> checking for pcap_open_offline in -lpcap... yes
> checking for library containing dlopen... -ldl
> ./configure: line 20700: schedule-iquery=yes: command not found
> checking for doxygen... doxygen
> checking for asciidoctor... asciidoctor
> ...
>
> This isn't related to this patch, but something to look into?
>
> On Mon, Feb 6, 2017 at 7:04 PM, Bill Fischofer
> <[email protected]> wrote:
> > This looks reasonable, but I'm having trouble trying to test it. I've
> > specified --enable-test-perf-proc on ./configure but it the various
> > perf tests still seem to be using pthreads. Did I miss some
> > configuration flag?
> >
> > On Mon, Feb 6, 2017 at 1:37 AM, Yi He <[email protected]> wrote:
> >> Ping, this patch is still good for most recent api-next branch
> >>
> >> Best Regards, Yi
> >>
> >> On 23 December 2016 at 10:32, Yi He <[email protected]> wrote:
> >>
> >>> SP scheduler hangs in process mode performance test
> >>> due to global data structure were not created in shared
> >>> memory region.
> >>>
> >>> Signed-off-by: Yi He <[email protected]>
> >>> ---
> >>> since v1: rebased upon Petri's linux-gen: schedule_sp: use ring as
> >>> priority queue
> >>>
> >>>  platform/linux-generic/odp_schedule_sp.c | 100
> >>> ++++++++++++++++++-------------
> >>>  1 file changed, 60 insertions(+), 40 deletions(-)
> >>>
> >>> diff --git a/platform/linux-generic/odp_schedule_sp.c
> >>> b/platform/linux-generic/odp_schedule_sp.c
> >>> index 5150d28..bb7416a 100644
> >>> --- a/platform/linux-generic/odp_schedule_sp.c
> >>> +++ b/platform/linux-generic/odp_schedule_sp.c
> >>> @@ -9,6 +9,7 @@
> >>>  #include <odp/api/thread.h>
> >>>  #include <odp/api/time.h>
> >>>  #include <odp/api/schedule.h>
> >>> +#include <odp/api/shared_memory.h>
> >>>  #include <odp_schedule_if.h>
> >>>  #include <odp_debug_internal.h>
> >>>  #include <odp_align_internal.h>
> >>> @@ -108,6 +109,7 @@ typedef struct {
> >>>         sched_cmd_t   pktio_cmd[NUM_PKTIO];
> >>>         prio_queue_t  prio_queue[NUM_GROUP][NUM_PRIO];
> >>>         sched_group_t sched_group;
> >>> +       odp_shm_t     shm;
> >>>  } sched_global_t;
> >>>
> >>>  typedef struct {
> >>> @@ -119,7 +121,7 @@ typedef struct {
> >>>         int          group[NUM_GROUP];
> >>>  } sched_local_t;
> >>>
> >>> -static sched_global_t sched_global;
> >>> +static sched_global_t *sched_global;
> >>>  static __thread sched_local_t sched_local;
> >>>
> >>>  static inline uint32_t index_to_ring_idx(int pktio, uint32_t index)
> >>> @@ -145,30 +147,44 @@ static inline uint32_t
> index_from_ring_idx(uint32_t
> >>> *index, uint32_t ring_idx)
> >>>  static int init_global(void)
> >>>  {
> >>>         int i, j;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       odp_shm_t shm;
> >>> +       sched_group_t *sched_group = NULL;
> >>>
> >>>         ODP_DBG("Using SP scheduler\n");
> >>>
> >>> -       memset(&sched_global, 0, sizeof(sched_global_t));
> >>> +       shm = odp_shm_reserve("sp_scheduler",
> >>> +                             sizeof(sched_global_t),
> >>> +                             ODP_CACHE_LINE_SIZE, 0);
> >>> +
> >>> +       sched_global = odp_shm_addr(shm);
> >>> +
> >>> +       if (sched_global == NULL) {
> >>> +               ODP_ERR("Schedule init: Shm reserve failed.\n");
> >>> +               return -1;
> >>> +       }
> >>> +
> >>> +       memset(sched_global, 0, sizeof(sched_global_t));
> >>> +       sched_global->shm = shm;
> >>>
> >>>         for (i = 0; i < NUM_QUEUE; i++) {
> >>> -               sched_global.queue_cmd[i].s.type     = CMD_QUEUE;
> >>> -               sched_global.queue_cmd[i].s.index    = i;
> >>> -               sched_global.queue_cmd[i].s.ring_idx =
> >>> index_to_ring_idx(0, i);
> >>> +               sched_global->queue_cmd[i].s.type     = CMD_QUEUE;
> >>> +               sched_global->queue_cmd[i].s.index    = i;
> >>> +               sched_global->queue_cmd[i].s.ring_idx =
> >>> index_to_ring_idx(0, i);
> >>>         }
> >>>
> >>>         for (i = 0; i < NUM_PKTIO; i++) {
> >>> -               sched_global.pktio_cmd[i].s.type     = CMD_PKTIO;
> >>> -               sched_global.pktio_cmd[i].s.index    = i;
> >>> -               sched_global.pktio_cmd[i].s.ring_idx =
> >>> index_to_ring_idx(1, i);
> >>> -               sched_global.pktio_cmd[i].s.prio     = PKTIN_PRIO;
> >>> -               sched_global.pktio_cmd[i].s.group    = GROUP_PKTIN;
> >>> +               sched_global->pktio_cmd[i].s.type     = CMD_PKTIO;
> >>> +               sched_global->pktio_cmd[i].s.index    = i;
> >>> +               sched_global->pktio_cmd[i].s.ring_idx =
> >>> index_to_ring_idx(1, i);
> >>> +               sched_global->pktio_cmd[i].s.prio     = PKTIN_PRIO;
> >>> +               sched_global->pktio_cmd[i].s.group    = GROUP_PKTIN;
> >>>         }
> >>>
> >>>         for (i = 0; i < NUM_GROUP; i++)
> >>>                 for (j = 0; j < NUM_PRIO; j++)
> >>> -                       ring_init(&sched_global.prio_
> queue[i][j].ring);
> >>> +                       ring_init(&sched_global->prio_
> queue[i][j].ring);
> >>>
> >>> +       sched_group = &sched_global->sched_group;
> >>>         odp_ticketlock_init(&sched_group->s.lock);
> >>>
> >>>         for (i = 0; i < NUM_THREAD; i++)
> >>> @@ -202,16 +218,22 @@ static int init_local(void)
> >>>
> >>>  static int term_global(void)
> >>>  {
> >>> -       int qi;
> >>> +       int qi, ret = 0;
> >>>
> >>>         for (qi = 0; qi < NUM_QUEUE; qi++) {
> >>> -               if (sched_global.queue_cmd[qi].s.init) {
> >>> +               if (sched_global->queue_cmd[qi].s.init) {
> >>>                         /* todo: dequeue until empty ? */
> >>>                         sched_cb_queue_destroy_finalize(qi);
> >>>                 }
> >>>         }
> >>>
> >>> -       return 0;
> >>> +       ret = odp_shm_free(sched_global->shm);
> >>> +       if (ret < 0) {
> >>> +               ODP_ERR("Shm free failed for sp_scheduler");
> >>> +               ret = -1;
> >>> +       }
> >>> +
> >>> +       return ret;
> >>>  }
> >>>
> >>>  static int term_local(void)
> >>> @@ -267,7 +289,7 @@ static void remove_group(sched_group_t
> *sched_group,
> >>> int thr, int group)
> >>>
> >>>  static int thr_add(odp_schedule_group_t group, int thr)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < 0 || group >= NUM_GROUP)
> >>>                 return -1;
> >>> @@ -292,7 +314,7 @@ static int thr_add(odp_schedule_group_t group, int
> thr)
> >>>
> >>>  static int thr_rem(odp_schedule_group_t group, int thr)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < 0 || group >= NUM_GROUP)
> >>>                 return -1;
> >>> @@ -320,7 +342,7 @@ static int num_grps(void)
> >>>
> >>>  static int init_queue(uint32_t qi, const odp_schedule_param_t
> >>> *sched_param)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>         odp_schedule_group_t group = sched_param->group;
> >>>         int prio = 0;
> >>>
> >>> @@ -333,18 +355,18 @@ static int init_queue(uint32_t qi, const
> >>> odp_schedule_param_t *sched_param)
> >>>         if (sched_param->prio > 0)
> >>>                 prio = LOWEST_QUEUE_PRIO;
> >>>
> >>> -       sched_global.queue_cmd[qi].s.prio  = prio;
> >>> -       sched_global.queue_cmd[qi].s.group = group;
> >>> -       sched_global.queue_cmd[qi].s.init  = 1;
> >>> +       sched_global->queue_cmd[qi].s.prio  = prio;
> >>> +       sched_global->queue_cmd[qi].s.group = group;
> >>> +       sched_global->queue_cmd[qi].s.init  = 1;
> >>>
> >>>         return 0;
> >>>  }
> >>>
> >>>  static void destroy_queue(uint32_t qi)
> >>>  {
> >>> -       sched_global.queue_cmd[qi].s.prio  = 0;
> >>> -       sched_global.queue_cmd[qi].s.group = 0;
> >>> -       sched_global.queue_cmd[qi].s.init  = 0;
> >>> +       sched_global->queue_cmd[qi].s.prio  = 0;
> >>> +       sched_global->queue_cmd[qi].s.group = 0;
> >>> +       sched_global->queue_cmd[qi].s.init  = 0;
> >>>  }
> >>>
> >>>  static inline void add_tail(sched_cmd_t *cmd)
> >>> @@ -354,8 +376,7 @@ static inline void add_tail(sched_cmd_t *cmd)
> >>>         int prio     = cmd->s.prio;
> >>>         uint32_t idx = cmd->s.ring_idx;
> >>>
> >>> -       prio_queue = &sched_global.prio_queue[group][prio];
> >>> -
> >>> +       prio_queue = &sched_global->prio_queue[group][prio];
> >>>         ring_enq(&prio_queue->ring, RING_MASK, idx);
> >>>  }
> >>>
> >>> @@ -365,8 +386,7 @@ static inline sched_cmd_t *rem_head(int group, int
> >>> prio)
> >>>         uint32_t ring_idx, index;
> >>>         int pktio;
> >>>
> >>> -       prio_queue = &sched_global.prio_queue[group][prio];
> >>> -
> >>> +       prio_queue = &sched_global->prio_queue[group][prio];
> >>>         ring_idx = ring_deq(&prio_queue->ring, RING_MASK);
> >>>
> >>>         if (ring_idx == RING_EMPTY)
> >>> @@ -375,16 +395,16 @@ static inline sched_cmd_t *rem_head(int group,
> int
> >>> prio)
> >>>         pktio = index_from_ring_idx(&index, ring_idx);
> >>>
> >>>         if (pktio)
> >>> -               return &sched_global.pktio_cmd[index];
> >>> +               return &sched_global->pktio_cmd[index];
> >>>
> >>> -       return &sched_global.queue_cmd[index];
> >>> +       return &sched_global->queue_cmd[index];
> >>>  }
> >>>
> >>>  static int sched_queue(uint32_t qi)
> >>>  {
> >>>         sched_cmd_t *cmd;
> >>>
> >>> -       cmd = &sched_global.queue_cmd[qi];
> >>> +       cmd = &sched_global->queue_cmd[qi];
> >>>         add_tail(cmd);
> >>>
> >>>         return 0;
> >>> @@ -410,7 +430,7 @@ static void pktio_start(int pktio_index, int num,
> int
> >>> pktin_idx[])
> >>>         ODP_DBG("pktio index: %i, %i pktin queues %i\n",
> >>>                 pktio_index, num, pktin_idx[0]);
> >>>
> >>> -       cmd = &sched_global.pktio_cmd[pktio_index];
> >>> +       cmd = &sched_global->pktio_cmd[pktio_index];
> >>>
> >>>         if (num > NUM_PKTIN)
> >>>                 ODP_ABORT("Supports only %i pktin queues per
> interface\n",
> >>> @@ -428,7 +448,7 @@ static inline sched_cmd_t *sched_cmd(void)
> >>>  {
> >>>         int prio, i;
> >>>         int thr = sched_local.thr_id;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>         thr_group_t *thr_group = &sched_group->s.thr[thr];
> >>>         uint32_t gen_cnt;
> >>>
> >>> @@ -602,7 +622,7 @@ static odp_schedule_group_t
> >>> schedule_group_create(const char *name,
> >>>                                                   const odp_thrmask_t
> >>> *thrmask)
> >>>  {
> >>>         odp_schedule_group_t group = ODP_SCHED_GROUP_INVALID;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>         int i;
> >>>
> >>>         odp_ticketlock_lock(&sched_group->s.lock);
> >>> @@ -633,7 +653,7 @@ static odp_schedule_group_t
> >>> schedule_group_create(const char *name,
> >>>
> >>>  static int schedule_group_destroy(odp_schedule_group_t group)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < NUM_STATIC_GROUP || group >= NUM_GROUP)
> >>>                 return -1;
> >>> @@ -656,7 +676,7 @@ static int schedule_group_destroy(odp_
> schedule_group_t
> >>> group)
> >>>  static odp_schedule_group_t schedule_group_lookup(const char *name)
> >>>  {
> >>>         odp_schedule_group_t group = ODP_SCHED_GROUP_INVALID;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>         int i;
> >>>
> >>>         odp_ticketlock_lock(&sched_group->s.lock);
> >>> @@ -677,7 +697,7 @@ static int schedule_group_join(odp_
> schedule_group_t
> >>> group,
> >>>                                const odp_thrmask_t *thrmask)
> >>>  {
> >>>         int thr;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < 0 || group >= NUM_GROUP)
> >>>                 return -1;
> >>> @@ -709,7 +729,7 @@ static int schedule_group_leave(odp_
> schedule_group_t
> >>> group,
> >>>                                 const odp_thrmask_t *thrmask)
> >>>  {
> >>>         int thr;
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>         odp_thrmask_t *all = &sched_group->s.group[GROUP_ALL].mask;
> >>>         odp_thrmask_t not;
> >>>
> >>> @@ -743,7 +763,7 @@ static int schedule_group_leave(odp_
> schedule_group_t
> >>> group,
> >>>  static int schedule_group_thrmask(odp_schedule_group_t group,
> >>>                                   odp_thrmask_t *thrmask)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < 0 || group >= NUM_GROUP)
> >>>                 return -1;
> >>> @@ -765,7 +785,7 @@ static int schedule_group_thrmask(odp_
> schedule_group_t
> >>> group,
> >>>  static int schedule_group_info(odp_schedule_group_t group,
> >>>                                odp_schedule_group_info_t *info)
> >>>  {
> >>> -       sched_group_t *sched_group = &sched_global.sched_group;
> >>> +       sched_group_t *sched_group = &sched_global->sched_group;
> >>>
> >>>         if (group < 0 || group >= NUM_GROUP)
> >>>                 return -1;
> >>> --
> >>> 2.7.4
> >>>
> >>>
>

Reply via email to