달력

11

« 2017/11 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

'커널'에 해당되는 글 1

  1. 2008.02.28 리눅스 설치 및 최적화
2008.02.28 05:41

리눅스 설치 및 최적화 삽질예방/Linux2008.02.28 05:41

====================================================
리눅스 설치
====================================================
/boot 5MB kernel 이미지
<swap>
/ 256 root 파티션
/usr 1024 모든 linux 바이너리
/home
/var 1024 로그 파일등 시스템이 정상으로 작동할 때 변경되는 파일저장
/tmp 1024 임시파일


/chroot 256 DNS, 아파치등 chroot 로 고립된 환경에서 프로그램 설치할때
/var/lib 1024  Mysql, Squid 등


====================================================
리눅스 설치후에 삭제할 서비스
====================================================
-- 데몬 모두 중지후 삭제
-- rpm -e <softwarenames>

#> rpm -e --nodeps anacron apmd at dhcpcd dosfstools eject hotplug ipchains ksymoops kudzu lokkit mailcap pciutils...

- anacron : 서버에는 불필요
- apmd  : 노트북 배터리 관리
- at  : vixle-cron 으로 대체하는 것이 좋음
- dhcpcd : DHCP 사용하지 않으면 제거
- dosfstools : MS-DOS
- eject  : CDROM, 플로피 등 제어
- hotplug : USB 장치 로드시 필요
- ipchains : iptables 로 전환
- ksymoops : 리눅스 커널을 개발하거나 디버깅시 사용
- kudzu  : 시스템 부팅시 하드웨어 추가/삭제 검색
- lokkit : 방화벽 설정을 위한 응용프로그램, 전화접속, 케이블모뎀사용자 대상으로 하는 것이기 때문에 복잡한 구성을 할수 없다.
- mailcap :
- pciutils
- pump
- raidtools
- redhat-logos
- redhat-release
- setserial


-- IDE 디스크 사용하지 않을 경우
#> rpm -e hdparm

-- SCSI, RAID 디스크 사용하지 않을 경우
#> rpm -e --nodeps mkinitrd

-- quota 패키지 삭제
#> rpm -e quota

-- 메일 서비스 안할경우
#> rpm -e sendmail
#> rpm -e procmail
#> rpm -e openldap
#> rpm -e cyrus-sasl


-- 불 필요한 문서파일 삭제
#> cd /usr/share/doc/
#> rm -rf *

====================================================
리눅스 네트웍설정
====================================================

1) PING 막기


 #> vi /etc/sysctl.conf
  net.ipv4.icmp_echo_ignore_all = 1

 #> /etc/rc.d/init.d/network restart
 #> sysctl -w net.

2) broadcast 요청에 반응하지 않기

 #> vi /etc/sysctl.conf
  net.ipv4.icmp_echo_broadcasts = 1

 #> /etc/rc.d/init.d/network restart





==================================================
컴파일 최적화
==================================================

 1) -march=cpu_type  -march=i686
 2) -O
  0 : 파일크기를 작게
  1 :
  2 : 파일크기는 크고 빠르게
  3 : 파일크기는 크고 빠르게 (가장 최적화)

 3) -funroll-loops  : 반복명령의 진행시 이를 최적화하고 반복횟수가 컴파일이나 실행시에만 결정되도록 한다.
 4) -fomit-frame-pointer : 변수접근시 스택사용, 디버깅 거의 불가능, 프로그램에서 레지스터에 불필요한 함수를 지정하는 frame-pointer 를 저장하지 않도록하여 frame-pointer 에 대한 명령을 기록하지 않는다. => 많은 다른 함수에서 여분의 레지스터를 이용할 수 있지만 서버에서 디버깅이 거의 불가능하다.
   

==================================================
커널최적화
==================================================

/proc/sys/vm : 가상메모리

 - 서버의 /proc/sys/vm 디렉토리에 있는 각종값을 조절하여 리눅스커널의 가상메모리하위 시스템을 조정할 수 있다
 - /usr/src/linux/Documentation/sysctl/vm.txt 참조

 - bdflush
   - buffermem
 - freepages
 - kswapd
 - avercommit_memory
 - page-cluster
 - pagecache
 - pagetable_cache


 1) bdflush
  - 리눅스커널의 가상메모리 하위 시스템가 밀접한 연관이 있다.
  - /proc/sys/vm/bdflush 은 bdflush 커널 데몬의 작동을 제어
  - 디스크 쓰기위해 대기하는 시간을 좀 더 늘리면 디스크 접근시 과도한 경쟁현상을 피할 수 있다.
  - 9개의 정수로 된 파라미터롤 구성 ( 100 1200 128 512 500 6000 500 0 0 )
   - 1 파라미터 (100) : 버퍼캐시에 있는 더티 버퍼(dirty buffer)의 최대값을 조절한다. 이 값을 크게 설정하면 리눅스는 버퍼의 내용을 디스크에 쓰지않고 오랫동안 있게 되지만 다른한편으로는 메모리가 적을때 한꺼번에 많은 디스크 입출력이 필요할 수도 있다. 때로는 적게 설정값의 경우가 디스크 입출력을 더욱 균등하게 배분한다.

   - 2 파라미터 (1200) : bdflush 가 한번에 디스크에 쓸수 있는 더티버퍼의 최대값으로 높은값을 설정하면 지연되거나 부하가 되는 입출력이 될수 있는 반면에 적은 값은 때로 bdflush 가 충분히 일어나지 않을 경우 메모리 부족을 야기할 수 있다.

   - 3 파라미터 (128)  : refill_freelist 함수가 호출되었을 때 bdflush 가 빈버퍼영역에 추가할 버퍼의 수이다. 값을 크게 하면 할수록 더 많은 메모리가 낭비되고 refill_freelist 함수가 적게 실행된다.

   - 4 파라미터 (512)  : bdflush 를 발생시킨다.

   - age_buffer(50*HZ), age_super parameters (5*HZ) 는 리눅스가 더티버퍼를 디스크에 다 쓰기전에 대기하는 시간을 관리한다.
   
   - 5 파리미터 (500) , 마지막 파라미터 (0, 0) 은 시스템에 의해 사용되지 않는다.

 2) buffermem
  - 얼마나 많은 메모리가 버퍼메모리로 사용되어야 하는가를 전체시스템 메모리에 대한 퍼센트 단위로 조절한다.

  - 3개의 정수값으로 구성 (실제커널이 사용하는 값은 하나)
   - 80 10 60
   - 1 파라미터 : 버퍼캐시롤 최소한 메모리 즉, 버퍼메모리에 사용되는 최소한의 메모리 퍼센트

  - #> free -m 을 사용하여 현재 시스템에서 사용중인 메모리의 양과 남아있는 메모리의 양을 볼수 있다.

   total  used  free  shared  buffers  cached
 Mem:  124  121  3  30  43  48
 -/+ buffers/cache:  29  95
     --
 swap:  128  2  126
   
   위의 결과를 보면 -/+ buffers/cache 가 29M 가 필요로 한다는 것과 128M 의 램을 가진 시스템에서 80% 로 설정하면 단지 25.6M 를 사용할 수 있다는 것을 알수 있다.

  128 * 70% = 89.6
  128 - 89.6 = 38.4M
   

 3) freepage 설정값
  - freepage 의 값을 정의
  - 2 15 75
  - 3 가지 값을 포함
   - 첫번째값 (min) : 32M 램마다 47875 정도의 값으로 설정해 주고 이 값에 2배를 하여 low 값을 얻을수 있다. 그리고 첫번째값에 3배를 하여 high 값을 얻을 수 있다.
   
   - min : 시스템의 free pages 값이 이값에 도달하면 커널만 추가 메모리를 할당
   - low : 시스템의 free pages 값이 이 값보다 작으면 커널은 점진적으로 스왑을 시작
   - high : 커널은 이 값에 정해진 양의 메모리만큼 사용하지 않고 남아있도록 시도한다. 메모리가 이 값보다 낮아지면 커널은 이후에 강압적인 스왑을 할 필요가 없도록 서서히 스왑을 시작한다.

  - #> vi /etc/sysctl.conf
   vm.freepages = 383 766 1149
    #> /etc/rc.d/init.d/network restart
       sysctl -w vm.freepages="383 766 1149"


 4) kswapd 설정
  - /proc/sys/vm/kswapd 파일은 메모리가 조각으로 나뉘거나 꽉 차는 경우 메모리를 해소해 주는 역할을 하는 커널의 swapout 데몬과 관련이 있다.
  - 3가지 값으로 구성
  - 512 32 8
   - tries_base : kswapd 가 한번에 해소할 수 있는 페이지의 최고치는 이 값으로 계산한다. 주고 이 숫자는 4, 8로 나누어 진다 (mm/vmscan.c 참조)  스왑에서 대역폭의 값을 늘릴 필요가 있다면 이 값을 늘리면 된다.
   - tries_min : kswapd 가 실행될때마다 페이지를 비우기 위해 시도할 최소횟수
   - swap_cluster : kswapd 가 한번에 쓰는 페이지의 숫자로 이 값을 크게 설정하면 kswapd 에서 입출력을 큰값으로 처리하도록 하여 디스크를 자주 검색하지 않게 하지만 그 반면에 요청을 처리하는 큐를 넘치게 할 수 있다.
   
   

 5) page-cluster 파라미터
  - 가상메모리는 한번에 복수로 페이지를 읽어 과도한 디스크 검색을 피한다. 한번에 읽을 수 있는 페이지의 값은 시스템의 메모리크기와 직접 관련되는데 커널이 한번에 읽을 수 있는 페이지의 크기는 2^page-cluster 이다. 스왑에서 2^5 보다 큰값은 의미가 없다. 왜냐하면 스왑데이터를 32페이지 그룹단위로 모으기 때문이다.
  - 기본값은 4


 6) pagecache 설정값
  - buffermem 설정변수와 똑같지만 페이지 캐시 구조만을 제어한다. 따라서 페이지 캐시에 사용되는 메모리양을 제어한다. 또한 메모리 매핑을 위해 허용되는 메모리와 일반적인 파일의 캐싱을 제어한다.
  - 주된 목적
   - 파일로 부터 read() 데이터 캐싱
   - 실행 가능한 파일과 mmap() 된 데이터 캐싱
   - 스왑캐시
  - 시스템이 스왑과 캐시에서 높은 값을 가지고 있다면 많은 스왑데이터들이 캐시되고 가능한 것보다 더 효율적인 스와핑을 시도한다는 것을 의미한다. 따라서 최소값 설정이 너무 낮지 않아야 한다. 최소값 설정이 너무 낮으면 메모리 운영이 너무 빠듯하거나 그 조각이 너무 많아져 시스템이 견딜 수 없다.
  - 기본값 2 15 75


 7) pagetable_cache 설정 변수
  - 커널은 하나의 프로세스 캐시 당 일정한 양의 페이지 테이블을 저장한다. (SWP 시스템에서 특히 큰 도움) 각 프로세스에 대한 캐시의 크기는 낮은것과 높은것 사이의 값이다. SMP 시스템에서는 커널 메모리 제어를 얻을 필요없이 빠른 pagetable 할당을 할수 있다.
  - 대형 시스템에서는 이 값을 설정하는 것이 좋다. 그러나 일반적인 시스템에서는 오히려 해가 될수 있다.
  - 기본값 25 50




/proc/sys/fs 파일 시스템 데이터
 - 조심해서 설정해야 함
 -
  binfmt-misc
  register-status
  dentry-state
  dir-notify
  dquot-max
  dquot-nr
  file-max
  inode-nr
  inode-state
  lease-break-time
  lease-enable
  overflowgid
  overflowuid
  super-max
  super-nr

 1) file-max 매개변수
  - /proc/sys/fs/file-max 에 있는 file-max 파일은 리눅스 커널이 할당할 수 있는 파일 핸들의 최대값을 설정한다. 일반적으로는 4M 램당 256 정도의 값으로 환산하여 /proc/sys/fs/file-max 값을 적당히 높임으로써 열수 있는 파일의 개수를 높인다. (예로 256M 램의 경우 16384 = 256 / 4 * 256
  - 기본값은 8192


기타 시스템 최적화를 위한 다른 설정

 1) ulimit 매개변수
  - 시스템에 있는 인증된 사용자가 생성할 수 있는 프로세스의 개수를 제한한다. 성능향상을 위해서 root 의 경우 무한대로 설정하는 것이 좋다.
  - #> vi /root/.bashrc
   ulimit -u unlimited

 2) atime 속성
  - 마지막 접근시간을 기록하지 않음
  - 웹서버, 프록시서버 데이터베이스서버등에 상당한 성능향상을 가져온다.
  - #> chartr +A filename
   chattr -R +A /var/spool

 3) noatime
  - /etc/fstab 에 적용
  - 설정되어 있으면 해당 파티션의 경우  atime 이 적용되지 않는다.
  - #> vi /etc/fstab

   LABEL=/chroot /chroot ext2 defaults,noatime 1 2
    #> mount /chroot -oremount

신고
Posted by Kwang-sung Jun