하이퍼스레딩이 필요한 i7-4700EQ 기반 임베디드 서버 시스템이 있습니다. 드물게 CMOS의 하이퍼스레딩 플래그가 비활성화된 경우를 제외하면 모든 것이 정상입니다. 하드웨어가 아직 손에 있는 동안 재부팅하고 CMOS로 들어가서 설정을 수정하기만 하면 됩니다. (CMOS의 다른 설정은 시간/날짜 등 모두 잘 유지되어 배터리 문제는 아닌 것 같습니다.)
그러나 일단 배포되면 콘솔에 액세스할 수 없습니다. CMOS 설정이 손실된 경우 장치를 "고정"할 수 있지만 이는 매우 간단한 문제에 비해 어려운 작업처럼 보입니다.
내가 이해하는 바는 Linux 커널이 커널 변수를 초기화하기 위해서만 BIOS를 읽는다는 것입니다. 그렇죠?
이것이 맞다면 BIOS가 보고한 내용을 무시하고 커널에서 하이퍼스레딩을 활성화하도록 Linux 커널에 지시할 수 있는 방법이 있습니까?
가능하다면 이를 수행하는 쉬운 방법(예: grub 명령줄 설정)이 있습니까? 그렇지 않으면 가능하지만 어렵다면 BIOS 지침을 무시하고 커널 소스 코드를 수정하고 다시 컴파일하여 하이퍼스레딩을 활성화할 수 있습니까?
작동하지 않을 것 같지만 /etc/default/grub에서 시도해 보았습니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash maxcpus=8 nr_cpus=8"
그런 다음 update-grub을 사용하고 재부팅하십시오. (maxcpus와 nr_cpus를 개별적으로 설정해 보기도 했습니다.)
실행 중인 시스템에서 하이퍼스레딩을 비활성화한 다음 다시 활성화하는 사례를 많이 발견했습니다. 그러나 커널이 사람이 의도적으로 하이퍼스레딩을 비활성화했다고 잘못 믿는다면 이는 하이퍼스레딩 활성화의 예가 아닙니다.
마지막으로, "하드웨어 손상"을 주장할 수 있지만 그 자체만으로는 "전쟁"에서 승리할 수 없습니다. BIOS에도 불구하고 하이퍼스레딩을 강제로 활성화할 수 있는 방법이 없다면 이는 유효한 답변입니다. 답변에 증거/설명이 포함되어 있으면 제게는 효과적입니다.
답변1
일반적으로 이것은 전적으로 사실이 아닙니다.
예시 1:스타 라이스펌웨어(BIOS라고도 함) 인터럽트 핸들러는 커널 부팅 후에도 여전히 커널보다 높은 권한으로 실행됩니다. SMM과의 싸움을 시도하는 것은 환영합니다. Linux가 당신을 돕는 데 특별히 관심을 가질 것이라고 기대하지 마십시오.
예 2: "보안 부팅" 펌웨어는 자체 업그레이드가 가능할 수 있지만 일반적으로 운영 체제가 임의의 이미지로 펌웨어를 덮어쓰도록 하는 것은 좋지 않은 생각으로 간주됩니다. 따라서 OS/부트로더를 부팅하기 전에 펌웨어는 펌웨어 칩에 쓰는 것을 방지하기 위해 하드웨어 플래그를 설정해야 합니다. 일단 설정되면 재부팅하지 않고는 이 플래그를 설정 해제할 수 없습니다. 또는 그런 것. 물론 일부 펌웨어가 이 작업을 올바르게 수행하지 않기 때문에 나타나는 현상입니다. 예를 들면 다음과 같습니다.여기.
SMT를 허용하는 것이 또 다른 예인지는 모르겠습니다.
펌웨어와 싸우는 것은 선택 사항이 아닙니다. 특히 운영 체제(Linux)가 지원하지 않는 경우 펌웨어 문제를 해결하는 것은 바람직하지 않습니다. (예를 들어, 왜냐하면ACPI ATA 명령과 관련된 펌웨어 문제. 또는 더 건설적으로, Linux가 이미 정확한 C 상태 정보를 알고 있는 Intel CPU에서 실행 중인 경우 ACPI BIOS의 C 상태 정보를 무시합니다.
(또한 일반 규칙이 적용되는 경우 목표가 여전히 달성되지 않을 수 있습니다. 예를 들어 레이아웃을 알려주기 위해 BIOS가 필요할 수 있습니다. 그리고 레이아웃이 정적이라고 가정하고 싶지 않은 몇 가지 이유가 있을 수 있습니다. 필요한 모든 BIOS 설정과 함께 부팅 시 캡처한 ACPI 테이블을 사용하는 대신 BIOS 테이블에서 제공하는 ACPI를 무시하도록 커널을 패치합니다(좋은 생각은 아닙니다).
목표가 가능하더라도 하드웨어 관련 세부 사항은 이해하실 것이라고 생각합니다. 커널에서 SMT를 활성화하는 방법을 찾았다면 정말 인상적일 것입니다.아니요하드웨어에 따라 다릅니다. 질문에 일치하는 마더보드 및 펌웨어 버전에서 테스트되었음을 명시하지 않고 그것이 무엇인지 지정하지 않으면 이 질문에 대한 대답이 정식이라고 완전히 확신할 수 없습니다.
이를 바탕으로 Linux 개발자가 여기서 여러분을 지원하려고 한다고 생각하지 않습니다. 이것은 매우 일반적인 질문이 아닙니다.