Discussion:
td_swvoltick
(too old to reply)
Eric van Gyzen
2018-01-12 19:31:41 UTC
Permalink
should_yield() compares thread::td_swvoltick to 'ticks' to determine
whether a thread is hogging and should yield. Since td_swvoltick
records 'ticks' /before/ the actual context switch, the calculation in
should_yield() includes any time that the thread was switched out. It
seems that should_yield() wants to know how long the thread has actually
been running. Therefore, td_swvoltick should record 'ticks' /after/
sched_switch() returns.

Does this make sense, or am I missing something?

If this makes sense, I would probably keep the current assignment in
mi_switch() and simply add a second assignment after the call to
sched_switch(). That way, db_show_thread will still show useful data
for sleeping threads. I would do the same for td_swinvolticks.

I'll be happy to make the change myself. I just want a sanity check
before I bother.

Thanks in advance,

Eric
Konstantin Belousov
2018-01-12 19:36:59 UTC
Permalink
Post by Eric van Gyzen
should_yield() compares thread::td_swvoltick to 'ticks' to determine
whether a thread is hogging and should yield. Since td_swvoltick
records 'ticks' /before/ the actual context switch, the calculation in
should_yield() includes any time that the thread was switched out. It
seems that should_yield() wants to know how long the thread has actually
been running. Therefore, td_swvoltick should record 'ticks' /after/
sched_switch() returns.
Does this make sense, or am I missing something?
Yes, it does make sense to me.
Post by Eric van Gyzen
If this makes sense, I would probably keep the current assignment in
mi_switch() and simply add a second assignment after the call to
sched_switch(). That way, db_show_thread will still show useful data
for sleeping threads. I would do the same for td_swinvolticks.
I'll be happy to make the change myself. I just want a sanity check
before I bother.
Thanks in advance,
Eric
_______________________________________________
https://lists.freebsd.org/mailman/listinfo/freebsd-current
Eric van Gyzen
2018-01-12 22:36:56 UTC
Permalink
Post by Konstantin Belousov
Post by Eric van Gyzen
should_yield() compares thread::td_swvoltick to 'ticks' to determine
whether a thread is hogging and should yield. Since td_swvoltick
records 'ticks' /before/ the actual context switch, the calculation in
should_yield() includes any time that the thread was switched out. It
seems that should_yield() wants to know how long the thread has actually
been running. Therefore, td_swvoltick should record 'ticks' /after/
sched_switch() returns.
Does this make sense, or am I missing something?
Yes, it does make sense to me.
Thanks, Kostik.

If anyone else is interested: https://reviews.freebsd.org/D13892
Post by Konstantin Belousov
Post by Eric van Gyzen
If this makes sense, I would probably keep the current assignment in
mi_switch() and simply add a second assignment after the call to
sched_switch(). That way, db_show_thread will still show useful data
for sleeping threads. I would do the same for td_swinvolticks.
I'll be happy to make the change myself. I just want a sanity check
before I bother.
Thanks in advance,
Eric
Loading...