--- deliantra/server/ext/map-scheduler.ext 2007/10/11 00:34:31 1.45 +++ deliantra/server/ext/map-scheduler.ext 2008/04/15 14:21:04 1.47 @@ -6,10 +6,10 @@ #our $DEACTIVATE_TIMEOUT = 20; # number of seconds after which maps get deactivated to save cpu our $SWAP_TIMEOUT = $cf::CFG{swap_timeout} || 300; # number of seconds after which inactive maps get swapped out -our $SCHEDULE_INTERVAL = $cf::CFG{schedule_interval} || 2; # time the map scheduler sleeps between runs +our $SCHEDULE_INTERVAL = $cf::CFG{schedule_interval} || 5; # time the map scheduler sleeps between runs our $SAVE_TIMEOUT = $cf::CFG{save_timeout} || 30; # save maps every n seconds our $SWAP_LOAD1 = $cf::CFG{swap_load1} || .1; # start aggressively swapping at this load -our $SWAP_LOAD2 = $cf::CFG{swap_load2} || .4; # swap as fast as possible at this load +our $SWAP_LOAD2 = $cf::CFG{swap_load2} || .6; # swap as fast as possible at this load cf::async_ext { $Coro::current->{desc} = "startup map scanner"; @@ -55,16 +55,12 @@ our $SCHEDULER = cf::async_ext { $Coro::current->{desc} = "map scheduler"; $Coro::current->prio (Coro::PRIO_MAX); - my $timer = Coro::Event->timer (data => cf::WF_AUTOCANCEL); while () { if ($cf::LOADAVG > $SWAP_LOAD2) { - $timer->interval (0.05); - $timer->next; cf::wait_for_tick; } else { - $timer->interval ($SCHEDULE_INTERVAL); - $timer->next; + Coro::EV::timer_once $SCHEDULE_INTERVAL; } # this weird form of iteration over values is used because @@ -86,7 +82,7 @@ # } if ($map->should_reset) { $map->reset; - } elsif ($map->in_memory == cf::MAP_IN_MEMORY) { + } elsif ($map->in_memory == cf::MAP_ACTIVE) { my $max_idle = cf::clamp +(cf::lerp $cf::LOADAVG, $SWAP_LOAD1, $SWAP_LOAD2, $SWAP_TIMEOUT, $cf::TICK * 1.5), $cf::TICK * 1.5, $SWAP_TIMEOUT;