On Tue, Feb 19, 2019 at 12:38 PM Burakov, Anatoly <anatoly.bura...@intel.com> wrote:
> On 14-Feb-19 1:30 PM, David Marchand wrote: > > --- a/doc/guides/prog_guide/env_abstraction_layer.rst > > +++ b/doc/guides/prog_guide/env_abstraction_layer.rst > > @@ -498,6 +498,20 @@ Those TLS include *_cpuset* and *_socket_id*: > > * *_socket_id* stores the NUMA node of the CPU set. If the CPUs in > CPU set belong to different NUMA node, the *_socket_id* will be set to > SOCKET_ID_ANY. > > > > > > +Control Thread API > > +~~~~~~~~~~~~~~~~~~ > > + > > +It is possible to create Control Threads using the public API > ``rte_ctrl_thread_create()``. > > +Those threads can be used for management/infrastructure tasks and are > used internally by DPDK for multi process support and interrupt handling. > > + > > +Those threads will be scheduled on cpus part of the original process > cpu affinity from which the dataplane and service lcores are excluded. > > + > > +For example, on a 8 cpus system, starting a dpdk application with -l > 2,3 (dataplane cores), then depending on the affinity configuration which > can be controlled with tools like taskset (Linux) or cpuset (FreeBSD), > > + > > +- with no affinity configuration, the Control Threads will end up on > 0-1,4-7 cpus. > > +- with affinity restricted to 2-4, the Control Threads will end up on > cpu 4. > > +- with affinity restricted to 2-3, the Control Threads will end up on > cpu 2 (master lcore, which is the default when no cpu is available). > > You're not winning anything by foregoing the 80 char limit on > documentation (doxygen will still generate this correctly), but you're > losing in readability when working in terminal. I would prefer if you > didn't do those long lines :) > I don't really care, I will just wait for Thomas opinion. > Thomas, do we want checkpatch to warn about this? > > > + > > .. _known_issue_label: > > > > Known Issues > > diff --git a/lib/librte_eal/common/eal_common_options.c > b/lib/librte_eal/common/eal_common_options.c > > index 1f45f82..fca3f83 100644 > > --- a/lib/librte_eal/common/eal_common_options.c > > +++ b/lib/librte_eal/common/eal_common_options.c > > @@ -217,6 +217,7 @@ struct device_option { > > internal_cfg->create_uio_dev = 0; > > internal_cfg->iova_mode = RTE_IOVA_DC; > > internal_cfg->user_mbuf_pool_ops_name = NULL; > > + CPU_ZERO(&internal_cfg->ctrl_cpuset); > > internal_cfg->init_complete = 0; > > } > > > > @@ -1359,6 +1360,31 @@ static int xdigit2val(unsigned char c) > > cfg->lcore_count -= removed; > > } > > > > +static void > > +compute_ctrl_threads_cpuset(struct internal_config *internal_cfg) > > +{ > > + rte_cpuset_t *cpuset = &internal_cfg->ctrl_cpuset; > > + rte_cpuset_t default_set; > > + unsigned int lcore_id; > > + > > + for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { > > + if (eal_cpu_detected(lcore_id) && > > + rte_lcore_has_role(lcore_id, ROLE_OFF)) { > > + CPU_SET(lcore_id, cpuset); > > + } > > + } > > + > > + if (pthread_getaffinity_np(pthread_self(), sizeof(rte_cpuset_t), > > + &default_set) < 0) > > Shouldn't this be != 0? Manpage doesn't say the error values will be > negative. > Good catch... /me hides Thanks for the review. -- David Marchand