env: Replace DPDK atomics with gcc standard calls
Use standard GCC style atomic operations instead of the DPDK calls. The DPDK calls end up translating to the gcc standard inline calls in the generic case anyway. Change-Id: I0ea760c4e23c3660b082a803bbc174de7250f365 Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
18a2cc11c1
commit
02a17e193e
@ -69,7 +69,7 @@ static int64_t g_conn_idle_interval_in_tsc = -1;
|
|||||||
#define DEFAULT_CONNECTIONS_PER_LCORE 4
|
#define DEFAULT_CONNECTIONS_PER_LCORE 4
|
||||||
#define SPDK_MAX_POLLERS_PER_CORE 4096
|
#define SPDK_MAX_POLLERS_PER_CORE 4096
|
||||||
static int g_connections_per_lcore = DEFAULT_CONNECTIONS_PER_LCORE;
|
static int g_connections_per_lcore = DEFAULT_CONNECTIONS_PER_LCORE;
|
||||||
static rte_atomic32_t g_num_connections[RTE_MAX_LCORE];
|
static uint32_t g_num_connections[RTE_MAX_LCORE];
|
||||||
|
|
||||||
struct spdk_iscsi_conn *g_conns_array;
|
struct spdk_iscsi_conn *g_conns_array;
|
||||||
static char g_shm_name[64];
|
static char g_shm_name[64];
|
||||||
@ -272,7 +272,7 @@ int spdk_initialize_iscsi_conns(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < RTE_MAX_LCORE; i++) {
|
for (i = 0; i < RTE_MAX_LCORE; i++) {
|
||||||
rte_atomic32_set(&g_num_connections[i], 0);
|
g_num_connections[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_conn_idle_interval_in_tsc == -1)
|
if (g_conn_idle_interval_in_tsc == -1)
|
||||||
@ -404,7 +404,7 @@ error_return:
|
|||||||
*/
|
*/
|
||||||
conn->lcore = spdk_app_get_current_core();
|
conn->lcore = spdk_app_get_current_core();
|
||||||
spdk_net_framework_clear_socket_association(conn->sock);
|
spdk_net_framework_clear_socket_association(conn->sock);
|
||||||
rte_atomic32_inc(&g_num_connections[conn->lcore]);
|
__sync_fetch_and_add(&g_num_connections[conn->lcore], 1);
|
||||||
spdk_poller_register(&conn->poller, spdk_iscsi_conn_login_do_work, conn,
|
spdk_poller_register(&conn->poller, spdk_iscsi_conn_login_do_work, conn,
|
||||||
conn->lcore, NULL, 0);
|
conn->lcore, NULL, 0);
|
||||||
|
|
||||||
@ -546,7 +546,7 @@ _spdk_iscsi_conn_free(spdk_event_t event)
|
|||||||
spdk_iscsi_remove_conn(conn);
|
spdk_iscsi_remove_conn(conn);
|
||||||
pthread_mutex_unlock(&g_conns_mutex);
|
pthread_mutex_unlock(&g_conns_mutex);
|
||||||
|
|
||||||
rte_atomic32_dec(&g_num_connections[spdk_app_get_current_core()]);
|
__sync_fetch_and_sub(&g_num_connections[spdk_app_get_current_core()], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -687,7 +687,7 @@ spdk_iscsi_conn_stop_poller(struct spdk_iscsi_conn *conn, spdk_event_fn fn_after
|
|||||||
assert(conn->dev != NULL);
|
assert(conn->dev != NULL);
|
||||||
spdk_scsi_dev_free_io_channels(conn->dev);
|
spdk_scsi_dev_free_io_channels(conn->dev);
|
||||||
}
|
}
|
||||||
rte_atomic32_dec(&g_num_connections[spdk_app_get_current_core()]);
|
__sync_fetch_and_sub(&g_num_connections[spdk_app_get_current_core()], 1);
|
||||||
spdk_net_framework_clear_socket_association(conn->sock);
|
spdk_net_framework_clear_socket_association(conn->sock);
|
||||||
event = spdk_event_allocate(lcore, fn_after_stop, conn, NULL, NULL);
|
event = spdk_event_allocate(lcore, fn_after_stop, conn, NULL, NULL);
|
||||||
spdk_poller_unregister(&conn->poller, event);
|
spdk_poller_unregister(&conn->poller, event);
|
||||||
@ -1296,8 +1296,8 @@ spdk_iscsi_conn_login_do_work(void *arg)
|
|||||||
*/
|
*/
|
||||||
if (conn->login_phase == ISCSI_FULL_FEATURE_PHASE) {
|
if (conn->login_phase == ISCSI_FULL_FEATURE_PHASE) {
|
||||||
event = spdk_iscsi_conn_get_migrate_event(conn, &lcore);
|
event = spdk_iscsi_conn_get_migrate_event(conn, &lcore);
|
||||||
rte_atomic32_dec(&g_num_connections[spdk_app_get_current_core()]);
|
__sync_fetch_and_sub(&g_num_connections[spdk_app_get_current_core()], 1);
|
||||||
rte_atomic32_inc(&g_num_connections[lcore]);
|
__sync_fetch_and_add(&g_num_connections[conn->lcore], 1);
|
||||||
spdk_net_framework_clear_socket_association(conn->sock);
|
spdk_net_framework_clear_socket_association(conn->sock);
|
||||||
spdk_poller_unregister(&conn->poller, event);
|
spdk_poller_unregister(&conn->poller, event);
|
||||||
}
|
}
|
||||||
@ -1373,7 +1373,7 @@ void spdk_iscsi_conn_idle_do_work(void *arg)
|
|||||||
/* migrate work item to new core */
|
/* migrate work item to new core */
|
||||||
spdk_net_framework_clear_socket_association(tconn->sock);
|
spdk_net_framework_clear_socket_association(tconn->sock);
|
||||||
spdk_event_call(spdk_iscsi_conn_get_migrate_event(tconn, &lcore));
|
spdk_event_call(spdk_iscsi_conn_get_migrate_event(tconn, &lcore));
|
||||||
rte_atomic32_inc(&g_num_connections[lcore]);
|
__sync_fetch_and_add(&g_num_connections[lcore], 1);
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "add conn id = %d, cid = %d poller = %p to lcore = %d active\n",
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "add conn id = %d, cid = %d poller = %p to lcore = %d active\n",
|
||||||
tconn->id, tconn->cid, &tconn->poller, lcore);
|
tconn->id, tconn->cid, &tconn->poller, lcore);
|
||||||
}
|
}
|
||||||
@ -1460,7 +1460,7 @@ spdk_iscsi_conn_allocate_reactor(uint64_t cpumask)
|
|||||||
break;
|
break;
|
||||||
case RUNNING:
|
case RUNNING:
|
||||||
/* This lcore is running. Check how many pollers it already has. */
|
/* This lcore is running. Check how many pollers it already has. */
|
||||||
num_pollers = rte_atomic32_read(&g_num_connections[i]);
|
num_pollers = g_num_connections[i];
|
||||||
|
|
||||||
if ((num_pollers > 0) && (num_pollers < g_connections_per_lcore)) {
|
if ((num_pollers > 0) && (num_pollers < g_connections_per_lcore)) {
|
||||||
/* Fewer than the maximum connections per lcore,
|
/* Fewer than the maximum connections per lcore,
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <rte_config.h>
|
#include <rte_config.h>
|
||||||
#include <rte_atomic.h>
|
|
||||||
#include <rte_lcore.h>
|
#include <rte_lcore.h>
|
||||||
|
|
||||||
|
#include "spdk/barrier.h"
|
||||||
#include "spdk/fd.h"
|
#include "spdk/fd.h"
|
||||||
#include "spdk/nvme.h"
|
#include "spdk/nvme.h"
|
||||||
#include "spdk/env.h"
|
#include "spdk/env.h"
|
||||||
@ -294,7 +294,7 @@ submit_single_io(void)
|
|||||||
offset_in_ios = rand_r(&seed) % entry->size_in_ios;
|
offset_in_ios = rand_r(&seed) % entry->size_in_ios;
|
||||||
|
|
||||||
start = spdk_get_ticks();
|
start = spdk_get_ticks();
|
||||||
rte_mb();
|
spdk_mb();
|
||||||
#if HAVE_LIBAIO
|
#if HAVE_LIBAIO
|
||||||
if (entry->type == ENTRY_TYPE_AIO_FILE) {
|
if (entry->type == ENTRY_TYPE_AIO_FILE) {
|
||||||
rc = aio_submit(g_ns->u.aio.ctx, &g_task->iocb, entry->u.aio.fd, IO_CMD_PREAD, g_task->buf,
|
rc = aio_submit(g_ns->u.aio.ctx, &g_task->iocb, entry->u.aio.fd, IO_CMD_PREAD, g_task->buf,
|
||||||
@ -307,7 +307,7 @@ submit_single_io(void)
|
|||||||
entry->io_size_blocks, io_complete, g_task, 0);
|
entry->io_size_blocks, io_complete, g_task, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
rte_mb();
|
spdk_mb();
|
||||||
tsc_submit = spdk_get_ticks() - start;
|
tsc_submit = spdk_get_ticks() - start;
|
||||||
g_tsc_submit += tsc_submit;
|
g_tsc_submit += tsc_submit;
|
||||||
if (tsc_submit < g_tsc_submit_min) {
|
if (tsc_submit < g_tsc_submit_min) {
|
||||||
@ -336,7 +336,7 @@ static void
|
|||||||
check_io(void)
|
check_io(void)
|
||||||
{
|
{
|
||||||
uint64_t end, tsc_complete;
|
uint64_t end, tsc_complete;
|
||||||
rte_mb();
|
spdk_mb();
|
||||||
#if HAVE_LIBAIO
|
#if HAVE_LIBAIO
|
||||||
if (g_ns->type == ENTRY_TYPE_AIO_FILE) {
|
if (g_ns->type == ENTRY_TYPE_AIO_FILE) {
|
||||||
aio_check_io();
|
aio_check_io();
|
||||||
@ -345,7 +345,7 @@ check_io(void)
|
|||||||
{
|
{
|
||||||
spdk_nvme_qpair_process_completions(g_ns->u.nvme.qpair, 0);
|
spdk_nvme_qpair_process_completions(g_ns->u.nvme.qpair, 0);
|
||||||
}
|
}
|
||||||
rte_mb();
|
spdk_mb();
|
||||||
end = spdk_get_ticks();
|
end = spdk_get_ticks();
|
||||||
if (g_ns->current_queue_depth == 1) {
|
if (g_ns->current_queue_depth == 1) {
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user