From 88ff70584704e6b5b17305b599ce3d45a4ddc767 Mon Sep 17 00:00:00 2001 From: eeb Date: Wed, 17 Sep 2003 11:31:16 +0000 Subject: [PATCH] * LWT - single 'where' - interrupts disabled for whole event - removed per-cpu get_cycles() offset calculation - changed event formatting * socknal - stop using write_space for tx timeout; consider connection alive while it can buffer more stuff; potentially the whole socket buffer must drain within the tx timeout. - changed peer death notification - nicer daemon names - restored RH - specific affinity FTTB --- lnet/libcfs/lwt.c | 126 -------------------------------------------- lustre/portals/libcfs/lwt.c | 126 -------------------------------------------- 2 files changed, 252 deletions(-) diff --git a/lnet/libcfs/lwt.c b/lnet/libcfs/lwt.c index 533481e..a40a7ed 100644 --- a/lnet/libcfs/lwt.c +++ b/lnet/libcfs/lwt.c @@ -144,128 +144,6 @@ lwt_snapshot (int *ncpu, int *total_size, return (0); } -void -lwt_migrate_to (int cpu) -{ -#if 0 - current->cpus_allowed = 1UL << cpu; - while (smp_processor_id() != cpu) - schedule (); -#endif - set_cpus_allowed (current, 1UL << cpu); -} - -static volatile cycles_t helper_cycles; -static volatile int helper_control; - -#define LWT_HELPER_IDLE 0 -#define LWT_HELPER_GO 1 -#define LWT_HELPER_DONE 2 -#define LWT_HELPER_EXIT 3 -#define LWT_HELPER_EXITED 4 - -int -lwt_helper (void *arg) -{ - long cpu = (long)arg; - - kportal_daemonize ("lwt_helper"); - kportal_blockallsigs (); - - lwt_migrate_to (cpu); - - LASSERT (helper_control == LWT_HELPER_IDLE); - helper_control = LWT_HELPER_DONE; - mb(); - - for (;;) - switch (helper_control) { - default: LBUG(); - - case LWT_HELPER_DONE: - continue; - - case LWT_HELPER_GO: - helper_cycles = get_cycles(); - mb (); - helper_control = LWT_HELPER_DONE; - mb (); - continue; - - case LWT_HELPER_EXIT: - helper_control = LWT_HELPER_EXITED; - mb (); - return (0); - } -} - -long -lwt_get_cpu_cycles_offset1 (long cpu, long *diff) -{ - cycles_t tzero0; - cycles_t tzero1; - - LASSERT (cpu != 0); - - tzero0 = get_cycles(); - mb(); - - helper_control = LWT_HELPER_GO; - mb(); - - while (helper_control != LWT_HELPER_DONE) - ; - - tzero1 = get_cycles(); - - *diff = tzero1 - tzero0; - return (((tzero1 + tzero0) >> 1) - helper_cycles); -} - -long -lwt_get_cpu_cycles_offset (int cpu) -{ - long pid; - long elapsed; - long offset; - long min_elapsed; - long min_offset; - int i; - - LASSERT(cpu != 0); - - helper_control = LWT_HELPER_IDLE; - pid = kernel_thread (lwt_helper, (void *)cpu, 0); - if (pid < 0) { - CERROR ("Can't spawn helper: %ld\n", pid); - return (0); - } - - lwt_migrate_to(0); - - while (helper_control == LWT_HELPER_IDLE) - our_cond_resched(); - - offset = min_offset = lwt_get_cpu_cycles_offset1(cpu, &elapsed); - min_elapsed = elapsed; - - for (i = 0; i < 1024; i++) { - offset = lwt_get_cpu_cycles_offset1(cpu, &elapsed); - if (elapsed < min_elapsed) { - min_offset = offset; - min_elapsed = elapsed; - } - } - - helper_control = LWT_HELPER_EXIT; - mb(); - while (helper_control != LWT_HELPER_EXITED) - ; - - CDEBUG (D_INFO, "cycle offset %d: min %ld, offset %ld\n", cpu, min_elapsed, min_offset); - return (min_offset); -} - int lwt_init () { @@ -313,10 +191,6 @@ lwt_init () } } - lwt_cpus[0].lwtc_offset = 0; - for (i = 1; i < num_online_cpus(); i++) - lwt_cpus[i].lwtc_offset = lwt_get_cpu_cycles_offset(i); - lwt_enabled = 1; mb(); diff --git a/lustre/portals/libcfs/lwt.c b/lustre/portals/libcfs/lwt.c index 533481e..a40a7ed 100644 --- a/lustre/portals/libcfs/lwt.c +++ b/lustre/portals/libcfs/lwt.c @@ -144,128 +144,6 @@ lwt_snapshot (int *ncpu, int *total_size, return (0); } -void -lwt_migrate_to (int cpu) -{ -#if 0 - current->cpus_allowed = 1UL << cpu; - while (smp_processor_id() != cpu) - schedule (); -#endif - set_cpus_allowed (current, 1UL << cpu); -} - -static volatile cycles_t helper_cycles; -static volatile int helper_control; - -#define LWT_HELPER_IDLE 0 -#define LWT_HELPER_GO 1 -#define LWT_HELPER_DONE 2 -#define LWT_HELPER_EXIT 3 -#define LWT_HELPER_EXITED 4 - -int -lwt_helper (void *arg) -{ - long cpu = (long)arg; - - kportal_daemonize ("lwt_helper"); - kportal_blockallsigs (); - - lwt_migrate_to (cpu); - - LASSERT (helper_control == LWT_HELPER_IDLE); - helper_control = LWT_HELPER_DONE; - mb(); - - for (;;) - switch (helper_control) { - default: LBUG(); - - case LWT_HELPER_DONE: - continue; - - case LWT_HELPER_GO: - helper_cycles = get_cycles(); - mb (); - helper_control = LWT_HELPER_DONE; - mb (); - continue; - - case LWT_HELPER_EXIT: - helper_control = LWT_HELPER_EXITED; - mb (); - return (0); - } -} - -long -lwt_get_cpu_cycles_offset1 (long cpu, long *diff) -{ - cycles_t tzero0; - cycles_t tzero1; - - LASSERT (cpu != 0); - - tzero0 = get_cycles(); - mb(); - - helper_control = LWT_HELPER_GO; - mb(); - - while (helper_control != LWT_HELPER_DONE) - ; - - tzero1 = get_cycles(); - - *diff = tzero1 - tzero0; - return (((tzero1 + tzero0) >> 1) - helper_cycles); -} - -long -lwt_get_cpu_cycles_offset (int cpu) -{ - long pid; - long elapsed; - long offset; - long min_elapsed; - long min_offset; - int i; - - LASSERT(cpu != 0); - - helper_control = LWT_HELPER_IDLE; - pid = kernel_thread (lwt_helper, (void *)cpu, 0); - if (pid < 0) { - CERROR ("Can't spawn helper: %ld\n", pid); - return (0); - } - - lwt_migrate_to(0); - - while (helper_control == LWT_HELPER_IDLE) - our_cond_resched(); - - offset = min_offset = lwt_get_cpu_cycles_offset1(cpu, &elapsed); - min_elapsed = elapsed; - - for (i = 0; i < 1024; i++) { - offset = lwt_get_cpu_cycles_offset1(cpu, &elapsed); - if (elapsed < min_elapsed) { - min_offset = offset; - min_elapsed = elapsed; - } - } - - helper_control = LWT_HELPER_EXIT; - mb(); - while (helper_control != LWT_HELPER_EXITED) - ; - - CDEBUG (D_INFO, "cycle offset %d: min %ld, offset %ld\n", cpu, min_elapsed, min_offset); - return (min_offset); -} - int lwt_init () { @@ -313,10 +191,6 @@ lwt_init () } } - lwt_cpus[0].lwtc_offset = 0; - for (i = 1; i < num_online_cpus(); i++) - lwt_cpus[i].lwtc_offset = lwt_get_cpu_cycles_offset(i); - lwt_enabled = 1; mb(); -- 1.8.3.1