이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
Linux 성능 향상을 위한 시스템 관리자 가이드.
Linux는 주어진 워크로드의 특정 요구 사항을 충족하도록 조정할 수 있는 다재다능하고 강력한 운영 체제입니다. 성능을 위해 운영 체제를 최적화함으로써 시스템 관리자는 Linux 서버에서 성능의 마지막 한 방울까지 짜낼 수 있습니다.
이 가이드에서는 Linux에 대한 가장 일반적인 성능 최적화 기술 중 일부를 다룹니다. Linux 커널과 아키텍처에 대한 간략한 개요부터 시작한 다음 성능 관련 커널 매개변수로 이동합니다. 그런 다음 CPU, 메모리, I/O 및 네트워킹을 포함하여 몇 가지 일반적인 성능 최적화 전략에 대해 논의합니다.
Linux 커널은 Linux 운영 체제의 핵심입니다. CPU, 메모리, I/O 및 네트워킹을 포함하여 시스템의 모든 리소스를 관리합니다.
커널은 소프트웨어의 복잡한 부분이며 작동 방식을 이해하기 어려울 수 있습니다. 그러나 성능 조정을 위해서는 커널 아키텍처에 대한 기본적인 이해가 필요합니다.
Linux 커널은 여러 계층으로 나뉩니다. 최하위 계층은 CPU, 메모리, I/O 장치 등으로 구성된 하드웨어입니다. 그 위에는 시스템의 모든 리소스 관리를 담당하는 커널 자체가 있습니다.
커널은 여러 하위 시스템으로 나뉘며 각 하위 시스템은 특정 유형의 리소스 관리를 담당합니다. 예를 들어 메모리 관리 하위 시스템은 메모리 관리를 담당하고 네트워킹 하위 시스템은 네트워킹 관리를 담당합니다.
각 하위 시스템에는 성능을 향상시키기 위해 조정할 수 있는 자체 커널 매개변수 세트가 있습니다. 다음 섹션에서는 성능 조정을 위한 가장 중요한 몇 가지 커널 매개변수에 대해 설명합니다.
성능을 향상시키기 위해 조정할 수 있는 많은 커널 매개변수가 있습니다. 이 섹션에서는 가장 중요한 몇 가지에 대해 설명합니다.
swappiness 매개변수는 커널이 메모리 페이지를 얼마나 적극적으로 교체하는지 제어합니다. 값이 높을수록 커널이 메모리 페이지를 교체하는 데 더 적극적이 되어 일부 워크로드에서 성능을 향상시킬 수 있습니다. 그러나 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 60이며 좋은 출발점입니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
transparent_hugepage 매개변수는 커널이 투명한 huge 페이지를 사용하는지 여부를 제어합니다. 투명한 huge 페이지는 일부 워크로드에서 성능을 향상시킬 수 있지만 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 항상입니다. 이는 커널이 사용 가능한 경우 투명한 huge 페이지를 사용함을 의미합니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
vm.dirty_ratio 매개변수는 커널이 디스크에 메모리 쓰기를 시작하기 전에 더티될 수 있는 최대 메모리 비율을 제어합니다. 값이 높을수록 커널이 디스크에 쓰기 시작하기 전에 더 많은 메모리가 더티될 수 있으므로 일부 워크로드에서 성능이 향상될 수 있습니다. 그러나 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 좋은 출발점인 20입니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
vm.dirty_background_ratio 매개변수는 커널이 백그라운드에서 메모리를 디스크에 쓰기 시작하기 전에 더티될 수 있는 최대 메모리 비율을 제어합니다. 값이 높을수록 커널이 백그라운드에서 디스크에 메모리 쓰기를 시작하기 전에 더 많은 메모리가 더티될 수 있으므로 일부 워크로드에서 성능이 향상될 수 있습니다. 그러나 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 좋은 출발점인 10입니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
vm.dirty_expire_centisecs 매개변수는 커널이 페이지를 디스크에 쓰기 시작하기 전에 페이지가 손상될 수 있는 시간(100분의 1초)을 제어합니다. 더 높은 값은 커널이 페이지를 디스크에 쓰기 시작하기 전에 더 오랜 시간 동안 더티 상태일 수 있음을 의미하며, 이는 일부 워크로드에서 성능을 향상시킬 수 있습니다. 그러나 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 좋은 출발점인 300입니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
vm.dirty_writeback_centisecs 매개변수는 디스크에 대한 더티 페이지의 쓰기 저장 사이의 시간(1/100초)을 제어합니다. 값이 높을수록 디스크에 대한 더티 페이지 쓰기 저장 사이에 더 많은 시간이 있어 일부 워크로드에서 성능을 향상시킬 수 있습니다. 그러나 다른 워크로드에서 성능 문제를 일으킬 수도 있습니다.
기본값은 500이며 좋은 출발점입니다. 그러나 워크로드에 가장 적합한 것이 무엇인지 알아보기 위해 다양한 값으로 실험해 볼 가치가 있습니다.
CPU 성능을 최적화하는 데 사용할 수 있는 다양한 기술이 있습니다.
일반적인 기술 중 하나는 CPU 프로파일링 도구를 사용하여 코드의 핫스팟을 식별하는 것입니다. 핫스팟은 다른 코드 섹션보다 더 자주 실행되는 코드 섹션입니다. 핫스팟을 식별하고 최적화하면 상당한 성능 향상을 얻을 수 있습니다.
또 다른 일반적인 기술은 작업 스케줄러를 사용하여 사용 가능한 모든 CPU에 작업 부하를 고르게 분산시키는 것입니다. 이렇게 하면 리소스 경합이 줄어들어 성능이 향상될 수 있습니다.
메모리 성능을 최적화하는 데 사용할 수 있는 다양한 기술이 있습니다.
일반적인 기술 중 하나는 메모리 프로파일러를 사용하여 과도하게 사용되는 메모리 영역을 식별하는 것입니다. 이러한 영역을 식별하고 최적화하면 상당한 성능 향상을 얻을 수 있습니다.
또 다른 일반적인 기술은 성능을 위해 특별히 설계된 메모리 할당자를 사용하는 것입니다. glibc malloc 할당자는 대부분의 워크로드에 적합합니다.
I/O 성능을 최적화하는 데 사용할 수 있는 다양한 기술이 있습니다.
일반적인 기술 중 하나는 I/O 스케줄러를 사용하여 성능을 최대화하는 방식으로 I/O 작업을 예약하는 것입니다. Deadline I/O 스케줄러는 대부분의 워크로드에 적합합니다.
또 다른 일반적인 기술은 미리 읽기 메커니즘을 사용하여 데이터가 필요하기 전에 데이터를 메모리로 미리 가져오는 것입니다. 이는 대기 시간을 줄여 성능을 향상시킬 수 있습니다.
네트워킹 성능을 최적화하는 데 사용할 수 있는 다양한 기술이 있습니다.
일반적인 기술 중 하나는 네트워크 스케줄러를 사용하여 성능을 최대화하는 방식으로 네트워크 트래픽을 예약하는 것입니다. pfifo_fast 네트워크 스케줄러는 대부분의 워크로드에 적합합니다.
또 다른 일반적인 기술은 네트워크 가속기를 사용하여 CPU에서 전용 하드웨어 장치로 작업을 오프로드하는 것입니다. 이는 CPU 사용률을 줄여 성능을 향상시킬 수 있습니다.
이 가이드에서는 Linux에 대한 가장 일반적인 성능 최적화 기술 중 일부를 다루었습니다. 성능을 위해 운영 체제를 조정함으로써 시스템 관리자는 Linux 서버에서 성능의 마지막 한 방울까지 짜낼 수 있습니다.
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/index
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
https://www.kernel.org/doc/Documentation/filesystems/proc.txt
https://www.kernel.org/doc/Documentation/block/deadline-iosched.txt
https://www.kernel.org/doc/Documentation/block/cfq-iosched.txt