ntpd: split out poll adjusting code
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
fb143f783d
commit
590a22cf8d
@ -1679,6 +1679,41 @@ poll_interval(int exponent)
|
|||||||
return interval;
|
return interval;
|
||||||
}
|
}
|
||||||
static NOINLINE void
|
static NOINLINE void
|
||||||
|
adjust_poll(int count)
|
||||||
|
{
|
||||||
|
G.polladj_count += count;
|
||||||
|
if (G.polladj_count > POLLADJ_LIMIT) {
|
||||||
|
G.polladj_count = 0;
|
||||||
|
if (G.poll_exp < MAXPOLL) {
|
||||||
|
G.poll_exp++;
|
||||||
|
VERB4 bb_error_msg("polladj: discipline_jitter:%f ++poll_exp=%d",
|
||||||
|
G.discipline_jitter, G.poll_exp);
|
||||||
|
}
|
||||||
|
} else if (G.polladj_count < -POLLADJ_LIMIT || (count < 0 && G.poll_exp >= BIGPOLL)) {
|
||||||
|
G.polladj_count = 0;
|
||||||
|
if (G.poll_exp > MINPOLL) {
|
||||||
|
llist_t *item;
|
||||||
|
|
||||||
|
G.poll_exp--;
|
||||||
|
/* Correct p->next_action_time in each peer
|
||||||
|
* which waits for sending, so that they send earlier.
|
||||||
|
* Old pp->next_action_time are on the order
|
||||||
|
* of t + (1 << old_poll_exp) + small_random,
|
||||||
|
* we simply need to subtract ~half of that.
|
||||||
|
*/
|
||||||
|
for (item = G.ntp_peers; item != NULL; item = item->link) {
|
||||||
|
peer_t *pp = (peer_t *) item->data;
|
||||||
|
if (pp->p_fd < 0)
|
||||||
|
pp->next_action_time -= (1 << G.poll_exp);
|
||||||
|
}
|
||||||
|
VERB4 bb_error_msg("polladj: discipline_jitter:%f --poll_exp=%d",
|
||||||
|
G.discipline_jitter, G.poll_exp);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
VERB4 bb_error_msg("polladj: count:%d", G.polladj_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static NOINLINE void
|
||||||
recv_and_process_peer_pkt(peer_t *p)
|
recv_and_process_peer_pkt(peer_t *p)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -1837,7 +1872,8 @@ recv_and_process_peer_pkt(peer_t *p)
|
|||||||
*/
|
*/
|
||||||
if (fabs(q->filter_offset) >= POLLDOWN_OFFSET) {
|
if (fabs(q->filter_offset) >= POLLDOWN_OFFSET) {
|
||||||
VERB4 bb_error_msg("offset:%+f > POLLDOWN_OFFSET", q->filter_offset);
|
VERB4 bb_error_msg("offset:%+f > POLLDOWN_OFFSET", q->filter_offset);
|
||||||
goto poll_down;
|
adjust_poll(-POLLADJ_LIMIT * 3);
|
||||||
|
rc = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1853,43 +1889,9 @@ recv_and_process_peer_pkt(peer_t *p)
|
|||||||
if (rc > 0 && G.offset_to_jitter_ratio <= POLLADJ_GATE) {
|
if (rc > 0 && G.offset_to_jitter_ratio <= POLLADJ_GATE) {
|
||||||
/* was += G.poll_exp but it is a bit
|
/* was += G.poll_exp but it is a bit
|
||||||
* too optimistic for my taste at high poll_exp's */
|
* too optimistic for my taste at high poll_exp's */
|
||||||
G.polladj_count += MINPOLL;
|
adjust_poll(MINPOLL);
|
||||||
if (G.polladj_count > POLLADJ_LIMIT) {
|
|
||||||
G.polladj_count = 0;
|
|
||||||
if (G.poll_exp < MAXPOLL) {
|
|
||||||
G.poll_exp++;
|
|
||||||
VERB4 bb_error_msg("polladj: discipline_jitter:%f ++poll_exp=%d",
|
|
||||||
G.discipline_jitter, G.poll_exp);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
VERB4 bb_error_msg("polladj: incr:%d", G.polladj_count);
|
adjust_poll(-G.poll_exp * 2);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
G.polladj_count -= G.poll_exp * 2;
|
|
||||||
if (G.polladj_count < -POLLADJ_LIMIT || G.poll_exp >= BIGPOLL) {
|
|
||||||
poll_down:
|
|
||||||
G.polladj_count = 0;
|
|
||||||
if (G.poll_exp > MINPOLL) {
|
|
||||||
llist_t *item;
|
|
||||||
|
|
||||||
G.poll_exp--;
|
|
||||||
/* Correct p->next_action_time in each peer
|
|
||||||
* which waits for sending, so that they send earlier.
|
|
||||||
* Old pp->next_action_time are on the order
|
|
||||||
* of t + (1 << old_poll_exp) + small_random,
|
|
||||||
* we simply need to subtract ~half of that.
|
|
||||||
*/
|
|
||||||
for (item = G.ntp_peers; item != NULL; item = item->link) {
|
|
||||||
peer_t *pp = (peer_t *) item->data;
|
|
||||||
if (pp->p_fd < 0)
|
|
||||||
pp->next_action_time -= (1 << G.poll_exp);
|
|
||||||
}
|
|
||||||
VERB4 bb_error_msg("polladj: discipline_jitter:%f --poll_exp=%d",
|
|
||||||
G.discipline_jitter, G.poll_exp);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
VERB4 bb_error_msg("polladj: decr:%d", G.polladj_count);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user