
CPU QoSǽ Readme
                                        MontaVista Software
--------------------------------------------------
ܼ
  󥹥ȡ
    (1) ͥ륽μ
    (2) CPU QoS ǽѥåեμ
    (3) kernel
    (4) 饤֥
    (5) ץץ

  ץ륳ޥ
    (1)  cabi_create
    (2)  cabi_destroy
    (3)  cabi_bind
    (4)  cabi_unbind
    (5)  cabi_get
    (6)  cabi_set
    (7)  cabi_exec_bind
    (8)  cabi_overload_create
    (9)  cabi_overload_destroy
    (10) cabi_create_bind
    (11) procեˤĤ

ץ륳ޥɤȤäܵǽα
    (1) ץࣱ(test01)ץࣲ(test02)
        CPUΨפ30%¤硣
    (2) ƥCPUΨ95%ۤ硢
        СΤԤ硣
--------------------------------------------------

󥹥ȡ
  (1) ͥ륽μ
    URLΥȤ饫ͥС[2.4.20]
    ɤŬʥǥ쥯ȥ˥ɤƤ
      URL  : http://www.kernel.org/pub/linux/kernel/v2.4/
      File : linux-2.4.20.tar.bz2

  (2) CPU QoS ǽѥåեμ
    ʲΣĤΥѥåեɤƤ
      <1> cabi-common_ver002.patch    : CPU QoSǽɲåѥå
                                       ʥƥ¸
      <2> cabi-x86_ver002.patch       : CPU QoSǽɲåѥå
                                       x86ƥ¸
      <3> cabi-examples_ver002.patch  : ץץ

  (3) kernel
    ɤե뤫饫ͥ륤᡼ޤǤ
    ޤ
    () ƤϡʲΥե빽ޤ
        /usr/src/QoS/lnux-2.4.20.tar.bz2
        /usr/src/QoS/cabi-common_ver002.patch
        /usr/src/QoS/cabi-x86_ver002.patch
        /usr/src/QoS/cabi-examples_ver002.patch

    <1> (1)Ǽͥ륽Ÿ롣
       ---------------------------------
        () $ cd /usr/src/QoS
             $ tar jxvf lnux-2.4.20.tar.bz2
       ---------------------------------

    <2> Ÿɤ CPU QoS ѥåŬ롣
        cabi-common_ver002.patchcabi-x86_ver002.patch Ŭ
        CPU QoS Υɤɲäޤ
       ---------------------------------
        () $ cd /usr/src/QoS/linux-2.4.20
             $ patch -p1 < ../cabi-common_ver002.patch
              patching file Makefile
              patching file drivers/Makefile
              patching file drivers/cabi/%%386CABI.txt
              patching file drivers/cabi/Makefile
              patching file drivers/cabi/cabi_account.c
              patching file drivers/cabi/cabi_init.c
              patching file drivers/cabi/cabi_isr.c
              patching file drivers/cabi/cabi_procfs.c
              patching file drivers/cabi/cabi_sched.c
              patching file drivers/cabi/cabi_signal.c
              patching file drivers/cabi/cabi_timer.c
              patching file drivers/cabi/lib/Makefile
              patching file drivers/cabi/lib/cabi_account_bind_pgid.c
              patching file drivers/cabi/lib/cabi_account_bind_pid.c
              patching file drivers/cabi/lib/cabi_account_create.c
              patching file drivers/cabi/lib/cabi_account_destroy.c
              patching file drivers/cabi/lib/cabi_account_get.c
              patching file drivers/cabi/lib/cabi_account_set.c
              patching file drivers/cabi/lib/cabi_account_unbind.c
              patching file drivers/cabi/lib/cabi_create_bind.c
              patching file drivers/cabi/lib/cabi_overload_create.c
              patching file drivers/cabi/lib/cabi_overload_destroy.c
              patching file drivers/cabi/mkdep
              patching file include/cabi/cabi.h
              patching file include/cabi/cabi_error.h
              patching file include/linux/sched.h
              patching file include/linux/sys.h
              patching file init/main.c
              patching file kernel/exit.c
              patching file kernel/fork.c
              patching file kernel/sched.c

             $ patch -p1 < ../cabi-x86_ver002.patch
              patching file arch/i386/config.in
              patching file arch/i386/kernel/entry.S
              patching file arch/i386/lib/Makefile
              patching file arch/i386/lib/udivdi3.S
              patching file include/asm-i386/unistd.h
       ---------------------------------

    <3> ͥ륳ե졼
        make menuconfigפ¹Ԥ
        CPU Accounting and Binding Interface supportפ
        ͭˤ롣
       ---------------------------------
        () $ cd /usr/src/QoS/linux-2.4.20
             $ make menuconfig
             [General Setup]
                  |--> [CPU Accounting and Binding Interface support]
                [*] ˤ
               < Exit > --> < Exit > --> < Yes >
               򤷡¸롣
       ---------------------------------

    <4> make μ¸
        Kernel make  bzImage ꤷƼ¹ԤƤ
       ---------------------------------
        () $ cd /usr/src/QoS/linux-2.4.20
             $ make dep clean bzImage
       ---------------------------------

    <5> linuxͥ
        줿linux-2.4.20/arch/i386/bzImageפȤä
        ֡Ȥ褦linuxԤޤ

  (4) 饤֥
    桼ץफ CPU QoS ǽ¹Ԥ뤿Υ饤֥
    ޤ (3) cabi-common_ver002.patchŬȡ
    linux-2.4.20/drivers/cabi/lib ǥ쥯ȥʲ˥饤֥
    ɤɲäޤΥǥ쥯ȥޤǰươ
    makeסmake install ¹Ԥޤ
    make installפ¹Ԥ /libǥ쥯ȥ˺ libcabi.a
    ԡޤ
       ---------------------------------
        () $ cd /usr/src/QoS/linux-2.4.20/drivers/cabi/lib
             $ make
             $ make install
       ---------------------------------

  (5) ץץ
    cabi-examples_ver002.patch Ŭ뤳Ȥǡץץब
    linux-2.4.20/drivers/cabi/examples ǥ쥯ȥʲɲäޤ
       ---------------------------------
        () $ cd /usr/src/QoS/linux-2.4.20
             $ patch -p1 < ../cabi-examples_ver002.patch
              patching file drivers/cabi/examples/Makefile
              patching file drivers/cabi/examples/cb_bind.c
              patching file drivers/cabi/examples/cb_create.c
              patching file drivers/cabi/examples/cb_create_bind.c
              patching file drivers/cabi/examples/cb_destroy.c
              patching file drivers/cabi/examples/cb_exec_bind.c
              patching file drivers/cabi/examples/cb_get.c
              patching file drivers/cabi/examples/cb_overload_create.c
              patching file drivers/cabi/examples/cb_overload_destroy.c
              patching file drivers/cabi/examples/cb_set.c
              patching file drivers/cabi/examples/cb_unbind.c
       ---------------------------------
    linux-2.4.20/drivers/cabi/examples ǥ쥯ȥޤǰươ
    make ¹ԤƤ
    եץץ /lib/libcabi.a Ѥޤ
          ɬ(4)¹Ԥ make ¹ԤƤ
       ---------------------------------
        () $ cd drivers/cabi/examples
             $ make
       ---------------------------------
    make ¹Ըϰʲμ¹ԥե뤬ޤ
        cabi_create           : AO(Accounting Object)ޤ
        cabi_destroy          : AOޤ
        cabi_bind             : ץAO˥Хɤޤ
        cabi_unbind           : ץAO饢Хɤޤ
        cabi_get              : AOɽޤ
        cabi_set              : AOѹޤ
        cabi_exec_bind        : ץ¹ԤAO˥Хɤޤ
        cabi_overload_create  : Сɵǽ¹Ԥޤ
        cabi_overload_destroy : Сɵǽλޤ
        cabi_create_bind      : AOץХɤޤ


ץ륳ޥ
  嵭- (5) ֥ץץפǺޥɤ
  ˡޤ

  (1) cabi_create : AO򿷵ޤ
    []
       [block] :
         Usage: cabi_create [cpu_time(us)] [cpu_period(us)]
       [signal] :
         Usage: cabi_create [cpu_time(us)] [cpu_period(us)] [pid] [sig] [flag]
    []
       [cpu_time(us)]   : ¹Բǽ (usec)
       [cpu_period(us)] :  (usec)
       [pid]            : (signalΤͭ) ʥPID
       [sig]            : (signalΤͭ) ʥֹ
       [flag]           : ̤ (Ǥդ[int]ꤹ뤳(signalΤ))
    []
       CPUΨƻ뤹뤿 Accounting Object (AO) 
       CABI֥ID򥳥󥽡ɽޤ
           ---------------------------------
             (ɽ)
               Create CABI object...
               account set create.(1) object_id [2]
           ---------------------------------
       ƥϡꤵ줿[][¹Բǽ]Ȥäơ
       ʲη׻CPUΨ򻻽Фޤ
           [cpu_time] / [cpu_period] * 100 (%)
       AO˴Ϣդ줿ʥХɤ줿˥ץϡ[]ǡ
       ιCPUΨͤۤ硢block ޤϡsignal 
       ꤷλĤμ⡢¹Ԥޤ
      (block ξ)
          Хɤ줿ƤΥץμ¹Ԥ֥åޤ
          ֤ˤʤäݡ֥åޤ
      (signal ξ)
          [pid]˻ꤷץ[sig]ͤsignalޤ
          [pid]˻ꤹץϡsignalˡ
          餫νԤץ桼ɬפޤ
        ˸[flag]ϡƥǤ̤ѤǤꤷʤ
              ܥץץΰåǥ顼ˤʤäƤޤᡢ
              Ǥդ[int]ꤹɬפޤ
    []
       ʲAO硣
                                  [1]
           CPUΨ                      [30%]
           λ                       [block]
             $ ./cabi_create 300000 1000000

       ʲAO硣
                                  [2]
           CPUΨ                      [50%]
           λ                       [signal]
           ʥץPID  [132]
           ʥֹ               [8]
             $ ./cabi_create 1000000 2000000 132 8 0


  (2) cabi_destroy : AOޤ
    []
       Usage: cabi_destroy [object_id]
    []
       [object_id] : CABI֥ID
    []
       AOޤ
       ץХɤƤAOϺǤޤ
    []
       [object_id] = 2 AO硣
         $ ./cabi_destroy 2


  (3) cabi_bind : ץAO˥Хɤޤ
    []
       Usage: cabi_bind [object_id] [pid]
    []
       [object_id] : CABI֥ID
       [pid]       : ץID
    []
       ץAO˴ϢդޤʥХɤޤˡ
       AOCABI֥ID[object_id]ץID[pid]
       ꤹ뤳Ȥǡ[object_id][pid]Хɤޤ
       ޤХɤ줿ץҥץϡ
       ưŪ˿ƥץХɤƤAO˥Хɤޤ
       ˤ줫AO˥ХɤƤץϡ
       ̤AO˥ХɤǤޤ
    []
       [pid] = 154 Υץ [object_id] = 10 AO
       Хɤ硣
         $ ./cabi_bind 10 154


  (4) cabi_unbind : ץAO饢Хɤޤ
    []
       Usage: cabi_unbind [pid]
    []
       [pid] : ץID
    []
       ץAOȤδϢդ򳰤ޤʥХɤޤˡ
       AO˴ϢդƤץID[pid]˻ꤹ뤳Ȥǡ
       ХɤƤAO[pid]򥢥Хɤޤ
       ޤAO˥ХɤƤץλ줿硢
       ưŪAO饢ХɤޤλϡưǤ
       Хɽɬפޤ
    []
       [pid] = 154 ΥץAO饢Хɤ硣
         $ ./cabi_unbind 154


  (5) cabi_get : AOɽޤ
    []
       Usage: cabi_get [object_id]
    []
       [object_id] : CABI֥ID
    []
       AOθߤɽޤ
           ---------------------------------
             (ɽ)
               object_id (3)
               TERM_ACT (1)
               CPU_TIME (0 sec 200000000 nsec) /CPU_PERIOD (1 sec 00 nsec)
               CPU_RATIO (20.00 %)
             ---------
             ()
               object_id  : ȤƤCABI֥ID
               TERM_ACT   : λblock = 1, signal = 2
               CPU_TIME   : CPU¹Բǽ
               CPU_PERIOD : 
               CPU_RATIO  : CPUΨ
           ---------------------------------
       ()
          ܥޥɤϥСAOˤĤƤɽбƤޤ
          
    []
       [object_id] = 3 AOɽ硣
         $ ./cabi_get 3


  (6) cabi_set : AOѹޤ
    []
       [CPUΨΤѹ]
         Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)]
       [block ѹ]
         Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)] [term_act]
       [signal ѹ]
         Usage: cabi_set [object_id] [cpu_time(us)] [cpu_period(us)] [term_act] [pid] [sig] [flag]
    []
       [object_id]      : CABI֥ID
       [cpu_time(us)]   : ¹Բǽ (usec)
       [cpu_period(us)] :  (usec)
       [term_act]       : λ (block=1, signal=2)
       [pid]            : (signalΤͭ) ʥPID
       [sig]            : (signalΤͭ) ʥֹ
       [flag]           : ̤ (Ǥդ[int]ꤹ뤳(signalΤ))
    []
       AOѹޤ
       ߤAO[CPUΨ][λ]ѹǤޤ
       [CPUΨΤѹ]Ǥϡλϸߤ꤫ѹޤ
       [term_act] = 1 ξ硢[pid][sig][flag] ꤷƤ̵뤵ޤ
       ʥ顼ˤϤʤޤ󡣡
       ѥ᡼ϡ(1) cabi_createפ򻲹ͤˤƤ
    []
       [object_id] = 5 AOʲѹ硣
                                  [2]
           CPUΨ                      [20%]
           (λѹʤ)
             $ ./cabi_set 5 400000 2000000

       [object_id] = 20 AOʲѹ硣
           λ                       [block]
                                  [5]
           CPUΨ                      [50%]
             $ ./cabi_set 20 2500000 5000000 1

       [object_id] = 13 AOʲѹ硣
           λ                       [signal]
                                  [1]
           CPUΨ                      [30%]
           ʥץPID  [304]
           ʥֹ               [12]
             $ ./cabi_set 13 300000 1000000 2 304 12 0


  (7) cabi_exec_bind : ץ¹ԤAO˥Хɤޤ
    []
       Usage: cabi_exec_bind [object_id] [program...]
    []
       [object_id]      : CABI֥ID
       [program...]     : ץ
    []
       ץ¹ԤAO˥Хɤޤ
       [object_id]ˤϥХɤAOCABI֥IDꤷ
       [program...]ꤷޤץ˵ư˰ɬפʾϡ
       ޤƻꤷޤ
    []
       MPEG Player"mplayer"ư[object_id] = 2 AO
       Хɤ硣
         $ ./cabi_exec_bind 2 mplayer test.mpg

  (8) cabi_overload_create : Сɵǽ¹Ԥޤ
    []
       Usage: cabi_overload_create [overload_time(us)] [ovlerload_period(us)]
    []
       [overload_time(us)]   : ¹ץμ¹Բǽ (usec)
       [overload_period(us)] :  (usec)
    []
       ƥΤCPUΨƻ뤹륪Сɵǽ¹Ԥޤ
       ƥϡꤵ줿[][¹Բǽ]Ȥäơ
       ʲη׻ǥƥΤCPUΨ򻻽Фޤ
           [overload_time] / [overload_period] * 100 (%)
       嵭ȤäơСAOCABI֥ID=1ˤ
       ƥΤCPUΨƻ뤷ޤ
       ƥΥץCPUΨꤷCPUΨۤϡ
       AOsignalǽƱͤ˥ʥΤޤ
       ܥץץǤϡޥɵưˡ
       Adminץcabi_overload_createפ󤵤
       ƥCPUΨСɤ硢ΥץФơ
       ʥֹ18פΥʥޤ
    []
       ֤1äǡƥΤCPUΨ95%ۤ硢
       СΤԤ褦ꤹ硣
         $ ./cabi_overload_create 950000 1000000


  (9) cabi_overload_destroy : Сɵǽλޤ
    []
       Usage: cabi_overload_destroy
    []
       ʤ
    []
       Сɤλޤ
    []
       $ ./cabi_overload_destroy


  (10) cabi_create_bind : AOץХɤޤ
    []
       Usage: cabi_create_bind
    []
       ʤ
    []
       ܥץץϡ饤֥ؿcabi_create_bind()פ
       åѤ˺ץǤ
       ܥץ¹Ԥ硢ʲAOܥץ
       PIDѤƥХɽԤޤ
           λ                       [block]
                                  [100ߥ]
           CPUΨ                      [20%]
       ܥץľ˽λΤǡХɤƤޤ
       AOĤޤ
    []
       $ ./cabi_create_bind


  (11) procեˤĤ
    AO硢/proc/cabi/<CABI֥ID> ǥ쥯ȥʲ
    ʲΥե뤬ޤ
        status   : AOơե
        bindpid  : ХɤƤPID
        term_act : λ


ץ륳ޥɤȤäܵǽα
  (1) ץࣱ(test01)ץࣲ(test02)
      CPUΨפ30%¤硣
    <1> 30%AOޤ֤1äȤޤ
         $ ./cabi_create 300000 1000000

         Create CABI object...
         account set create.(1) object_id [2]

    <2> ץ൯ưȤäˡ(1) ǺAO˥Хɤޤ
         $ ./cabi_exec_bind 2 test01
         $ ./cabi_exec_bind 2 test02

    嵭ǡtest01test02 AO(2)˥Хɤ졢CPUѤ¤ޤ
    2ĤΥץι׻Ψϡ30%ʲˤʤޤ
    topޥɤʤɤǳǧƤ


  (2) ƥCPUΨ95%ۤ硢
      СΤԤ硣
    <1> ץץcabi_overload_createפȤäơ
        Сɵǽͭˤޤ
        λŬʼ֤ޤ
       Ȥơ=1äǺޤ
         $ ./cabi_overload_create 950000 1000000

    嵭ǡСɵǽͭˤʤޤ
    ޤܥץץǤϡСɻsignalΤ
    AdminץforkƤޤ
    λҥץΥץѹ뤳ȤǡСɻ
    ɽʤɤѹǤޤ

