Lines Matching +full:idle +full:- +full:touch

1 // SPDX-License-Identifier: GPL-2.0-only
20 * task when irq is in progress while we read rq->clock. That is a worthy
40 u64 *cpustat = kcpustat_this_cpu->cpustat; in irqtime_account_delta()
42 u64_stats_update_begin(&irqtime->sync); in irqtime_account_delta()
44 irqtime->total += delta; in irqtime_account_delta()
45 irqtime->tick_delta += delta; in irqtime_account_delta()
46 u64_stats_update_end(&irqtime->sync); in irqtime_account_delta()
64 delta = sched_clock_cpu(cpu) - irqtime->irq_start_time; in irqtime_account_irq()
65 irqtime->irq_start_time += delta; in irqtime_account_irq()
66 pc = irq_count() - offset; in irqtime_account_irq()
85 delta = min(irqtime->tick_delta, maxtime); in irqtime_tick_accounted()
86 irqtime->tick_delta -= delta; in irqtime_tick_accounted()
106 * Since all updates are sure to touch the root cgroup, we in task_group_account_field()
107 * get ourselves ahead and touch it first. If the root cgroup in task_group_account_field()
126 p->utime += cputime; in account_user_time()
145 u64 *cpustat = kcpustat_this_cpu->cpustat; in account_guest_time()
148 p->utime += cputime; in account_guest_time()
150 p->gtime += cputime; in account_guest_time()
172 p->stime += cputime; in account_system_index_time()
192 if ((p->flags & PF_VCPU) && (irq_count() - hardirq_offset == 0)) { in account_system_time()
197 if (hardirq_count() - hardirq_offset) in account_system_time()
213 u64 *cpustat = kcpustat_this_cpu->cpustat; in account_steal_time()
219 * Account for idle time.
220 * @cputime: the CPU time spent in idle wait
224 u64 *cpustat = kcpustat_this_cpu->cpustat; in account_idle_time()
227 if (atomic_read(&rq->nr_iowait) > 0) in account_idle_time()
242 __schedstat_add(p->stats.core_forceidle_sum, delta); in __account_forceidle_time()
260 steal -= this_rq()->prev_steal_time; in steal_account_process_time()
263 this_rq()->prev_steal_time += steal; in steal_account_process_time()
283 accounted += irqtime_tick_accounted(max - accounted); in account_other_time()
291 return t->se.sum_exec_runtime; in read_sum_exec_runtime()
301 ns = t->se.sum_exec_runtime; in read_sum_exec_runtime()
309 * Accumulate raw cputime values of dead tasks (sig->[us]time) and live
314 struct signal_struct *sig = tsk->signal; in thread_group_cputime()
336 flags = read_seqbegin_or_lock_irqsave(&sig->stats_lock, &seq); in thread_group_cputime()
337 times->utime = sig->utime; in thread_group_cputime()
338 times->stime = sig->stime; in thread_group_cputime()
339 times->sum_exec_runtime = sig->sum_sched_runtime; in thread_group_cputime()
343 times->utime += utime; in thread_group_cputime()
344 times->stime += stime; in thread_group_cputime()
345 times->sum_exec_runtime += read_sum_exec_runtime(t); in thread_group_cputime()
349 } while (need_seqretry(&sig->stats_lock, seq)); in thread_group_cputime()
350 done_seqretry_irqrestore(&sig->stats_lock, seq, flags); in thread_group_cputime()
362 * - pending hardirq update
363 * - pending softirq update
364 * - user_time
365 * - idle_time
366 * - system time
367 * - check for guest_time
368 * - else account as system_time
373 * p->stime and friends are only updated on system time and not on irq
382 * When returning from idle, many ticks can get accounted at in irqtime_account_process_tick()
385 * idle, or potentially user or system time. Due to rounding, in irqtime_account_process_tick()
392 cputime -= other; in irqtime_account_process_tick()
398 * Also, p->stime needs to be updated for ksoftirqd. in irqtime_account_process_tick()
403 } else if (p == this_rq()->idle) { in irqtime_account_process_tick()
405 } else if (p->flags & PF_VCPU) { /* System time or guest time */ in irqtime_account_process_tick()
442 unsigned int pc = irq_count() - offset; in vtime_account_irq()
459 *ut = curr->utime; in cputime_adjust()
460 *st = curr->stime; in cputime_adjust()
465 *ut = p->utime; in task_cputime_adjusted()
466 *st = p->stime; in task_cputime_adjusted()
505 cputime -= steal; in account_process_tick()
509 else if ((p != this_rq()->idle) || (irq_count() != HARDIRQ_OFFSET)) in account_process_tick()
516 * Account multiple ticks of idle time.
534 cputime -= steal; in account_idle_ticks()
545 * under-optimistic, matching the real user and system cputime with a variable
565 raw_spin_lock_irqsave(&prev->lock, flags); in cputime_adjust()
566 rtime = curr->sum_exec_runtime; in cputime_adjust()
570 * - rtime isn't monotonic after all (a bug); in cputime_adjust()
571 * - we got reordered by the lock. in cputime_adjust()
576 if (prev->stime + prev->utime >= rtime) in cputime_adjust()
579 stime = curr->stime; in cputime_adjust()
580 utime = curr->utime; in cputime_adjust()
610 * utime_i+1 = rtime_i+1 - stime_i in cputime_adjust()
611 * = rtime_i+1 - (rtime_i - utime_i) in cputime_adjust()
612 * = (rtime_i+1 - rtime_i) + utime_i in cputime_adjust()
615 if (stime < prev->stime) in cputime_adjust()
616 stime = prev->stime; in cputime_adjust()
617 utime = rtime - stime; in cputime_adjust()
623 if (utime < prev->utime) { in cputime_adjust()
624 utime = prev->utime; in cputime_adjust()
625 stime = rtime - utime; in cputime_adjust()
628 prev->stime = stime; in cputime_adjust()
629 prev->utime = utime; in cputime_adjust()
631 *ut = prev->utime; in cputime_adjust()
632 *st = prev->stime; in cputime_adjust()
633 raw_spin_unlock_irqrestore(&prev->lock, flags); in cputime_adjust()
639 .sum_exec_runtime = p->se.sum_exec_runtime, in task_cputime_adjusted()
644 cputime_adjust(&cputime, &p->prev_cputime, ut, st); in task_cputime_adjusted()
653 cputime_adjust(&cputime, &p->signal->prev_cputime, ut, st); in thread_group_cputime_adjusted()
663 if (clock < vtime->starttime) in vtime_delta()
666 return clock - vtime->starttime; in vtime_delta()
682 WARN_ON_ONCE(vtime->state == VTIME_INACTIVE); in get_vtime_delta()
683 vtime->starttime += delta; in get_vtime_delta()
685 return delta - other; in get_vtime_delta()
691 vtime->stime += get_vtime_delta(vtime); in vtime_account_system()
692 if (vtime->stime >= TICK_NSEC) { in vtime_account_system()
693 account_system_time(tsk, irq_count(), vtime->stime); in vtime_account_system()
694 vtime->stime = 0; in vtime_account_system()
701 vtime->gtime += get_vtime_delta(vtime); in vtime_account_guest()
702 if (vtime->gtime >= TICK_NSEC) { in vtime_account_guest()
703 account_guest_time(tsk, vtime->gtime); in vtime_account_guest()
704 vtime->gtime = 0; in vtime_account_guest()
712 if (vtime->state == VTIME_GUEST) in __vtime_account_kernel()
720 struct vtime *vtime = &tsk->vtime; in vtime_account_kernel()
725 write_seqcount_begin(&vtime->seqcount); in vtime_account_kernel()
727 write_seqcount_end(&vtime->seqcount); in vtime_account_kernel()
732 struct vtime *vtime = &tsk->vtime; in vtime_user_enter()
734 write_seqcount_begin(&vtime->seqcount); in vtime_user_enter()
736 vtime->state = VTIME_USER; in vtime_user_enter()
737 write_seqcount_end(&vtime->seqcount); in vtime_user_enter()
742 struct vtime *vtime = &tsk->vtime; in vtime_user_exit()
744 write_seqcount_begin(&vtime->seqcount); in vtime_user_exit()
745 vtime->utime += get_vtime_delta(vtime); in vtime_user_exit()
746 if (vtime->utime >= TICK_NSEC) { in vtime_user_exit()
747 account_user_time(tsk, vtime->utime); in vtime_user_exit()
748 vtime->utime = 0; in vtime_user_exit()
750 vtime->state = VTIME_SYS; in vtime_user_exit()
751 write_seqcount_end(&vtime->seqcount); in vtime_user_exit()
756 struct vtime *vtime = &tsk->vtime; in vtime_guest_enter()
764 write_seqcount_begin(&vtime->seqcount); in vtime_guest_enter()
766 tsk->flags |= PF_VCPU; in vtime_guest_enter()
767 vtime->state = VTIME_GUEST; in vtime_guest_enter()
768 write_seqcount_end(&vtime->seqcount); in vtime_guest_enter()
774 struct vtime *vtime = &tsk->vtime; in vtime_guest_exit()
776 write_seqcount_begin(&vtime->seqcount); in vtime_guest_exit()
778 tsk->flags &= ~PF_VCPU; in vtime_guest_exit()
779 vtime->state = VTIME_SYS; in vtime_guest_exit()
780 write_seqcount_end(&vtime->seqcount); in vtime_guest_exit()
786 account_idle_time(get_vtime_delta(&tsk->vtime)); in vtime_account_idle()
791 struct vtime *vtime = &prev->vtime; in vtime_task_switch_generic()
793 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
794 if (vtime->state == VTIME_IDLE) in vtime_task_switch_generic()
798 vtime->state = VTIME_INACTIVE; in vtime_task_switch_generic()
799 vtime->cpu = -1; in vtime_task_switch_generic()
800 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
802 vtime = &current->vtime; in vtime_task_switch_generic()
804 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
806 vtime->state = VTIME_IDLE; in vtime_task_switch_generic()
807 else if (current->flags & PF_VCPU) in vtime_task_switch_generic()
808 vtime->state = VTIME_GUEST; in vtime_task_switch_generic()
810 vtime->state = VTIME_SYS; in vtime_task_switch_generic()
811 vtime->starttime = sched_clock(); in vtime_task_switch_generic()
812 vtime->cpu = smp_processor_id(); in vtime_task_switch_generic()
813 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
818 struct vtime *vtime = &t->vtime; in vtime_init_idle()
822 write_seqcount_begin(&vtime->seqcount); in vtime_init_idle()
823 vtime->state = VTIME_IDLE; in vtime_init_idle()
824 vtime->starttime = sched_clock(); in vtime_init_idle()
825 vtime->cpu = cpu; in vtime_init_idle()
826 write_seqcount_end(&vtime->seqcount); in vtime_init_idle()
832 struct vtime *vtime = &t->vtime; in task_gtime()
837 return t->gtime; in task_gtime()
840 seq = read_seqcount_begin(&vtime->seqcount); in task_gtime()
842 gtime = t->gtime; in task_gtime()
843 if (vtime->state == VTIME_GUEST) in task_gtime()
844 gtime += vtime->gtime + vtime_delta(vtime); in task_gtime()
846 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_gtime()
858 struct vtime *vtime = &t->vtime; in task_cputime()
864 *utime = t->utime; in task_cputime()
865 *stime = t->stime; in task_cputime()
871 seq = read_seqcount_begin(&vtime->seqcount); in task_cputime()
873 *utime = t->utime; in task_cputime()
874 *stime = t->stime; in task_cputime()
876 /* Task is sleeping or idle, nothing to add */ in task_cputime()
877 if (vtime->state < VTIME_SYS) in task_cputime()
887 if (vtime->state == VTIME_SYS) in task_cputime()
888 *stime += vtime->stime + delta; in task_cputime()
890 *utime += vtime->utime + delta; in task_cputime()
891 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_cputime()
898 int state = READ_ONCE(vtime->state); in vtime_state_fetch()
904 if (vtime->cpu != cpu && vtime->cpu != -1) in vtime_state_fetch()
905 return -EAGAIN; in vtime_state_fetch()
917 return -EAGAIN; in vtime_state_fetch()
924 if (vtime->state == VTIME_USER) in kcpustat_user_vtime()
925 return vtime->utime + vtime_delta(vtime); in kcpustat_user_vtime()
926 else if (vtime->state == VTIME_GUEST) in kcpustat_user_vtime()
927 return vtime->gtime + vtime_delta(vtime); in kcpustat_user_vtime()
936 struct vtime *vtime = &tsk->vtime; in kcpustat_field_vtime()
942 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_field_vtime()
960 *val += vtime->stime + vtime_delta(vtime); in kcpustat_field_vtime()
972 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
976 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
981 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_field_vtime()
989 u64 *cpustat = kcpustat->cpustat; in kcpustat_field()
1003 curr = rcu_dereference(rq->curr); in kcpustat_field()
1024 struct vtime *vtime = &tsk->vtime; in kcpustat_cpu_fetch_vtime()
1032 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_cpu_fetch_vtime()
1039 cpustat = dst->cpustat; in kcpustat_cpu_fetch_vtime()
1041 /* Task is sleeping, dead or idle, nothing to add */ in kcpustat_cpu_fetch_vtime()
1052 cpustat[CPUTIME_SYSTEM] += vtime->stime + delta; in kcpustat_cpu_fetch_vtime()
1055 cpustat[CPUTIME_NICE] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1057 cpustat[CPUTIME_USER] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1061 cpustat[CPUTIME_GUEST_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1062 cpustat[CPUTIME_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1064 cpustat[CPUTIME_GUEST] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1065 cpustat[CPUTIME_USER] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1068 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_cpu_fetch_vtime()
1090 curr = rcu_dereference(rq->curr); in kcpustat_cpu_fetch()