RHEL kernel 의 CPU model 검사

회사에서 RHEL7 을 사용하는 일부 시스템이 있다. 오늘 openvswitch 관련하여 kernel crash 가 일어나 재부팅이 발생을 했다. 관련해서 시스템을 진단하다가 생소한 메시지를 발견했고 RedHat 은 linux kernel 에 CPU model 검사를 한다는 것을 확인하게 되었다.

dmesg 의 일부 내용은 다음과 같다.

[    0.000000] Warning: Intel CPU model - this hardware has not undergone testing by Red Hat and might not be certified. Please consult https://hardware.redhat.com for certified hardware.

메시지만 보아도 RedHat 이 커널에 무슨짓을 했을것 같은 느낌이다. RHEL7 의 kernel-3.10.0-229.el7.src.rpm 을 내려받고 소스코드를 확인해 보았다.

arch/x86/kernel/setup.csetup_arch() 함수 제일 마지막 부분에서 rh_check_supported() 를 호출하게 된다.

static void rh_check_supported(void)
{
        // 생략

        /* RHEL only supports Intel and AMD processors */
        if ((boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) &&
            (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)) {
                pr_crit("Detected processor %s %s\n",
                        boot_cpu_data.x86_vendor_id,
                        boot_cpu_data.x86_model_id);
                mark_hardware_unsupported("Processor");
        }

        /* Intel CPU family 6, model greater than 60 */
        if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
            ((boot_cpu_data.x86 == 6))) {
                switch (boot_cpu_data.x86_model) {
                case 77: /* Atom Avoton */
                case 70: /* Crystal Well */
                case 69: /* Haswell ULT */
                        break;
                default:
                        if (boot_cpu_data.x86_model > 63) {
                                printk(KERN_CRIT
                                       "Detected CPU family %d model %d\n",
                                       boot_cpu_data.x86,
                                       boot_cpu_data.x86_model);
                                mark_hardware_unsupported("Intel CPU model");
                        }
                        break;
                }
        }

        // 생략
}

CPU family 6 중 model number 63 은 Haswell (Server) 에 해당된다. crash 발생한 장비의 cpu 의 model number 는 79 Broadwell (Server) 이었다. 위 코드는 실제 kernel 동작과는 관련이 없는 단순 warning 일 뿐이지만 문제 상황시 RedHat 은 위 내용을 근거로 기술지원 여부를 판단하게 될것 같다.(추측)

kernel 의 CPU 관련 구현들을 알면 알수록 역시 kernel 은 최신 버전을 사용하는게 좋다고 생각이 든다.