{"id":6368,"date":"2024-03-10T17:46:48","date_gmt":"2024-03-10T17:46:48","guid":{"rendered":"https:\/\/really.zonky.org\/?p=6368"},"modified":"2024-03-10T17:46:52","modified_gmt":"2024-03-10T17:46:52","slug":"asrock-trx50-ws-threadripper-7970x","status":"publish","type":"post","link":"https:\/\/really.zonky.org\/?p=6368","title":{"rendered":"ASRock TRX50 WS &#038; Threadripper 7970X"},"content":{"rendered":"\n<p>This is a collection of notes from my upgrade to an ASRock TRX50 WS motherboard fitted with an AMD Threadripper 7970X processor (32 cores) and 256Gbytes of memory. The upgrade meant that I retained the case, drives, graphics card, etc. from the previous system. <\/p>\n\n\n\n<p>Most of the problems encountered were due to user stupidity.<\/p>\n\n\n\n<p>First of all, whilst many of us have heard about the amount of time that DDR5 takes to &#8220;calibrate&#8221; itself, what I <em>didn&#8217;t<\/em> know was that the firmware status code shows &#8220;00&#8221; during this process (a dedicated &#8220;I&#8217;m messing with memory&#8221; code would be handy). And whilst it takes a while to do, if it takes longer than about 5m, then something else is wrong.<\/p>\n\n\n\n<p>In my case it turned out that I hadn&#8217;t read the instructions properly and I hadn&#8217;t connected enough power connectors. To get it to work, I needed the usual 24-pin power connector, an 8-pin connector, <em>and<\/em> a 6-pin connector all connected on the &#8220;drive&#8221; side of the motherboard (opposite the side with the PCIe slots). Once that was sorted, the system was up and running.<\/p>\n\n\n\n<p>The remaining notes relate to &#8220;tweaking&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Booting Linux<\/h2>\n\n\n\n<p>Of course I use Linux, what the hell else would I use? FreeBSD? Well, that would be a good choice.<\/p>\n\n\n\n<p>The biggest problem I had booting Linux was changing the <em>netplan<\/em> configuration to pick up the new network interfaces. In my case, the Marvell interface (the 10G one) came up as <em>enp65s0<\/em> and the Realtek interface (the 2.5G one) as <em>enp69s0<\/em>. Because I&#8217;m bound to plug the cable into the wrong interface, I simply bonded the two interfaces together; the relevant section of my <em>netplan<\/em> configuration is as follows :-<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>network:\n  version: 2\n  renderer: networkd\n  bonds:\n    james:\n      interfaces: &#91;enp65s0, enp69s0]\n  ethernets:\n    enp65s0: {}\n    enp69s0: {}\n  bridges:<\/code><\/pre>\n\n\n\n<p>Yes, you can choose silly names here. And yes the bonding works fine &#8211; just now I swapped the cable over to the &#8220;right&#8221; NIC with numerous active network connections, and everything stayed alive. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Firmware Upgrade<\/h2>\n\n\n\n<p>The motherboard was supplied with version 6.04 of the firmware (I refuse to call this a &#8220;BIOS&#8221; because it just isn&#8217;t &#8220;basic&#8221; any more) whereas the latest was 7.09. The process is fairly simple :-<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download the relevant firmware version from <a href=\"https:\/\/www.asrock.com\/mb\/AMD\/TRX50%20WS\/index.asp#BIOS\">https:\/\/www.asrock.com\/mb\/AMD\/TRX50%20WS\/index.asp#BIOS<\/a>. <\/li>\n\n\n\n<li>Save it to a FAT32 USB disk &#8211; I used a vfat formatted disk and I have a sneaking suspicion that exFAT will work too. The &#8220;Instant Flash&#8221; instructions by ASRock are obviously somewhat dated &#8211; it even mentions that saving to a floppy disk will work!<\/li>\n\n\n\n<li>Reboot the system and start the UEFI firmware. Select &#8220;Tools&#8221; and &#8220;Instant Flash&#8221;.<\/li>\n\n\n\n<li>Follow the on-screen instructions.<\/li>\n<\/ol>\n\n\n\n<p>If you&#8217;re replacing a motherboard you won&#8217;t need detailed instructions here, but it is worth mentioning that the process takes a couple of reboots, and the second involves doing that memory calibration thing, so it takes an unusually long time to start.<\/p>\n\n\n\n<p>I didn&#8217;t go to the effort to time the whole process, but my system went down at 18:04 and was back up at 18:15. So roughly 10 minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SlimSAS<\/h2>\n\n\n\n<p>This isn&#8217;t currently 100% confident as I haven&#8217;t plugged anything in yet (ignoring a failed attempt when I assumed it work just work), but the SlimSAS ports can be configured for SATA mode in the firmware. Just go to <em>Advanced<\/em>, <em>Chipset<\/em>, go to the end of the list (which involves scrolling) past the settings for the PCIe slot configuration parameters and set :-<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SLIMSAS1 Mode: SATA<\/li>\n\n\n\n<li>SLIMSAS2 Mode: SATA<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Firmware Settings<\/h2>\n\n\n\n<p>The following settings are what <em>I<\/em> chose to set based on a very quick session search Duckduckgo for explanations. The built-in documentation is somewhat lacking although there are URLs (encoded as QR codes) for more details. This is one area where firmware authors should pay more attention &#8211; even if they just hinted which settings work best for Windows, which work best for Linux, and which ones are for compatibility for older hardware.<\/p>\n\n\n\n<p>The choices I&#8217;ve made may not be the best, but it seems to be working. Some of the explanations may be off, so I&#8217;d welcome corrections. All of these settings are found under the &#8220;Advanced&#8221; tab of the firmware page :-<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CPU Configuration<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>SMT: Or &#8220;hyperthreading&#8221;. It is possible some scientific computing workloads might work better with this turned off, but my recommendation is to leave it to &#8220;Auto&#8221;.<\/li>\n\n\n\n<li>CPB &#8211; Core performance boost: presumably allows one core to accelerate when other cores are idle. Left on &#8220;Auto&#8221;.<\/li>\n\n\n\n<li>Global C-State control: related to power-saving. There&#8217;s a suggestion that disabling this may result in extra stability. Disabled.<\/li>\n\n\n\n<li>Local APIC Mode: controls how the APIC appears to the operating system with choices of Auto, Compatible, xAPIC, or 2xAPIC. Supposedly 2xAPIC allows for greater efficiency on higher core counts. Set to 2xAPIC.<\/li>\n\n\n\n<li>L1 Stream HW Prefetcher: Enables or disabled pre-fetching memory into cache. Enabled.<\/li>\n\n\n\n<li>L2 Stream HW Prefetcher: Enables or disabled pre-fetching memory into cache. Enabled.<\/li>\n\n\n\n<li>SMEE (SME?): Secure memory (i.e. encrypted) for virtual machines. Not likely to make much difference in my case as I&#8217;m the exclusive owner of both the &#8220;host&#8221; and all of the virtual machines running on it. Left as &#8220;Auto&#8221;.<\/li>\n\n\n\n<li>SEV-ES ASID Space Limit Control: More on virtual machine security. Left on Auto.<\/li>\n\n\n\n<li>SVM mode: This option seemed to disappear on the upgrade to 7.09. If this does appear, enable it.<\/li>\n\n\n\n<li>ROM Armor: protection for SPI flash. Left as Enabled. <\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Chipset<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>IOMMU: virtual machine I\/O virtualisation to allow PCIe pass-through to a virtual machine. Enabled.<\/li>\n\n\n\n<li>ACS: More I\/O virtualisation. Suggestions hinting at allowing PCIe\u2190\u2192PCIe transfers. Some hints at better IOMMU set up. Enabled.<\/li>\n\n\n\n<li>Enable AER Cap: PCIe error handling. Presumably disabling Linux AER error handling. Disabled.<\/li>\n\n\n\n<li>PCIe ARI Support: Enables support for ARI which allows a device to more easily support pretending to be multiple devices (so a graphics card could be shared amongst multiple virtual machines). Although card support for this is probably quite rare, I enabled it anyway.<\/li>\n\n\n\n<li>PCIe Ten Bit Tag Support: Allows a supporting device to use greater bandwidth and lower latency. Enabled.<\/li>\n\n\n\n<li>NUMA node(s) per socket: It is suggested that this allows the processor&#8217;s CCXes (the &#8216;core complex&#8217; that appears as individual chiplets in an AMD processor) to operate as separate NUMA nodes. Set to NPS4.<\/li>\n\n\n\n<li>ACPI SRAC L3 Cache as NUMA domain: It is suggested that this also allows each CCX to function as a NUMA node. Enabled.<\/li>\n\n\n\n<li>TSME: Or Transparent SME. Support for SME is done by the firmware rather than the OS. Disabled.<\/li>\n\n\n\n<li>HPET: High Precision Timer. Enables support for a newer way of doing timing. Enabled.<\/li>\n\n\n\n<li>&#8230; (missing details because they weren&#8217;t of interest to me)<\/li>\n\n\n\n<li>SLIMSAS1 Mode\/SLIMSAS2 Mode: As mentioned previously, allows switching the SlimSAS ports from supporting NVME devices to supporting SATA devices. Switched to SATA mode! <\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">PCI<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>PCI latency timer: How many clock cycles a 32-bit PCIe card can hang onto the bus for. Leave alone (32 cycles).<\/li>\n\n\n\n<li>PCI-X latency timer: How many clock  cycles a 64-bit PCIe card can hang onto the bus for. Leave alone.<\/li>\n\n\n\n<li>VGA Palette Snoop: Whether to allow other cards to snoop on the VGA palette which is used by older cards for video encoding and the like. Disabled.<\/li>\n\n\n\n<li>PERR# Generation: Something to do with PCIe card errors. Left alone.<\/li>\n\n\n\n<li>SERR# Generation: Something to do with PCIe card errors. Left alone.<\/li>\n\n\n\n<li>Above 4G Decoding: Allows card to specify a 64-bit address to house their memory window. Enabled.<\/li>\n\n\n\n<li>Re-size BAR Support: Allows a card to negotiate a larger address window than the default of 256Mbytes. Enabled.<\/li>\n\n\n\n<li>SR-IOV Support: Where PCIe cards allow, enables the creation of virtual devices to be allocated to virtual machines. Enabled.<\/li>\n\n\n\n<li>BME DMA Mitigation: Re-enable Bus Master Attribute after SMM is locked. Whatever that means! Left disabled.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"180\" src=\"https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=695%2C180&#038;ssl=1\" alt=\"\" class=\"wp-image-6373\" srcset=\"https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=1024%2C265&amp;ssl=1 1024w, https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=300%2C78&amp;ssl=1 300w, https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=768%2C199&amp;ssl=1 768w, https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=1536%2C397&amp;ssl=1 1536w, https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?resize=2048%2C530&amp;ssl=1 2048w, https:\/\/i0.wp.com\/really.zonky.org\/wp-content\/uploads\/2024-03-01_2215.png?w=1390&amp;ssl=1 1390w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>This is a collection of notes from my upgrade to an ASRock TRX50 WS motherboard fitted with an AMD Threadripper 7970X processor (32 cores) and 256Gbytes of memory. The upgrade meant that I retained the case, drives, graphics card, etc. from the previous system. Most of the problems encountered were due to user stupidity. First <a href='https:\/\/really.zonky.org\/?p=6368' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_share_on_mastodon":"0"},"categories":[4,226],"tags":[2212,2214,1593,2213],"class_list":["post-6368","post","type-post","status-publish","format-standard","hentry","category-it","category-working-notes","tag-asrock","tag-motherboard","tag-threadripper","tag-trx50-ws","category-4-id","category-226-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"share_on_mastodon":{"url":"https:\/\/mstdn.social\/@grumpygrimnir\/112072642418392236","error":""},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p1f2KI-1EI","_links":{"self":[{"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/posts\/6368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/really.zonky.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6368"}],"version-history":[{"count":4,"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/posts\/6368\/revisions"}],"predecessor-version":[{"id":6374,"href":"https:\/\/really.zonky.org\/index.php?rest_route=\/wp\/v2\/posts\/6368\/revisions\/6374"}],"wp:attachment":[{"href":"https:\/\/really.zonky.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/really.zonky.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/really.zonky.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}