Commit 2422d366 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

greybus: Revert "gb_loopback: Fix throughput calculations"

This reverts commit 9b9b046af237f5674c2f7ca991dc62332b2d4041

Bryan wants more feedback first.
Reported-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent b07868bd
...@@ -81,7 +81,6 @@ struct gb_loopback { ...@@ -81,7 +81,6 @@ struct gb_loopback {
atomic_t outstanding_operations; atomic_t outstanding_operations;
/* Per connection stats */ /* Per connection stats */
struct timeval ts;
struct gb_loopback_stats latency; struct gb_loopback_stats latency;
struct gb_loopback_stats throughput; struct gb_loopback_stats throughput;
struct gb_loopback_stats requests_per_second; struct gb_loopback_stats requests_per_second;
...@@ -521,6 +520,7 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation) ...@@ -521,6 +520,7 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation)
gb_loopback_push_latency_ts(gb, &op_async->ts, &te); gb_loopback_push_latency_ts(gb, &op_async->ts, &te);
gb->elapsed_nsecs = gb_loopback_calc_latency(&op_async->ts, gb->elapsed_nsecs = gb_loopback_calc_latency(&op_async->ts,
&te); &te);
gb_loopback_calculate_stats(gb);
} }
if (op_async->pending) { if (op_async->pending) {
...@@ -529,7 +529,6 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation) ...@@ -529,7 +529,6 @@ static void gb_loopback_async_operation_callback(struct gb_operation *operation)
del_timer_sync(&op_async->timer); del_timer_sync(&op_async->timer);
gb_loopback_async_operation_put(op_async); gb_loopback_async_operation_put(op_async);
} }
gb_loopback_calculate_stats(gb);
mutex_unlock(&gb->mutex); mutex_unlock(&gb->mutex);
dev_dbg(&gb->connection->bundle->dev, "complete operation %d\n", dev_dbg(&gb->connection->bundle->dev, "complete operation %d\n",
...@@ -847,7 +846,6 @@ static void gb_loopback_reset_stats(struct gb_loopback *gb) ...@@ -847,7 +846,6 @@ static void gb_loopback_reset_stats(struct gb_loopback *gb)
/* Should be initialized at least once per transaction set */ /* Should be initialized at least once per transaction set */
gb->apbridge_latency_ts = 0; gb->apbridge_latency_ts = 0;
gb->gpbridge_latency_ts = 0; gb->gpbridge_latency_ts = 0;
memset(&gb->ts, 0, sizeof(struct timeval));
} }
static void gb_loopback_update_stats(struct gb_loopback_stats *stats, u32 val) static void gb_loopback_update_stats(struct gb_loopback_stats *stats, u32 val)
...@@ -862,15 +860,15 @@ static void gb_loopback_update_stats(struct gb_loopback_stats *stats, u32 val) ...@@ -862,15 +860,15 @@ static void gb_loopback_update_stats(struct gb_loopback_stats *stats, u32 val)
static void gb_loopback_requests_update(struct gb_loopback *gb, u32 latency) static void gb_loopback_requests_update(struct gb_loopback *gb, u32 latency)
{ {
u64 req = gb->requests_completed * USEC_PER_SEC; u32 req = USEC_PER_SEC;
do_div(req, latency); do_div(req, latency);
gb_loopback_update_stats(&gb->requests_per_second, (u32)req); gb_loopback_update_stats(&gb->requests_per_second, req);
} }
static void gb_loopback_throughput_update(struct gb_loopback *gb, u32 latency) static void gb_loopback_throughput_update(struct gb_loopback *gb, u32 latency)
{ {
u64 throughput; u32 throughput;
u32 aggregate_size = sizeof(struct gb_operation_msg_hdr) * 2; u32 aggregate_size = sizeof(struct gb_operation_msg_hdr) * 2;
switch (gb->type) { switch (gb->type) {
...@@ -889,13 +887,14 @@ static void gb_loopback_throughput_update(struct gb_loopback *gb, u32 latency) ...@@ -889,13 +887,14 @@ static void gb_loopback_throughput_update(struct gb_loopback *gb, u32 latency)
return; return;
} }
aggregate_size *= gb->requests_completed; /* Calculate bytes per second */
throughput = aggregate_size * USEC_PER_SEC; throughput = USEC_PER_SEC;
do_div(throughput, latency); do_div(throughput, latency);
gb_loopback_update_stats(&gb->throughput, (u32)throughput); throughput *= aggregate_size;
gb_loopback_update_stats(&gb->throughput, throughput);
} }
static void gb_loopback_calculate_latency_stats(struct gb_loopback *gb) static void gb_loopback_calculate_stats(struct gb_loopback *gb)
{ {
u32 lat; u32 lat;
...@@ -908,6 +907,10 @@ static void gb_loopback_calculate_latency_stats(struct gb_loopback *gb) ...@@ -908,6 +907,10 @@ static void gb_loopback_calculate_latency_stats(struct gb_loopback *gb)
/* Raw latency log on a per thread basis */ /* Raw latency log on a per thread basis */
kfifo_in(&gb->kfifo_lat, (unsigned char *)&lat, sizeof(lat)); kfifo_in(&gb->kfifo_lat, (unsigned char *)&lat, sizeof(lat));
/* Log throughput and requests using latency as benchmark */
gb_loopback_throughput_update(gb, lat);
gb_loopback_requests_update(gb, lat);
/* Log the firmware supplied latency values */ /* Log the firmware supplied latency values */
gb_loopback_update_stats(&gb->apbridge_unipro_latency, gb_loopback_update_stats(&gb->apbridge_unipro_latency,
gb->apbridge_latency_ts); gb->apbridge_latency_ts);
...@@ -915,27 +918,6 @@ static void gb_loopback_calculate_latency_stats(struct gb_loopback *gb) ...@@ -915,27 +918,6 @@ static void gb_loopback_calculate_latency_stats(struct gb_loopback *gb)
gb->gpbridge_latency_ts); gb->gpbridge_latency_ts);
} }
static void gb_loopback_calculate_stats(struct gb_loopback *gb)
{
u64 nlat;
u32 lat;
struct timeval te;
gb_loopback_calculate_latency_stats(gb);
if (gb->iteration_count == gb->iteration_max) {
do_gettimeofday(&te);
nlat = gb_loopback_calc_latency(&gb->ts, &te);
lat = gb_loopback_nsec_to_usec_latency(nlat);
gb_loopback_throughput_update(gb, lat);
gb_loopback_requests_update(gb, lat);
memset(&gb->ts, 0, sizeof(struct timeval));
gb->type = 0;
}
}
static void gb_loopback_async_wait_to_send(struct gb_loopback *gb) static void gb_loopback_async_wait_to_send(struct gb_loopback *gb)
{ {
if (!(gb->async && gb->outstanding_operations_max)) if (!(gb->async && gb->outstanding_operations_max))
...@@ -973,10 +955,8 @@ static int gb_loopback_fn(void *data) ...@@ -973,10 +955,8 @@ static int gb_loopback_fn(void *data)
/* Optionally terminate */ /* Optionally terminate */
if (send_count == gb->iteration_max) { if (send_count == gb->iteration_max) {
if (!gb->async) gb->type = 0;
send_count = 0; send_count = 0;
else if (gb->iteration_count == gb->iteration_max)
send_count = 0;
mutex_unlock(&gb->mutex); mutex_unlock(&gb->mutex);
continue; continue;
} }
...@@ -985,15 +965,10 @@ static int gb_loopback_fn(void *data) ...@@ -985,15 +965,10 @@ static int gb_loopback_fn(void *data)
type = gb->type; type = gb->type;
mutex_unlock(&gb->mutex); mutex_unlock(&gb->mutex);
if (gb->ts.tv_usec == 0 && gb->ts.tv_sec == 0)
do_gettimeofday(&gb->ts);
/* Else operations to perform */ /* Else operations to perform */
if (gb->async) { if (gb->async) {
if (type == GB_LOOPBACK_TYPE_PING) { if (type == GB_LOOPBACK_TYPE_PING) {
error = gb_loopback_async_ping(gb); error = gb_loopback_async_ping(gb);
if (!error)
gb->requests_completed++;
gb_loopback_calculate_stats(gb); gb_loopback_calculate_stats(gb);
} else if (type == GB_LOOPBACK_TYPE_TRANSFER) { } else if (type == GB_LOOPBACK_TYPE_TRANSFER) {
error = gb_loopback_async_transfer(gb, size); error = gb_loopback_async_transfer(gb, size);
...@@ -1014,8 +989,6 @@ static int gb_loopback_fn(void *data) ...@@ -1014,8 +989,6 @@ static int gb_loopback_fn(void *data)
if (error) if (error)
gb->error++; gb->error++;
else
gb->requests_completed++;
gb->iteration_count++; gb->iteration_count++;
gb_loopback_calculate_stats(gb); gb_loopback_calculate_stats(gb);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment