GNU/Linux >> Znalost Linux >  >> Linux

Jak se počítá utilita iostatu?

iostat -x (Použil jsem starou verzi zdrojového kódu, abych to napsal, než jsem si to uvědomil) zobrazuje informace z /proc/diskstats (zde zdokumentováno) a /proc/stat (pro CPU časy; viz man proc(5)) (a několik dalších, ale to není důležité pro pochopení).

Příslušné úryvky kódu můžete vidět v odpovědi osgx, ale nedokázal jsem jim porozumět izolovaně, takže zde je rozšířené vysvětlení:

  • %util = blkio.ticks / deltams * 100%
  • deltams je čas uplynulý od posledního snímku v ms. Používá statistiky CPU z /proc/stat pravděpodobně proto, že dává lepší výsledky, než se spoléhat na systémový čas, ale nevím jistě. (Poznámka:z nějakého důvodu jsou časy děleny HZ , zatímco dokumentace uvádí, že je v USER_HZ , tomu nerozumím.)
  • blkio.ticks je "počet milisekund strávených prováděním I/O", z /proc/diskstats dokumenty:

    Field  9 -- # of I/Os currently in progress
      The only field that should go to zero. Incremented as requests are
      given to appropriate struct request_queue and decremented as they finish.
    Field 10 -- # of milliseconds spent doing I/Os
      This field increases so long as field 9 is nonzero.
    

    tj. chápu to tak, že ticks je počet tiků, kdy proběhl jakýkoli I/O požadavek (pro toto zařízení) vynásobený dobou mezi tiky.

Takže %util = 100% znamená, že pokaždé, když se jádro podívalo (u moderních jader je to 1000krát za sekundu, viz "HZ"), probíhal I/O požadavek.

Zde je výňatek z jiného příspěvku na iostatu:

[%util is] kolik času mělo úložné zařízení nevyřízenou práci (bylo zaneprázdněné).

Ve správných prostředích RAID je to spíše jako „kolik času měl alespoň jeden disk v poli RAID co dělat“. Záměrně zde vylučuji jakýkoli druh mezipaměti – pokud lze požadavek obsloužit z mezipaměti, je zcela zanedbatelná šance, že se na rozdíl od jiných hodnot zobrazí v %util.

Co to také znamená – subsystém RAID lze zatížit od 6,25 % (jeden disk dělá práci) do 100 % (všechny zaneprázdněné). To je v jediné hodnotě „100 %“ docela dobrý přehled, ne?


%util je ve zdrojovém kódu iostatu pojmenován jako zaneprázdněný:https://code.google.com/p/tester-higkoo/source/browse/trunk/Tools/iostat/iostat.c#380

Zaneprázdněnost se počítá jako procentuální poměr Ticks na deltams , omezeno na 100 %

busy = 100.0 * blkio.ticks / deltams; /* percentage! */
if (busy > 100.0) busy = 100.0;

DeltaMS je součet zatížení systému za časové období (čas uživatele + systémový čas + doba nečinnosti + iowait)/ ncpu.

double deltams = 1000.0 *
        ((new_cpu.user + new_cpu.system +
          new_cpu.idle + new_cpu.iowait) -
         (old_cpu.user + old_cpu.system +
          old_cpu.idle + old_cpu.iowait)) / ncpu / HZ;

Ticks - je Time of requests in queue za období

blkio.ticks = new_blkio[p].ticks
                - old_blkio[p].ticks;

V aktuálnější verzi sysstat je kód trochu jiný:http://sources.debian.net/src/sysstat/10.2.0-1/iostat.c#L959

/*       rrq/s wrq/s   r/s   w/s  rsec  wsec  rqsz  qusz await r_await w_await svctm %util */
printf(" %8.2f %8.2f %7.2f %7.2f %8.2f %8.2f %8.2f %8.2f %7.2f %7.2f %7.2f %6.2f %6.2f\n",
...
       /*
        * Again: Ticks in milliseconds.
        * In the case of a device group (option -g), shi->used is the number of
        * devices in the group. Else shi->used equals 1.
        */
       shi->used ? xds.util / 10.0 / (double) shi->used
                 : xds.util / 10.0);    /* shi->used should never be null here */

xds je vyplněno v compute_ext_disk_stats(&sdc, &sdp, itv, &xds); http://sources.debian.net/src/sysstat/10.2.0-1/common.c?hl=679#L679

/*
 * Macros used to display statistics values.
 *
 * HZ is 1024 on IA64 and % should be normalized to 100.
 */
#define S_VALUE(m,n,p)  (((double) ((n) - (m))) / (p) * HZ)

xds->util  = S_VALUE(sdp->tot_ticks, sdc->tot_ticks, itv);

A je tu plnění tot_ticks z iostat.c

  * @ioi        Current sample statistics.
  * @ioj        Previous sample statistics.
  * @itv        Interval of time.
  ...

sdc.tot_ticks = ioi->tot_ticks;
sdp.tot_ticks = ioj->tot_ticks;

tot_ticks jsou čteny z "statistiky sysfs pro aktuální blokové zařízení nebo oddíl " v read_sysfs_file_stat (iostat.c:487) a ioi a ioj jsou aktuální a předchozí statistiky.


Linux
  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak nainstalovat R 3.3.1 do vlastního adresáře?

  1. Jak změnit název hostitele?

  2. Jak zkontrolovat HZ v terminálu?

  3. Jak extrahuji obsah rpm?

  1. Jak se Linux dostal k sálovému počítači

  2. Jak používat příkaz basename?

  3. Jak vyvolat Hud?