[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH v2 2/2] rpcbench: Messungen für RPC
+ rpcbench: Messung der Takte, die ein RPC braucht
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/modules/rpcbench/rpcbench.c | 41 +++++++++++++++++++++++++++++++++++---
1 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/modules/rpcbench/rpcbench.c b/src/modules/rpcbench/rpcbench.c
index 7b407eb..7033096 100644
--- a/src/modules/rpcbench/rpcbench.c
+++ b/src/modules/rpcbench/rpcbench.c
@@ -131,22 +131,55 @@ int client()
return 0;
}
+#define NUM_SYSCALL_ITERATIONS 500
int syscall(void)
{
int i;
uint64_t total, t1, t2;
+ // Einfacher Syscall
total = 0;
- for (i = 0; i < 30; i++) {
+ for (i = 0; i < NUM_SYSCALL_ITERATIONS; i++) {
asm volatile("rdtsc" : "=A" (t1));
get_tick_count();
asm volatile("rdtsc" : "=A" (t2));
- printf("syscalls: %lld Takte\n", t2 - t1);
total += t2 - t1;
}
- printf("syscalls: Insgesamt %lld Takte, Durchschnitt %lld\n\n",
- total, total / 30);
+ printf("get_tick_count: Insgesamt %10lld Takte, Durchschnitt %7lld\n",
+ total, total / NUM_SYSCALL_ITERATIONS);
+ //Versuchen an die PID des Serverprozesses zu kommen
+ pid_t server_pid = init_service_get("rpcbench");
+
+ if (server_pid == 0) {
+ puts("Fehler: Serverprozess konnte nicht gefunden werden!");
+ puts(" Wurde er gestartet?");
+ return -2;
+ }
+
+ // Ein RPC zum Server ohne Antwort
+ total = 0;
+ for (i = 0; i < NUM_SYSCALL_ITERATIONS; i++) {
+ asm volatile("rdtsc" : "=A" (t1));
+ send_message(server_pid, 1234, 0, 0, NULL);
+ asm volatile("rdtsc" : "=A" (t2));
+ total += t2 - t1;
+ }
+ printf("send_message: Insgesamt %10lld Takte, Durchschnitt %7lld\n",
+ total, total / NUM_SYSCALL_ITERATIONS);
+
+ // Ein RPC zum Server und zurück
+ total = 0;
+ for (i = 0; i < NUM_SYSCALL_ITERATIONS; i++) {
+ response_t* resp;
+ asm volatile("rdtsc" : "=A" (t1));
+ resp = rpc_get_response(server_pid, "GET_DATA", 0, NULL);
+ asm volatile("rdtsc" : "=A" (t2));
+ free(resp);
+ total += t2 - t1;
+ }
+ printf("rpc_get_response: Insgesamt %10lld Takte, Durchschnitt %7lld\n",
+ total, total / NUM_SYSCALL_ITERATIONS);
return 0;
}
--
1.6.0.2