numam-dpdk/lib/librte_eal/rte_eal_version.map
Jianfeng Tan 783b6e5497 eal: add synchronous multi-process communication
We need the synchronous way for multi-process communication,
i.e., blockingly waiting for reply message when we send a request
to the peer process.

We add two APIs rte_eal_mp_request() and rte_eal_mp_reply() for
such use case. By invoking rte_eal_mp_request(), a request message
is sent out, and then it waits there for a reply message. The caller
can specify the timeout. And the response messages will be collected
and returned so that the caller can decide how to translate them.

The API rte_eal_mp_reply() is always called by an mp action handler.
Here we add another parameter for rte_eal_mp_t so that the action
handler knows which peer address to reply.

       sender-process                receiver-process
   ----------------------            ----------------

    thread-n
     |_rte_eal_mp_request() ----------> mp-thread
        |_timedwait()                    |_process_msg()
                                           |_action()
                                               |_rte_eal_mp_reply()
	        mp_thread  <---------------------|
                  |_process_msg()
                     |_signal(send_thread)
    thread-m <----------|
     |_collect-reply

 * A secondary process is only allowed to talk to the primary process.
 * If there are multiple secondary processes for the primary process,
   it will send request to peer1, collect response from peer1; then
   send request to peer2, collect response from peer2, and so on.
 * When thread-n is sending request, thread-m of that process can send
   request at the same time.
 * For pair <action_name, peer>, we guarantee that only one such request
   is on the fly.

Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
Suggested-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2018-01-30 15:17:23 +01:00

259 lines
4.6 KiB
Plaintext

DPDK_2.0 {
global:
__rte_panic;
devargs_list;
eal_parse_sysfs_value;
eal_timer_source;
lcore_config;
per_lcore__lcore_id;
per_lcore__rte_errno;
rte_calloc;
rte_calloc_socket;
rte_cpu_check_supported;
rte_cpu_get_flag_enabled;
rte_cycles_vmware_tsc_map;
rte_delay_us;
rte_dump_physmem_layout;
rte_dump_registers;
rte_dump_stack;
rte_dump_tailq;
rte_eal_alarm_cancel;
rte_eal_alarm_set;
rte_eal_devargs_add;
rte_eal_devargs_dump;
rte_eal_devargs_type_count;
rte_eal_get_configuration;
rte_eal_get_lcore_state;
rte_eal_get_physmem_layout;
rte_eal_get_physmem_size;
rte_eal_has_hugepages;
rte_eal_hpet_init;
rte_eal_init;
rte_eal_iopl_init;
rte_eal_lcore_role;
rte_eal_mp_remote_launch;
rte_eal_mp_wait_lcore;
rte_eal_parse_devargs_str;
rte_eal_process_type;
rte_eal_remote_launch;
rte_eal_tailq_lookup;
rte_eal_tailq_register;
rte_eal_wait_lcore;
rte_exit;
rte_free;
rte_get_hpet_cycles;
rte_get_hpet_hz;
rte_get_tsc_hz;
rte_hexdump;
rte_intr_callback_register;
rte_intr_callback_unregister;
rte_intr_disable;
rte_intr_enable;
rte_log;
rte_log_cur_msg_loglevel;
rte_log_cur_msg_logtype;
rte_logs;
rte_malloc;
rte_malloc_dump_stats;
rte_malloc_get_socket_stats;
rte_malloc_set_limit;
rte_malloc_socket;
rte_malloc_validate;
rte_mem_lock_page;
rte_mem_virt2phy;
rte_memdump;
rte_memory_get_nchannel;
rte_memory_get_nrank;
rte_memzone_dump;
rte_memzone_lookup;
rte_memzone_reserve;
rte_memzone_reserve_aligned;
rte_memzone_reserve_bounded;
rte_memzone_walk;
rte_openlog_stream;
rte_realloc;
rte_set_application_usage_hook;
rte_socket_id;
rte_strerror;
rte_strsplit;
rte_sys_gettid;
rte_thread_get_affinity;
rte_thread_set_affinity;
rte_vlog;
rte_zmalloc;
rte_zmalloc_socket;
local: *;
};
DPDK_2.1 {
global:
rte_epoll_ctl;
rte_epoll_wait;
rte_intr_allow_others;
rte_intr_dp_is_en;
rte_intr_efd_disable;
rte_intr_efd_enable;
rte_intr_rx_ctl;
rte_intr_tls_epfd;
rte_memzone_free;
} DPDK_2.0;
DPDK_2.2 {
global:
rte_intr_cap_multiple;
rte_keepalive_create;
rte_keepalive_dispatch_pings;
rte_keepalive_mark_alive;
rte_keepalive_register_core;
} DPDK_2.1;
DPDK_16.04 {
global:
rte_cpu_get_flag_name;
rte_eal_primary_proc_alive;
} DPDK_2.2;
DPDK_16.07 {
global:
rte_keepalive_mark_sleep;
rte_keepalive_register_relay_callback;
rte_rtm_supported;
rte_thread_setname;
} DPDK_16.04;
DPDK_16.11 {
global:
rte_delay_us_block;
rte_delay_us_callback_register;
rte_eal_dev_attach;
rte_eal_dev_detach;
} DPDK_16.07;
DPDK_17.02 {
global:
rte_bus_dump;
rte_bus_probe;
rte_bus_register;
rte_bus_scan;
rte_bus_unregister;
} DPDK_16.11;
DPDK_17.05 {
global:
rte_cpu_is_supported;
rte_intr_free_epoll_fd;
rte_log_dump;
rte_log_get_global_level;
rte_log_register;
rte_log_set_global_level;
rte_log_set_level;
rte_log_set_level_regexp;
vfio_get_container_fd;
vfio_get_group_fd;
vfio_get_group_no;
} DPDK_17.02;
DPDK_17.08 {
global:
rte_bus_find;
rte_bus_find_by_device;
rte_bus_find_by_name;
rte_log_get_level;
} DPDK_17.05;
DPDK_17.11 {
global:
rte_eal_create_uio_dev;
rte_bus_get_iommu_class;
rte_eal_has_pci;
rte_eal_iova_mode;
rte_eal_mbuf_default_mempool_ops;
rte_eal_using_phys_addrs;
rte_eal_vfio_intr_mode;
rte_lcore_has_role;
rte_malloc_virt2iova;
rte_mem_virt2iova;
rte_vfio_enable;
rte_vfio_is_enabled;
rte_vfio_noiommu_is_enabled;
rte_vfio_release_device;
rte_vfio_setup_device;
} DPDK_17.08;
DPDK_18.02 {
global:
rte_hypervisor_get;
rte_hypervisor_get_name;
rte_vfio_clear_group;
rte_reciprocal_value;
rte_reciprocal_value_u64;
} DPDK_17.11;
EXPERIMENTAL {
global:
rte_eal_cleanup;
rte_eal_devargs_insert;
rte_eal_devargs_parse;
rte_eal_devargs_remove;
rte_eal_hotplug_add;
rte_eal_hotplug_remove;
rte_mp_action_register;
rte_mp_action_unregister;
rte_mp_sendmsg;
rte_mp_request;
rte_mp_reply;
rte_service_attr_get;
rte_service_attr_reset_all;
rte_service_component_register;
rte_service_component_unregister;
rte_service_component_runstate_set;
rte_service_dump;
rte_service_finalize;
rte_service_get_by_id;
rte_service_get_by_name;
rte_service_get_count;
rte_service_get_name;
rte_service_lcore_add;
rte_service_lcore_count;
rte_service_lcore_count_services;
rte_service_lcore_del;
rte_service_lcore_list;
rte_service_lcore_reset_all;
rte_service_lcore_start;
rte_service_lcore_stop;
rte_service_map_lcore_get;
rte_service_map_lcore_set;
rte_service_probe_capability;
rte_service_reset;
rte_service_run_iter_on_app_lcore;
rte_service_runstate_get;
rte_service_runstate_set;
rte_service_set_runstate_mapped_check;
rte_service_set_stats_enable;
rte_service_start_with_defaults;
} DPDK_18.02;