고쳐 쓰다
그들은하지 않습니다! 적어도 나에게는 그렇지 않습니다.
내 대답을 참조하십시오.
원래 질문
~에 따르면작년 Phoronix 벤치마크, 대부분의 애플리케이션은 Debian보다 FreeBSD에서 더 느리게 실행됩니다(Stockfish 체스 엔진, Node.js, FLAC 인코딩 및 기타 컴퓨팅 작업 포함).
Phoronix 기사 자체에서는 GCC 컴파일러 대신 Clang을 사용함으로써 일부 성능 차이가 발생한다고 설명합니다.다른ZFS는 본질적으로 ext4보다 느리기 때문에 ZFS를 사용하면 FreeBSD가 느려질 것이라는 의견이 있습니다.
그러나 GCC8로 컴파일된 FreeBSD의 순수 컴퓨팅 작업조차도 Linux보다 느리게 수행됩니다.
이유가 뭐야? 이것이 FreeBSD와 Linux 커널의 본질적인 차이점입니까, 드라이버 품질이 좋지 않아서입니까, 아니면 다른 것이 있습니까?
폴리스티렌좀 더 구체적으로 말하자면, 이것은 Phoronix에 따르면 Linux보다 FreeBSD에서 느리게 실행되는 매우 간단한 순수 계산 프로그램입니다.m-퀸 1.2. 다음과 같이 컴파일되었습니다.
gcc -o m-queens.bin main.c -O2 -march=native -mtune=native -std=c99 -fopenmp
이는 두 개의 20코어 CPU에서 실행되는 다중 스레드 작업이므로 성능 차이는 다중 스레드를 처리하는 OS의 능력에 달려 있다고 생각됩니다.
폴리페닐렌 설파이드더 명확하게 말하자면, 저는 FreeBSD가좋은 네트워크 기술그리고 그건넷플릭스는. 이 질문은 특히 위와 같은 계산 작업을 다룹니다.
구매력 평가 서비스6코어 데스크탑에 FreeBSD(TrueOS)와 Ubuntu를 설치하고 Queens 벤치마크를 직접 실행해 본 후 멀티스레드 성능에서 큰 차이를 발견하지 못했습니다. Phoronix는 FreeBSD에서 39% 더 느리게 실행된다고 주장하지만, 내 테스트에서는 단지 3.7% 더 느렸습니다. 이는 컴파일러 버전(TrueOS의 경우 gcc 7.4, Ubuntu의 경우 gcc 7.2)의 미묘한 차이 때문일 수 있습니다. 나중에 더 많은 테스트를 해보겠습니다.
답변1
너무 많은 반대 투표를 통해 제가 직접 테스트하기 위해 6코어 데스크톱 컴퓨터에 FreeBSD(TrueOS)를 설치하게 되었습니다. (참고: TrueOS를 다른 운영 체제와 함께 설치하는 것은 권장하지 않습니다. 이 설치로 인해 내 하드 드라이브 중 하나가 지워지고 USB 드라이브에 설치하려고 했지만... 사용자 친화적이지 않기 때문입니다.)
결과적으로 Ubuntu 및 FreeBSD의 Phoronix 테스트 모음에서 일부 테스트를 실행한 후 "FreeBSD에서 응용 프로그램 속도가 느려짐" 효과가 표시되지 않습니다. 반대로,일부 애플리케이션은 FreeBSD에서 훨씬 더 빠르게 실행됩니다(10-25%).:
Test FreeBSD 13 Ubuntu 17
Fhourstones, kpos/s 16753 13336
m-queens, multithreaded, user time, s 18.08 17.38
7zip 1 GB text file, user time, s 994 1096
보시다시피 FreeBSD에서 느리게 수행된 유일한 작업은 멀티스레드 N-queens 문제였으며 Ubuntu보다 3.7% 더 오래 걸렸습니다.
잠재적인 함정:
- Ubuntu의 gcc 버전은 7.2이고 FreeBSD에서는 7.4입니다.
- Ubuntu는 쉘에서 KDE 및 FreeBSD와 함께 실행됩니다(큰 차이는 없어야 함)
- Phoronix는 80스레드 서버를 사용하고 저는 6스레드 Intel i5 컴퓨터를 사용합니다.
요약하면, 운영 체제 성능을 테스트할 때 다음을 수행해야 합니다.
- 다른 사람이 얻은 결과를 신뢰하기보다는 설정에 대해 직접 벤치마크를 실행하십시오.
- 동일한 컴파일러를 사용해 보십시오.
- 설치된 인터프리터마다 다르게 동작하기 때문에 Perl 및 Python과 같은 스크립팅 언어의 성능은 운영 체제 성능을 나타내는 좋은 지표가 아닙니다.
답변2
벤치마크에는 OpenMP 사용이 포함되어 있습니다. 여기서 차이가 발생할 수 있습니다. 어떤 OpenMP 런타임 라이브러리가 사용되고 있는지 확인하세요.
살펴봐야 할 또 다른 사항은 디스어셈블리 코드 또는 중간 표현입니다. 이를 통해 실행 중인 명령의 차이점을 빠르게 찾을 수 있습니다.
대체로 이 질문에 대한 빠르고 명확한 대답은 없습니다. 조사를 좀 해야 합니다.