/ proc / stat - o convidado é contado no tempo do usuário?

4

Eu tenho uma pergunta rápida. Na página man do / proc / stat, isso não está claro para mim: O horário do convidado e do guest_nice estão incluídos no horário do usuário em / proc / stat?

link no manual há apenas uma sugestão sobre / proc / [pid] / stat

link aqui, tanto quanto eu entendo eles estão falando sobre ambos / proc / stat e / proc / [pid] / stat

Alguém pode explicar isso? E esperamos apontar para qualquer fonte desta informação?

    
por KaP 08.01.2015 / 00:27

1 resposta

5

Da página do manual:

This includes guest time,
guest_time (time spent running a virtual CPU, see
below), so that applications that are not aware of
the guest time field do not lose that time from
their calculations.

Da fonte do kernel ( .../kernel/sched/cputime.c ) vemos que, quando o tempo do hóspede está sendo contabilizado, todo o tempo do hóspede também é adicionado ao tempo do usuário (e, da mesma forma, bom).

/*                                                                                
 * Account guest cpu time to a process.                                           
 * @p: the process that the cpu time gets accounted to                            
 * @cputime: the cpu time spent in virtual machine since the last update          
 * @cputime_scaled: cputime scaled by cpu frequency                               
 */
static void account_guest_time(struct task_struct *p, cputime_t cputime,
                               cputime_t cputime_scaled)
{
        u64 *cpustat = kcpustat_this_cpu->cpustat;

        /* Add guest time to process. */
        p->utime += cputime;
        p->utimescaled += cputime_scaled;
        account_group_user_time(p, cputime);
        p->gtime += cputime;

        /* Add guest time to cpustat. */
        if (task_nice(p) > 0) {
                cpustat[CPUTIME_NICE] += (__force u64) cputime;
                cpustat[CPUTIME_GUEST_NICE] += (__force u64) cputime;
        } else {
                cpustat[CPUTIME_USER] += (__force u64) cputime;
                cpustat[CPUTIME_GUEST] += (__force u64) cputime;
        }
}

O horário do usuário e o horário do convidado que serão exibidos via /proc/[pid]/stat são recuperados em .../fs/proc/array.c em do_task_stat() com chamadas para task_cputime_adjusted() e task_gtime() que retornam os campos utime e gtime de struct task_struct , respectivamente , embora o gtime possa ser ajustado:

cputime_t task_gtime(struct task_struct *t)
{
        unsigned int seq;
        cputime_t gtime;

        if (!vtime_accounting_enabled())
                return t->gtime;

        do {
                seq = read_seqcount_begin(&t->vtime_seqcount);

                gtime = t->gtime;
                if (t->vtime_snap_whence == VTIME_SYS && t->flags & PF_VCPU)
                        gtime += vtime_delta(t);

        } while (read_seqcount_retry(&t->vtime_seqcount, seq));

        return gtime;
}

[o código citado nesta postagem é de commit 29b4817 2016-08-07 Linus Torvalds Linux 4.8-rc1 ]

    
por 13.08.2016 / 19:35

Tags