/* * Thread group CPU time accounting.
*/ void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times); void thread_group_sample_cputime(struct task_struct *tsk, u64 *samples);
/* * The following are functions that support scheduler-internal time accounting. * These functions are generally called at the timer tick. None of this depends * on CONFIG_SCHEDSTATS.
*/
/** * get_running_cputimer - return &tsk->signal->cputimer if cputimers are active * * @tsk: Pointer to target task.
*/ #ifdef CONFIG_POSIX_TIMERS staticinline struct thread_group_cputimer *get_running_cputimer(struct task_struct *tsk)
{ struct thread_group_cputimer *cputimer = &tsk->signal->cputimer;
/* * Check whether posix CPU timers are active. If not the thread * group accounting is not active either. Lockless check.
*/ if (!READ_ONCE(tsk->signal->posix_cputimers.timers_active)) return NULL;
/* * After we flush the task's sum_exec_runtime to sig->sum_sched_runtime * in __exit_signal(), we won't account to the signal struct further * cputime consumed by that task, even though the task can still be * ticking after __exit_signal(). * * In order to keep a consistent behaviour between thread group cputime * and thread group cputimer accounting, lets also ignore the cputime * elapsing after __exit_signal() in any thread group timer running. * * This makes sure that POSIX CPU clocks and timers are synchronized, so * that a POSIX CPU timer won't expire while the corresponding POSIX CPU * clock delta is behind the expiring timer value.
*/ if (unlikely(!tsk->sighand)) return NULL;
/** * account_group_user_time - Maintain utime for a thread group. * * @tsk: Pointer to task structure. * @cputime: Time value by which to increment the utime field of the * thread_group_cputime structure. * * If thread group time is being maintained, get the structure for the * running CPU and update the utime field there.
*/ staticinlinevoid account_group_user_time(struct task_struct *tsk,
u64 cputime)
{ struct thread_group_cputimer *cputimer = get_running_cputimer(tsk);
/** * account_group_system_time - Maintain stime for a thread group. * * @tsk: Pointer to task structure. * @cputime: Time value by which to increment the stime field of the * thread_group_cputime structure. * * If thread group time is being maintained, get the structure for the * running CPU and update the stime field there.
*/ staticinlinevoid account_group_system_time(struct task_struct *tsk,
u64 cputime)
{ struct thread_group_cputimer *cputimer = get_running_cputimer(tsk);
/** * account_group_exec_runtime - Maintain exec runtime for a thread group. * * @tsk: Pointer to task structure. * @ns: Time value by which to increment the sum_exec_runtime field * of the thread_group_cputime structure. * * If thread group time is being maintained, get the structure for the * running CPU and update the sum_exec_runtime field there.
*/ staticinlinevoid account_group_exec_runtime(struct task_struct *tsk, unsignedlonglong ns)
{ struct thread_group_cputimer *cputimer = get_running_cputimer(tsk);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.