Skylake Bus Speed Tip

Here is a quick tip:

System Information > Hardware Overview should not list “Bus Speed: 400 MHz” for Skylake processors, and in case you (still) see that, then please ask the developers of the used boot loader to fix this (SMBIOS) issue for you.

Note: sysctl hw should not report:

hw.busfrequency: 400000000
hw.busfrequency_min: 400000000
hw.busfrequency_max: 400000000

but:

hw.busfrequency: 100000000
hw.busfrequency_min: 100000000
hw.busfrequency_max: 100000000

But there is more. Check the value of the IOService:/clock-frequency and IOService:/cpuN@N/bus-frequency properties, with either IORegistryExplorer or ioreg, and note that they are also wrong.

Background information

Here is a bit of background information. We already know that the AppleSMBIOS.kext binary fetches the bus transfer rate from a SMBIOS type 132 structure, which is optional, and when that is missing in the SMBIOS, then it assumes that a quad pumped bus is used and multiplies the frequency by 4, as can be seen in the source code snippet from AppleSMBIOS:

    // Fetch cpu and bus nominal frequencies.

    SMB_ANCHOR_RESET(&anchor);
    if (findSMBIOSStructure(&anchor, kSMBTypeProcessorInformation,
        kSMBProcessorInformationMinSize))
    {
        const SMBProcessorInformation * cpuInfo =
            (const SMBProcessorInformation *) anchor.header;

        cpuSpeedMHz = cpuInfo->maximumClock;
        DEBUG_LOG("SMBIOS: CPU speed (MHz) = %u\n", cpuSpeedMHz);
        if (busSpeedMTs == 0)
        {
            busSpeedMTs = cpuInfo->externalClock;
            busSpeedMTs *= 4;  // Assume quad-pumped FSB
            DEBUG_LOG("SMBIOS: FSB speed (MT/s) = %u\n", busSpeedMTs);
        }
    }

Giving you the 400MHz instead of the expected 100MHz. Old stuff by now.

Simple Workaround

There are different ways of checking what frequency we should use, and one of the things that you can do is to check register ecx of CPUID leaf 0x16 which in this case will return a value of 100(MHz).

A simple workaround is to check whether or not a SMBIOS type 132 structure is injected, and if not then you divide the value of the External Clock frequency in your SMBIOS type 4 structure by 4.

Anyway. This information should help Slice and the Chameleon developers to fix this issue in their code 😉

Edit: Sorry. I asked Jens – a friend of mine – to update this blog article for me, but as usual… I didn’t make myself clear so he ended up mixing up stuff – the ARTFrequency was meant to become a next blog article. This was clearly my mistake, for which I apologise, because all Jens tried to do was help me. And he surely did.

Thank you Jens, for helping me during the holidays. We’re almost home – having a coffee in Madrid and I cannot wait to begin hacking the science out some of the unsolved problems 😉

6 thoughts on “Skylake Bus Speed Tip

    • Hi,

      I already replied in the comments section here but so far I have not received the required data. Please note that you need to contact me per e-mail, because I will not visit IM/reply to comments on IM.

  1. Hello pikeralpha ..

    For many weeks I´m trying almost continuously to solve a big problem and you are maybe my last hope, because you have very deep knowledge ..

    My system works, but extremely unresponsive and sluggish with nvda_drv=1, so that it is unusable. For example, the entire system works unresponsive and hangs / lags frequently up to 30 seconds, if I use a program, so that only the mouse can be moved.

    Also, my two major DAW programs Ableton Live and Bitwig Studio, which are very important for me, have big problems with audio playback and does not seem to cope with the CPUs.

    With nv_disable=1, the system works almost smoothly, but the audio playback still is full of crackling.

    On your website, I found a comment from someone who had the same problem on a DUAL XEON system. There I found that from you:

    ioreg -rp IODeviceTree -c IOACPIPlatformDevice -k cpu-type|grep cpu-type

    I got 192 times (!!) “CPU type” = . Actually, it should be 32 for 2x 8-core..(?)

    If you need more details, please look here:

    http://www.insanelymac.com/forum/topic/309899-asus-z10pe-d8-ws-•-2x-xeon-e5-2680-v3-•-clover-•-el-capitan-•-system-lags-freezes/

    http://www.tonymacx86.com/el-capitan-desktop-support/180510-asus-z10pe-d8-ws-2x-xeon-2680v3-clover-el-capitan-system-lags-hangs.html

    Also I gladly can mail anything whatever you need to get the issue on the track, like ioreg files, log files, DSDT / SSDT, etc.

    Please help me, because I no longer know what to try..

    Many Thanks to Spain! 🙂

    My system:

    – Asus Z10PE-D8 WS
    – DUAL XEON E5-2680 v3
    – 8x 4GB RDIMMs
    – MSI GTX 960 Gaming 4G
    – OS X 10.11.2
    – Clover

    – CPU BIOS setting: 2x 8-core instead of 2x 12-core

    • Absolutely not. I have had this discussion before with Slice (see Clover thread over on IM) and he was wrong before. Now have a look at the System Profiler examples that are floating around on the Internet, and you will see that it isn’t there… simply because what Clover injects (in SMBIOS) is wrong.

      Edit: The bus speed is 100 MHz and the Rated FSB may be quad pumped i.e. 100 MHz (the bus speed) x 4 = 400 MHz. Or with a bus speed of 200 MHz x 4 = 800 MHz.

      Now look at the CPU core speed i.e. bus speed x multiplier or 100 MHz x 40 = 4GHz and not 400 MHz x 40 = 16 GHz. This is also the reason why the scope in the Intel Power Gadget was broken before.

      Edit 2: I asked someone to check it for me and this is the result. Function getTSCFrequency() returns 3427489466 and that gives us a fsb frequency of: 3427489466 / 34 = 100808513 and then we divide the result by 1000000 to get 100.8 MHz.

Leave a comment