UNIX/SUN

[스크랩] Kernel Tunning 방법, IPC Parameter 정리

99iberty 2014. 9. 18. 11:12

 

http://jkkang.net/unix/system/kernel-tuning.txt

 

#
# Kernel Tunning 방법, IPC Parameter 정리
#

Kernel Tunning 및 IPC Parameter

■ Solaris2.x에서의 Kernel tuning에 대해 알아보겠습니다.
   Solaris 2.x는 solaris1.x와 비교할 때 dynamic kernel 구조를 갖기 때문에 tuning에 있어
   직접 kernel을 compile하지 않고 부팅시에 해당되는 module을 loading하도록 되어있습니다.

■목차
  1. Kernel tuning의 의의
  2. "maxusers"에 의해 변동되는 parameter의 값설정 방법
  3. Solaris 2.x에서의 kernel parameter 변경
  4. 기타 Tuning이 가능한 parameter들
     1) Buffer Cache Parameters
     2) Streams Parameters
     3) Interprocess Communication (IPC) Parameters
     4) TPI Loopback Pseudo-driver Parameters
     5) Miscellaneous Parameters


1. Kernel tuning의 의의
   ● Solaris 2.x에서의 kernel은 booting시 자동적으로 load되며 recompiling의 단계를 거치지
      않고 동적으로 구동된다.  따라서 Solaris2.x에서는 필요한 경우에만 kernel의 resource를
      참조하게 된다.
      또한 특별한 상황이 아닌 경우의 Solaris2.x에서의 kernel tuning은 삼가하는 것이 좋다.

   ● 또한 Solaris2.x에서의 kernel tuning은 "maxusers"의 세팅을 어떻게 했는가 하는 것에 의해
      대부분의 parameter들의 값이 자동적으로 계산되며 /etc/system file에 해당되는 parameter
      setting을 함으로써 booting시 kernel이 이 화일을 참조하여 kernel 상으로 강제적인
      loading을 하게된다.

   ● 결론적으로 Solaris 2.x에서의 kernel tuning은 해당되는 kernel parameter의 값에 대한 정확한
      이해를 바탕으로 진행할 수가 있으며 시스템과 조화를 이루지 않는 parameter 값을 설정시에는
      오히려 시스템의 성능저하를 가져올 수도 있다는 것을 명심해야 할 것이다.


2. "maxusers"에 의해 변동되는 parameter의 값설정 방법

    Kernel Table     Variable         Default Setting
    Inode            ufs_ninode       max_nprocs + 16 + maxusers + 64
    Name Cache       ncsize           max_nprocs + 16 + maxusers + 64
    Process          max_nprocs       10 + 16*maxusers
    Quota table      ndquot           (maxusers * NMOUNT)/4 + max_nprocs
    user process     maxuprc          max_nprocs - 5
    pseudo devcies   pt_cnt           default 48


3. Solaris 2.x에서의 kernel parameter 변경

   ○ solaris 2.x에서의 kernel tuning은 /etc/system file에서 해당되는 parameter를
      변경함으로써 수정이 가능하다.

   다음의 예제를 참고로 maxuser의 변경시 변화되는 parameter를 살펴보기로 한다.

       system: SPARCstation ss2
       M/M   : 52MB
       Disk  : 4G
       OS    : Solaris 2.4

   ○ 위와 같은 사양에서 maxusers를 64명으로 늘리고자 함.( max user 를 기준으로 다른
      kernel parameter 를 수정하도록 함.

      # cp /etc/system /etc/system.org

      # vi /etc/system

      set maxusers=64
      set max_nprocs=1034
      set ncsize=1178
      set ndquot=1194
      set maxuprc=1029
      set ufs_ninode=1178
      set pt_cnt=100      -----> 100 개의 psudo device를 구성함 ( default 48 )

      # reboot -- -r  ( -r option으로 kernel을 rebuild 시켜줌 )

   ○ 만약 /etc/system의 설정이 잘못되어 booting이 되지 않을 때는 미리 copy 해둔
      /etc/system.org로 system을 부팅하여 /etc/system file을 수정하도록 한다.

      진행순서는 다음과 같다.

      OK boot -a   ---> -a option을 사용하여 interactive하게 시스템을 booting
      Rebooting from -a
      Boot device: /sbus/esp@0,800000/sd@3,0 File and args: -a
      Enter filename [/kernel/unix]: (return)
      :
      Name of system file [etc/system]: etc/system.org
      Name of default directory for modules [/kernel /usr/kernel]: (return)
      root filesystem type [ufs] (return)
      :

   ○ booting을 한 후 "sysdef -i" option으로 kernel parameter를 비교해 보면
      /etc/system file을 수정한 후와 수정전의 차이점을 알 수가 있다.

      수정전:
               826      maximum number of processes (v.v_proc)
               821      maximum processes per user id (v.v_maxup)

      수정후:
               1034      maximum number of processes (v.v_proc)
               1029      maximum processes per user id (v.v_maxup)


4. 기타 Tuning이 가능한 parameter들

   1) Buffer Cache Parameters

        Parameter     default                         Description
        bufhwm     2% of physical memory     1Kbytes 단위로 표현되는 buffer
                                                     cache memory 사용량의 최대값

   ○ 만약 physical memory size가 52MB 인 경우 2%에 해당되는 buffer cache
      parameter 값이 자동으로 부팅시에 세팅되며 확인은 다음의 명령어를 이용한다.

      # /usr/sbin/sysdef -i |grep bufhwm

      1069056        maximum memory allowed in buffer cache (bufhwm)
               ( 52Mbyte physical memory에 대한 2%의 buffer cache가 자동설정됨 )

      # vi /etc/system

      set bufhwm=2088      --> buffer cache size를 두배로 늘리고자 할때
      :                        2088*1024byte = 2138112byte로 기존의 1069056
                               보다 두배의 buffer cache size를 갖게됨.

      # reboot - -r
      # /usr/sbin/sysdef -i |grep bufhwm

      2138112        maximum memory allowed in buffer cache (bufhwm)

   2) Streams Parameters

             Parameter       Default              Description
             nstrpush          9                 허용된 pushes streams의 최대값
             strmsgsz          65536             사용자가 만들수 있는 최대의 streams
                                                 message size로 0 일 경우 최대값의 상한
                                                 을 두지 않음을 의미하며 Solaris 2.4의
                                                 경우 65536이 default value이다.
             strctlsz          1024              message의 ctl part의 최대값 의미


      ○ 현재 사용하고 있는 시스템의 STREAM resource를 알아보는 방법

         # uname -a
                 SunOS cupid 5.4 generic sun4c sparc

         # /usr/sbin/sysdef -i |grep STR

               9  maximum number of pushes allowed (NSTRPUSH)
           65536  maximum stream message size (STRMSGSZ)
            1024  max size of ctl part of message (STRCTLSZ)

      ○ 현재의 STREAM parameter를 변경하고자 할 때

           # vi /etc/system

                 set nstrpush=18      --> default 9
                 set strmsgsz=0       --> default 65536 ( 0 는 unlimit의 의미를 가짐 )
                 set strctlsz=2048    --> default 1024
                 :
                 :wq
           # reboot -- -r

           # /usr/sbin/sysdef -i |grep STR

                  18  maximum number of pushes allowed (NSTRPUSH)
                   0  maximum stream message size (STRMSGSZ)
                2048  max size of ctl part of message (STRCTLSZ)


           3) Interprocess Communication (IPC) Parameters

            ○ 주로 Database에서의 semaphore와 shared memory size 설정시 사용되며
               다음과 같은 여러가지 parameter 값을 가진다.
               setting시에는 어떠한 application이 수행되는지 확인하여야 하며 해당되는
               전문가와 상의하여 적절하게 parameter 값을 설정하도록 한다.


           ◎ IPC Messages Parameters
           syntax:  set msgsys:msginfo_variable=value

                Parameter              default            Description

              msginfo_msgmap             100      message map의 entry 수
              msginfo_msgmax             2048     message size의 최대값
              msginfo_msgmnb             4096     queue의 최대 byte 수
              msginfo_msgmni             50       message queue identifier의 갯수
              msginfo_msgssz             8        message의 segment size로 반드시 word
                                                  size의 곱이되어야 함.
              msginfo_msgtql             40       system message header의 갯수
              msginfo_msgseq             1024     message segment의 갯수로 32768 보다
                                                  작아야함.

           ◎ IPC Semaphores Parameters

          Systax: set semsys:seminfo_variable=variable

                 Parameter              default            Description

              seminfo_semmap             10       semaphore map의 entry 갯수
              seminfo_semmni             10       semaphore identifier의 갯수
              seminfo_semmns             60       system의 semaphore 갯수
              seminfo_semmnu             30       system의 undo structure의 개수
              seminfo_semmsl             25       각 id 별 semaphore의 최대값
              seminfo_semopm             10       각 semaphore call마다의 최대
                                                  operation의 갯수
              seminfo_semume             10       각 process마다의 undo entry의 최대값
              seminfo_semvmx             32767    semaphore의 최대값
              seminfo_semaem             16384    Adjust on exit maximum value

           ◎ IPC Shared Memory

          Syntax: set shmsys:shminfo_variable=value

          Parameter             default             Description

          shminfo_shmmax        1048576    Shared memory segment의 최대 크기
          shminfo_shmmin        1          Shared memory segment의 최소 크기
          shminfo_shmmni        100        Shared memory의 identifier의 개수
          shminfo_shmseg        6          각 process당 Segments

           4) TPI Loopback Pseudo-driver Parameters

           syntax: set tune:variable=value

           Parameter              Default                 Description

           tune_t_gpgslo           25          freemem이 t_getpgslow보다 작아질 경우
                                               process로 부터 pages를 빼앗아 옴

           tune_t_fsflush          30          초 단위로 언제 fsflush가 run되는지를 정의
                                               fsflush는 항상 memory에 상주하면서 정기적
                                               으로 fsflush를 진행시킴

           tune_t_minarme          25          page에 있어서의 deadlock을 피하기위한 최소
                                               한의 이용가능한 resident memory
                                                 ( not swapable )
           tune_t_minasme          25          page에 있어서의 deadlock을 피하기위한 최소
                                               한의 이용가능한 swapable memory.

           tune_t_flckrec          512         frlocks의 active한 최대값

           putbufsz                2000        putchar buffer의 크기

           pt_cnt                  48          pseudo-ttys로 구성된 total 갯수

           sadcnt                  16          sad device의 갯수


          5) Miscellaneous Parameters

            Parameter                Default              Description

           lwp_default_stksize        8192      lwps에 대한 kernel stack의 크기로 kernel
                                                stack의 overflow가 발생시에 적용되게됨.
                                                byte 단위로 표현되며 반드시 PAGESIZE의
                                                배수가 되어야 함