게시자: 포로닉스대조9개의 운영체제. 가장 빠른 세 가지는 다음과 같습니다.
- 클린 리눅스 32310
- CentOS Stream(및 롤링 Manjaro는 마지막에서 두 번째)
- 페도라 워크스테이션 31
특히 CentOS와 Manjaro 롤링 간의 이러한 차이의 근본 원인은 무엇입니까? 그들은 다른 코어를 제공합니까? CentOS 패키지는 더 많은 최적화 플래그를 사용합니까? 기본적으로 다른 IO 대기열이나 거버너를 사용합니까?
답변1
처음부터 끝까지 제가 생각할 수 있는 요소는 다음과 같습니다.
- 커널 구성
- CPU 및 IO 스케줄러 선택
- 시스템 시작 후 동시에 실행되는 응용 프로그램 수
- 커널을 컴파일할 때 사용할 컴파일러 플래그
- 벤치마크에 사용된 애플리케이션을 컴파일할 때 사용되는 컴파일러 플래그
- 컴파일러(GCC vs Clang vs ICC, 이전 GCC vs 새 GCC)
- 교환성
- 파일 시스템 선택(ext4, XFS, BTRFS, ZFS)
- 디스크 구성(소프트웨어 RAID)
Clear Linux의 경우 다음을 자랑스럽게 생각합니다.
- 컴파일 플래그 최적화
- 최신 Linux 커널 사용
- 성능 향상을 위해 사용자 정의 패치로 커널 패치
- CPU가 지원할 수 있는 경우 AVX512 명령어를 사용하세요. (이것은 큰 차이가 있습니다.)
CPU가 제공할 수 있는 전체 명령어 세트를 사용하면 상당한 영향을 미칠 수 있습니다.
비교를 위해 Arch Linux(및 Manjaro)는 범용 64비트 x86 CPU용 GCC로 컴파일된 커널, 라이브러리 및 실행 파일을 제공합니다( -march=x86-64 -mtune=generic
). 이는 좋은 성능을 제공하지만 실행되는 CPU용으로 특별히 컴파일된 실행 파일만큼 좋지는 않습니다.
사용elfx86extsArch Linux의 도구는 /usr/bin/ls
최소한 어떤 CPU 지침이 필요한지 보여줍니다.
$ elfx86exts /usr/bin/ls
MODE64 (call)
CMOV (cmovne)
SSE2 (movdqa)
SSE1 (movups)
CPU Generation: Intel Core
Clear Linux에서 동일한 작업을 시도할 기회는 없었지만 더 긴 지침 목록이 있을 것이라고 가정합니다.
요약하자면, 커널을 패치하고 커널 구성을 조정하면 좋은 결과를 얻을 수 있지만 가장 중요한 것은 사용 가능한 CPU 명령을 지원하는 것이 큰 차이를 만들 수 있다는 것입니다.
답변2
컴파일 플래그를 수동으로 조정함으로써 얻을 수 있는 성능 향상은 과대평가되었습니다. 그리고 비용은 사소한 것이 아닙니다. 귀하의 컴퓨터에 적합한 구성을 컴파일하고 내 구성에 맞게 다른 구성을 사용자 정의한 경우 우연히 발견한 버그는 귀하만의 것이며 대부분 나만의 개인 세트를 갖게 될 것입니다.
Bentley의 "Writing Effective Programs"(슬프게도 절판) 또는 "Programming Pearls"(제2판) 사본을 구하십시오. 실제 성능 개선은 훨씬 더 어렵고 규모도 훨씬 더 큽니다.