4.14. 컴파일러 및 개발 도구
RHEL 9는 IBM POWER10 프로세서 지원
Linux 커널에서 시스템 툴체인(GCC, binutils, glibc)을 통해 IBM의 최신 POWER 프로세서인 POWER10에 대한 지원을 포함하도록 Red Hat Enterprise Linux 9가 업데이트되었습니다. RHEL 9는 POWER10에서 워크로드를 지원할 준비가 되어 있으며 향후 릴리스에서도 개선 사항이 제공됩니다.
(BZ#2027596)
GCC 11.2.1 사용 가능
RHEL 9는 GCC 버전 11.2.1과 함께 배포됩니다. 주요 버그 수정 및 개선 사항은 다음과 같습니다.
일반 개선 사항
- GCC는 이제 DWARF 버전 5 디버깅 형식입니다.
- 진단에 표시된 열 번호는 기본적으로 실제 열 번호와 다중 열 문자를 나타냅니다.
- 스트라이 라인 코드 벡터라이저는 벡터화 시 전체 기능을 고려합니다.
- 동일한 변수를 비교하는 일련의 조건 표현식은 각 변수에 비교 표현식이 포함된 경우 switch 문으로 변환할 수 있습니다.
최적화 개선 사항:
-
-fipa-modref
옵션으로 제어되는 새로운 IPA-modref 패스는 함수 호출의 부작용을 추적하고 포인트 간 분석의 정확도를 향상시킵니다. -
-fipa-icf
옵션에 의해 제어되는 동일한 코드 폴딩 패스는 통합 함수의 수를 늘리고 컴파일 타임 메모리 사용을 줄이기 위해 크게 개선되었다.
-
링크 타임 최적화 개선 사항:
- Link-time optimization (LTO)를 사용하면 컴파일러가 링크 시간에 중간 표현을 사용하여 프로그램의 모든 번역 단위에서 다양한 최적화를 수행할 수 있습니다. 자세한 내용은 링크 시간 최적화를 참조하십시오.
- 최대 메모리 사용을 줄이기 위해 연결 중에 메모리 할당이 향상되었습니다.
-
IDE에서 새로운
GCC_EXTRA_DIAGNOSTIC_OUTPUT
환경 변수를 사용하여 빌드 플래그를 조정하지 않고 머신에서 읽을 수 있는 "고정 힌트"를 요청할 수 있습니다. -
-fanalyzer
옵션으로 실행되는 정적 분석기는 다양한 버그 수정 및 개선 사항으로 크게 개선되었습니다.
언어별 개선 사항
C 제품군
- C 및 C++ 컴파일러는 OpenMP 구조에서 비rectangular 루프 중첩과 OpenMP 5.0 사양의 할당기 루틴을 지원합니다.
속성:
-
새로운
no_stack_protector
속성은 스택 보호(-fstack-protector
)로 조정되지 않아야 하는 기능을 표시합니다. -
개선된
malloc
속성은 할당기 및 deallocator API 쌍을 식별하는 데 사용할 수 있습니다.
-
새로운
새 경고:
-
-Wall
옵션으로 사용하도록 설정된-Wsizeof-array-div
는 첫 번째 값이 배열에 적용되는 경우 두크기의
연산자에 대해 경고하고 divisor가 배열 요소의 크기와 같지 않습니다. -
-Wstringop-overread
는 기본적으로 활성화되어 있는 배열의 끝 부분을 인수로 전달한 문자열 함수에 대한 호출에 대해 경고합니다.
-
개선된 경고:
-
-Wfree-nonheap-object
는 동적 메모리 할당 함수에서 반환되지 않은 포인터를 사용하여 배치 함수를 처리하는 더 많은 호출 인스턴스를 감지합니다. -
-Wmaybe-uninitialized
는 포인터와 초기화되지 않은 메모리에 대한 참조를const
-qualified 인수를 사용하는 함수에 대한 전달을 진단합니다. -
-Wuninitialized
는 동적으로 할당된 메모리에서 초기화되지 않은 읽기를 감지합니다.
-
C
향후 ISO C2X 버전의 새로운 기능은
-std=c2x
및-std=gnu2x
옵션을 사용하여 지원됩니다. 예를 들면 다음과 같습니다.-
표준 속성이 지원됩니다.
-
__has_c_attribute
preprocessor operator가 지원됩니다. - 레이블은 선언 전과 복합 문 끝에 나타날 수 있습니다.Labels can appear before declarations and at the end of a compound statement.
-
C++
-
기본 모드는
-std=gnu++17
로 변경됩니다. -
C++ 라이브러리
libstdc++
는 이제 C++17 지원이 개선되었습니다. 몇 가지 새로운 C++20 기능이 구현됩니다. C++20 지원은 실험적이라는 점에 유의하십시오.
기능에 대한 자세한 내용은 C++20 언어 기능을 참조하십시오.
- C++ 프런트 엔드에는 향후 C++23 초안 기능에 대한 실험적인 지원이 있습니다.
새 경고:
-
-Wctad-maybe-unsupported
, 기본적으로 비활성화됨 - deduction guide 없이 클래스 템플릿 인수 deduction을 수행하는 방법에 대해 경고합니다. -
-Wrange-loop-construct
는-Wall
에서 활성화하여 범위 기반 루프가 불필요하고 리소스가 비효율적인 사본을 생성하는 경우 경고합니다. -
-Wall
에서 활성화한-Wmismatched-new-delete
.NET Framework에서 반환한 포인터를 new 또는 기타 일치하지 않는 할당 함수에서 반환된 포인터를 사용하여 삭제에 대해 경고합니다. -
-Wvexing-parse
는 기본적으로 활성화되어 있는 구문 분석 규칙에 대해 경고합니다. 선언이 변수 정의처럼 보이는 경우 C++ 언어를 함수 선언으로 해석해야 합니다.
-
아키텍처별 개선 사항
64비트 ARM 아키텍처
-
hasv8-R 아키텍처는
-march=armv8-r
옵션을 통해 지원됩니다. - GCC는 추가, 제거, 곱셈 및 복잡한 숫자에 대한 누적 및 뺀 변형을 수행하는 작업을 자동 수정할 수 있습니다.
AMD 및 Intel 64비트 아키텍처
-
Intel AVX-VNNI에 대한 새로운 RuntimeClass 확장 지원이 추가되었습니다.
-mavxvnni
컴파일러 전환은 AVX-VNNIhieras를 제어합니다. -
znver3 코어를 기반으로 하는 AMD CPU는 새로운
-march=znver3
옵션을 통해 지원됩니다. -
x86-64 psABI 부록 에 정의된 세 가지 마이크로 아키텍처 수준은 새로운
-march=x86-64-v2
,-march=x86-64-v3
,-march=x86-64-v4
옵션으로 지원됩니다.
IBM Z 아키텍처
- GCC 11.2.1 기본값은 IBM z14 프로세서입니다.
IBM Power Systems
- GCC 11.2.1 기본값은 IBM POWER9 프로세서입니다.
-
GCC 컴파일러는 새로운
-mcpu=power10
명령줄 옵션을 사용하여 POWER10 명령을 지원합니다.
(BZ#1986836, BZ#1870016, BZ#1870025, BZ#1870028, BZ#2019811, BZ#2047296)
glibc
최적화 데이터를 캡처하기 위한 새로운 명령
새로운 ld.so --list-diagnostics
명령은 IFUNC 선택 및
구성과 같은 glibc 최적화 결정에 영향을 미치는 데이터를 단일 머신에서 읽을 수 있는 파일로 캡처합니다.
glibc
-hwcaps
binutils
의 주요 변경 사항
RHEL 9에는 binutils
의 다음과 같은 변경 사항이 추가되었습니다.
-
binutils
에서는 이제 Intel의 AMX/TMUL 명령어 세트를 지원하므로 이 새로운 기능을 사용할 수 있는 애플리케이션에 대한 성능이 향상되었습니다. - 어셈블러, 링커 및 기타 바이너리 유틸리티에서 POWER10 지침을 지원합니다.
(BZ#2030554, BZ#1870021)
sched_getcpu
구현은 이제 64비트 ARM 아키텍처 및 기타 아키텍처에서의 성능을 개선하기 위해 rseq
(restartable sequences)를 선택적으로 사용할 수 있습니다.
64비트 ARM 아키텍처에서 sched_getcpu
의 이전 구현은 getcpu
시스템 호출을 사용하므로 대부분의 병렬 알고리즘에서 효율적으로 사용하기에는 속도가 너무 느립니다. 다른 아키텍처에서는 vDSO(virtual dynamic shared object) 가속을 사용하여 이 문제를 해결합니다. rseq
를 사용하여 sched_getcpu
를 구현하면 64비트 ARM 아키텍처의 성능이 크게 향상됩니다. 다른 아키텍처에서는 약간의 개선이 표시됩니다.
rseq
를 사용하도록 sched_getcpu
를 구성하려면 GLIBC_TUNABLES=glibc.pthread.rseq=1
환경 변수를 설정합니다.
# GLIBC_TUNABLES=glibc.pthread.rseq=1 # export GLIBC_TUNABLES
업데이트된 성능 도구 및 디버거
RHEL 9.0에서는 다음과 같은 성능 도구와 디버거를 사용할 수 있습니다.
- GDB 10.2
- Valgrind 3.18.1
- SystemTap 4.6
- Dyninst 11.0.0
- elfutils 0.186
(BZ#2019806)
IBM POWER10의 GDB에서 DAWR 기능 개선
RHEL 9는 향상된 DAWR 기능을 제공하는 GDB 10.2와 함께 배포됩니다. IBM POWER10 프로세서에서 GDB에서 새로운 하드웨어 감시 기능을 사용할 수 있습니다. 예를 들어 새로운 DAWR/DAWRX 레지스터 세트가 추가되었습니다.
(BZ#1870029)
GDB는 IBM POWER10에서 새로운 접두사로 지정된 명령을 지원
GDB 10.2는 POWER10에 대한 사전 요구 사항을 완전히 지원하며, 여기에는 8바이트 접두사가 지정된 지침이 포함됩니다. RHEL 8.4에서는 GDB는 4바이트 명령만 지원했습니다.
(BZ#1870031)
RHEL 9는 boost
1.75.0을 제공합니다.
RHEL 9는 boost
패키지 버전 1.75.0과 함께 배포됩니다. 주요 버그 수정 및 버전 1.67.0에 대한 개선 사항은 다음과 같습니다.
-
Boost.Signals
라이브러리가 제거되어 header-onlyBoost.Signals2
구성 요소로 교체되었습니다. -
boost-jam
패키지의bjam
도구는boost-
패키지의 b2로 교체되었습니다.b2
새 라이브러리:
-
Boost.Contracts
-
boost.HOF
-
Boost.YAP
-
boost.Safe nmerics
-
Boost.Outcome
-
Boost.Histogram
-
Boost.Variant2
-
Boost.Nowide
-
Boost.StaticString
-
Boost.STL_Interfaces
-
Boost.JSON
-
boost.LEAF
-
Boost.PFR
-
(BZ#1957950)
RHEL 9에서는 LLVM Toolset 13.0.1을 제공합니다.
RHEL 9는 LLVM Toolset 버전 13.0.1과 함께 배포됩니다. 주요 버그 수정 및 버전 12.0.1의 개선 사항은 다음과 같습니다.
-
Clang은 이제 C++에서 C++ 및
__attribute__((musttail))
에서 문 속성[[clang::musttail]]
을 사용하여 보장된 tail 호출을 지원합니다. -
이제 Clang에서는 코드에서 예약된 식별자를 사용할 때 개발자에게 경고하는
-Wreserved-identifier
경고를 지원합니다. -
이제 Clang의
-Wshadow
플래그도 섀도 구조화된 바인딩을 확인합니다. -
Clang의
-Wextra
도-Wnull-pointer-subtraction
을 의미합니다. -
Clang은 이제 C++에서 C++ 및
__attribute__((musttail))
에서 문 속성[[clang::musttail]]
을 사용하여 보장된 tail 호출을 지원합니다.
RHEL 9에서는 llvm-toolset
을 RPM 패키지로 쉽게 설치할 수 있습니다.
(BZ#2001107)
CMake 3.20.2에서 주요 변경 사항
RHEL 9는 CMake 3.20.2와 함께 배포됩니다. 버전 3.20.2 이하가 필요한 프로젝트에서 CMake를 사용하려면 cmake_minimum_required
(버전 3.20.2) 명령을 사용합니다.
주요 변경 사항은 다음과 같습니다.
-
C++23 컴파일러 모드는 이제
CXX_STANDARD
,CUDA_STANDARD
,OBJCXX_STANDARD
, 또는 컴파일 기능 함수의cxx_std_23
메타 기능을 사용하여 대상 속성을 사용하여 지정할 수 있습니다. - CUDA 언어 지원을 통해 이제 NVIDIA CUDA 컴파일러가 심볼릭 링크가 될 수 있습니다.
-
Intel oneAPI NextGen LLVM 컴파일러는
IntelLLVM
컴파일러 ID에서 지원됩니다. - CMake는 이제 안 드 로이드 NDK의 툴체인 파일과 병합하여 안 드 로이드에 대한 교차 컴파일을 지원합니다.
-
cmake(1)
를 실행하여 프로젝트 빌드 시스템을 생성할 때 하이픈으로 시작하는 알 수 없는 명령줄 인수가 거부됩니다.
새로운 기능 및 더 이상 사용되지 않는 기능에 대한 자세한 내용은 CMake 릴리스 노트 를 참조하십시오.
(BZ#1957948)
RHEL 9에서는 Go 1.17.7을 제공합니다.
RHEL 9는 Go Toolset 버전 1.17.7과 함께 배포됩니다. 주요 버그 수정 및 버전 1.16.7에 대한 개선 사항은 다음과 같습니다.
- 슬라이스를 배열 포인터로 변환하는 옵션이 추가되었습니다.
- //go:build 행에 대한 지원을 추가했습니다.
- amd64의 함수 호출 성능 개선
- 함수 인수는 스택 추적에서 더 명확하게 포맷됩니다.
- 폐쇄를 포함하는 기능은 인라인화될 수 있습니다.
- x509 인증서 구문 분석에서 리소스 사용량 감소.
RHEL 9에서는 go-toolset
을 RPM 패키지로 쉽게 설치할 수 있습니다.
(BZ#2014087)
OpenSSL 3에서 FIPS 모드 지원
이제 FIPS 모드에서 Go의 경우 OpenSSL 3 라이브러리를 사용할 수 있습니다.
RHEL 9에서는 Rust Toolset 1.58.1을 제공합니다.
RHEL 9는 Rust Toolset 버전 1.58.1과 함께 배포됩니다. 주요 버그 수정 및 버전 1.54.0에 대한 개선 사항은 다음과 같습니다.
-
Rust 컴파일러는 이제 2021년 언어 버전을 지원하고, 클로저트 캡처, 배열용
IntoIterator
, 새로운 Cargo 기능 확인자 등을 제공합니다. - 새로운 사용자 지정 프로필에 대한 Cargo 지원이 추가되었습니다.
- eight deduplicates 컴파일러 오류.
- 새로운 오픈 범위 패턴을 추가했습니다.
- 캡처된 식별자를 형식 문자열로 추가했습니다.
자세한 내용은 Rust 1.55Rust1.56Rust1.57Rust 1.58을 참조하십시오.
RHEL 9에서는 rust-toolset
을 RPM 패키지로 쉽게 설치할 수 있습니다.
(BZ#2002885)
RHEL 9는 pcp
패키지 버전 5.3.5를 제공합니다.
RHEL 9는 Performance Co-2011(pcp
) 패키지 버전 5.3.5와 함께 배포됩니다. 버전 5.3.1 이후로 BPF CO-RE (libbpf
및 BTF
)를 사용하여 eBPF
프로그램의 성능 데이터를 제공하는 새로운 pcp-pmda-bpf
하위 패키지가 추가되었습니다.
PCP에서 SQL Server 메트릭에 액세스하기 위한 Active Directory 인증
이번 업데이트를 통해 시스템 관리자는 AD(Active Directory) 인증을 사용하여 SQL Server 메트릭에 안전하게 연결하도록 pmdamssql(1)
을 구성할 수 있습니다.
새로운 pcp-ss
PCP 유틸리티를 사용할 수 있습니다.
pcp-ss
PCP 유틸리티는 pmdasockets(1)
PMDA에 의해 수집된 소켓 통계를 보고합니다. 명령은 많은 ss
명령줄 옵션 및 보고 형식과 호환됩니다. 또한 실시간 모드에서 로컬 또는 원격 모니터링의 이점과 이전에 기록된 PCP 아카이브의 기록 재생 기능도 제공합니다.
RHEL 9에서는 grafana
7.5.11을 제공합니다.
RHEL 9는 grafana
패키지 버전 7.5.11과 함께 배포됩니다. 7.5.9 버전 관련 주요 변경 사항은 다음과 같습니다.
-
새 데이터 프레임 형식을 지원하지 않는 패널의 이전 버전과 호환성을 위해 새로운
준비 시계열
변환을 추가했습니다. - SHA-1 대신 HMAC-SHA-256을 사용하여 암호 재설정 토큰을 생성하도록 업데이트된 암호 복구 기능
RHEL 9에서는 grafana-pcp
3.2.0을 제공합니다.
RHEL 9는 grafana-pcp
패키지 버전 3.2.0과 함께 배포됩니다. 주요 버그 수정 및 버전 3.1.0에 대한 개선 사항은 다음과 같습니다.
- PCP Redis에 대한 새 MS SQL 서버 대시보드를 추가했습니다.
- PCP 벡터 eBPF/BCC 개요 대시보드에서 빈 히스토그램 버킷의 가시성이 추가되었습니다.
-
PCP Redis의
metric()
기능이 모든 메트릭 이름을 반환하지 않은 버그가 수정되었습니다.
grafana-pcp
의 벡터 데이터 소스에 대한 중앙 pmproxy
를 통해 원격 호스트에 액세스
일부 환경에서는 네트워크 정책에서 대시보드 뷰어의 브라우저에서 모니터링된 호스트로의 연결을 직접 허용하지 않습니다. 이번 업데이트를 통해 중앙 pmproxy
에 연결하도록 hostspec
을 사용자 지정하여 개별 호스트에 요청을 전달할 수 있습니다.
새로운 패키지: ansible-pcp
ansible-pcp
패키지에는 지표
RHEL 시스템 역할을 구현하는 데 사용되는 PCP(Performance Co- Cryostat) 및 Redis 및 Grafana와 같은 관련 소프트웨어에 대한 역할이 포함되어 있습니다.
(BZ#1957566)
RHEL 9에서는 python-jsonpointer
2.0을 제공합니다.
RHEL 9는 python-jsonpointer
패키지 버전 2.0과 함께 배포됩니다.
버전 1.9에 대한 주요 변경 사항은 다음과 같습니다.
- Python 버전 2.6 및 3.3은 더 이상 사용되지 않습니다.
-
python-jsonpointer
모듈은 이제 잘못된 이스케이프 시퀀스에 대한 포인터를 자동으로 확인합니다. - 이제 명령줄에서 포인터를 인수로 작성할 수 있습니다.
- 포인터는 더 이상 URL 인코딩 형식으로 제출할 수 없습니다.
.NET 6.0 사용 가능
RHEL 9는 .NET 버전 6.0과 함께 배포됩니다. 주요 개선사항은 다음과 같습니다.
- 64비트 ARM(aarch64) 지원
- IBM Z 및 LinuxONE 지원 (s390x)
자세한 내용은 .NET 6.0 RPM 패키지 릴리스 정보 및 .NET 6.0 컨테이너 릴리스 정보를 참조하십시오.
.NET 6.0 은 이 Application Stream의 초기 버전으로 RPM 패키지로 쉽게 설치할 수 있습니다. .NET 6.0 은 RHEL 9보다 라이프사이클이 짧습니다. 자세한 내용은 Red Hat Enterprise Linux Application Streams 라이프 사이클 문서를 참조하십시오.
(BZ#1986211)
RHEL 9의 Java 구현
RHEL 9 AppStream 리포지토리에는 다음이 포함됩니다.
-
OpenJDK 17 Java 런타임 환경 및 OpenJDK 17 Java 소프트웨어 개발 키트를 제공하는
java-17-openjdk
패키지 -
OpenJDK 11 Java 런타임 환경 및 OpenJDK 11 Java 소프트웨어 개발 키트를 제공하는
java-11-openjdk
패키지 -
OpenJDK 8 Java 런타임 환경 및 OpenJDK 8 Java 소프트웨어 개발 키트를 제공하는
java-1.8.0-openjdk
패키지
자세한 내용은 OpenJDK 설명서 를 참조하십시오.
(BZ#2021262)
RHEL 9의 Java 툴
RHEL 9 AppStream 리포지토리에는 다음과 같은 Java 툴이 포함되어 있습니다.
-
Maven 3.6.
3: 소프트웨어 프로젝트 관리 및 이해 툴. -
ant
1.10.9
- Java 애플리케이션을 컴파일, 어셈블링, 테스트 및 실행을 위한 Java 라이브러리 및 명령줄 툴입니다.
Maven 3.6
및 Ant 1.10
은 이러한 애플리케이션 스트림의 초기 버전입니다.이 Application Streams는 비모듈 RPM 패키지로 쉽게 설치할 수 있습니다.
(BZ#1951482)
CRB 리포지토리에서 SWIG 4.0
사용 가능
SWIG(Simplified Wrapper and Interface Generator) 버전 4.0은 CodeReady Linux Builder(CRB) 리포지토리에서 사용할 수 있습니다. 이 릴리스에는 PHP 8
에 대한 지원이 추가되었습니다.
RHEL 9에서는 SWIG
를 RPM 패키지로 쉽게 설치할 수 있습니다.
CodeReady Linux Builder 리포지토리에 포함된 패키지는 지원되지 않습니다.
(BZ#1943580)