Ubuntu – AMD Ryzen 5 3600 + Ubuntu 20.04 problems

acpiamd-ryzenmulti-core

I have Ryzen 5 3600, Gigabyte X570 GAMING X and Radeon RX 580 Series.
I installed Ubuntu 20.04 and it is loaded with kernel parameter 'acpi=off' but now system recognize only 1 core(lspcu, cut /proc/cpuinfo, nproc). When I remove 'acpi=off' – Ubuntu freezes on login screen. dmidecode -t processor recognize all cores. Can I somehow fix this issue? Searched in internet and already tried a lot but nothing helped. If dmidecode do recognize all cores – is it possible to refresh cpu cores info for OS after system boot?

lscpu:

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   43 bits physical, 48 bits virtual
CPU(s):                          1
On-line CPU(s) list:             0
Thread(s) per core:              1
Core(s) per socket:              1
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      23
Model:                           113
Model name:                      AMD Ryzen 5 3600 6-Core Processor
Stepping:                        0
CPU MHz:                         3800.277
BogoMIPS:                        7186.02
Virtualization:                  AMD-V
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        512 KiB
L3 cache:                        16 MiB
NUMA node0 CPU(s):               0

dmidecode -t processor:

# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.2.0 present.

Handle 0x000F, DMI type 4, 48 bytes
Processor Information
    Socket Designation: AM4
    Type: Central Processor
    Family: Zen
    Manufacturer: Advanced Micro Devices, Inc.
    ID: 10 0F 87 00 FF FB 8B 17
    Signature: Family 23, Model 113, Stepping 0
    Flags:
        FPU (Floating-point unit on-chip)
        VME (Virtual mode extension)
        DE (Debugging extension)
        PSE (Page size extension)
        TSC (Time stamp counter)
        MSR (Model specific registers)
        PAE (Physical address extension)
        MCE (Machine check exception)
        CX8 (CMPXCHG8 instruction supported)
        APIC (On-chip APIC hardware supported)
        SEP (Fast system call)
        MTRR (Memory type range registers)
        PGE (Page global enable)
        MCA (Machine check architecture)
        CMOV (Conditional move instruction supported)
        PAT (Page attribute table)
        PSE-36 (36-bit page size extension)
        CLFSH (CLFLUSH instruction supported)
        MMX (MMX technology supported)
        FXSR (FXSAVE and FXSTOR instructions supported)
        SSE (Streaming SIMD extensions)
        SSE2 (Streaming SIMD extensions 2)
        HTT (Multi-threading)
    Version: AMD Ryzen 5 3600 6-Core Processor              
    Voltage: 1.1 V
    External Clock: 100 MHz
    Max Speed: 4200 MHz
    Current Speed: 3600 MHz
    Status: Populated, Enabled
    Upgrade: Socket AM4
    L1 Cache Handle: 0x000C
    L2 Cache Handle: 0x000D
    L3 Cache Handle: 0x000E
    Serial Number: Unknown
    Asset Tag: Unknown
    Part Number: Unknown
    Core Count: 6
    Core Enabled: 6
    Thread Count: 12
    Characteristics:
        64-bit capable
        Multi-Core
        Hardware Thread
        Execute Protection
        Enhanced Virtualization
        Power/Performance Control

dmesg: (part)

[    0.000000] Linux version 5.4.0-28-generic (buildd@lgw01-amd64-036) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #32-Ubuntu SMP Wed Apr 22 17:40:10 UTC 2020 (Ubuntu 5.4.0-28.32-generic 5.4.30)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-28-generic root=UUID=85e3066a-bb82-4e1a-ab66-7ea3bb09fcfe ro acpi=off rcu_nocbs=0-11 maxcpus=6 quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Hygon HygonGenuine
[    0.000000]   Centaur CentaurHauls
[    0.000000]   zhaoxin   Shanghai  
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'compacted' format.
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009e01fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000009e02000-0x0000000009ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a20bfff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000000a20c000-0x00000000db7fffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000db800000-0x00000000db96cfff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000db96d000-0x00000000dbaeffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000dbaf0000-0x00000000dbf09fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000dbf0a000-0x00000000dcb78fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000dcb79000-0x00000000deffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000df000000-0x00000000dfffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fd000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000081f37ffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 3.2.0 present.
[    0.000000] DMI: Gigabyte Technology Co., Ltd. X570 GAMING X/X570 GAMING X, BIOS F12e 03/06/2020
[    0.000000] tsc: Fast TSC calibration failed
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] last_pfn = 0x81f380 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF write-through
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000000 mask FFFF80000000 write-back
[    0.000000]   1 base 000080000000 mask FFFFC0000000 write-back
[    0.000000]   2 base 0000C0000000 mask FFFFE0000000 write-back
[    0.000000]   3 base 0000DC2E0000 mask FFFFFFFF0000 uncachable
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] TOM2: 0000000820000000 aka 33280M
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  
[    0.000000] total RAM covered: 3583M
[    0.000000] Found optimal setting for mtrr clean up
[    0.000000]  gran_size: 64K    chunk_size: 64M     num_reg: 4      lose cover RAM: 0G
[    0.000000] e820: update [mem 0xdc2e0000-0xdc2effff] usable ==> reserved
[    0.000000] e820: update [mem 0xe0000000-0xffffffff] usable ==> reserved
[    0.000000] last_pfn = 0xdf000 max_arch_pfn = 0x400000000
[    0.000000] check: Scanning 1 areas for low memory corruption
[    0.000000] Using GB pages for direct mapping
[    0.000000] BRK [0x20b201000, 0x20b201fff] PGTABLE
[    0.000000] BRK [0x20b202000, 0x20b202fff] PGTABLE
[    0.000000] BRK [0x20b203000, 0x20b203fff] PGTABLE
[    0.000000] BRK [0x20b204000, 0x20b204fff] PGTABLE
[    0.000000] BRK [0x20b205000, 0x20b205fff] PGTABLE
[    0.000000] BRK [0x20b206000, 0x20b206fff] PGTABLE
[    0.000000] BRK [0x20b207000, 0x20b207fff] PGTABLE
[    0.000000] BRK [0x20b208000, 0x20b208fff] PGTABLE
[    0.000000] BRK [0x20b209000, 0x20b209fff] PGTABLE
[    0.000000] BRK [0x20b20a000, 0x20b20afff] PGTABLE
[    0.000000] BRK [0x20b20b000, 0x20b20bfff] PGTABLE
[    0.000000] BRK [0x20b20c000, 0x20b20cfff] PGTABLE
[    0.000000] RAMDISK: [mem 0x32195000-0x350c1fff]
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x000000081f37ffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x81f355000-0x81f37ffff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]
[    0.000000]   Normal   [mem 0x0000000100000000-0x000000081f37ffff]
[    0.000000]   Device   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009cfff]
[    0.000000]   node   0: [mem 0x0000000000100000-0x0000000009e01fff]
[    0.000000]   node   0: [mem 0x000000000a000000-0x000000000a1fffff]
[    0.000000]   node   0: [mem 0x000000000a20c000-0x00000000db7fffff]
[    0.000000]   node   0: [mem 0x00000000db96d000-0x00000000dbaeffff]
[    0.000000]   node   0: [mem 0x00000000dcb79000-0x00000000deffffff]
[    0.000000]   node   0: [mem 0x0000000100000000-0x000000081f37ffff]
[    0.000000] Zeroed struct page in unavailable ranges: 12516 pages
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000081f37ffff]
[    0.000000] On node 0 totalpages: 8376092
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 21 pages reserved
[    0.000000]   DMA zone: 3996 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 14128 pages used for memmap
[    0.000000]   DMA32 zone: 904192 pages, LIFO batch:63
[    0.000000]   Normal zone: 116686 pages used for memmap
[    0.000000]   Normal zone: 7467904 pages, LIFO batch:63
[    0.000000] SFI: Simple Firmware Interface v0.81 http://simplefirmware.org
[    0.000000] smpboot: Boot CPU (id 0) not listed by BIOS
[    0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009dfff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009e000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x09e02000-0x09ffffff]
[    0.000000] PM: Registered nosave memory: [mem 0x0a200000-0x0a20bfff]
[    0.000000] PM: Registered nosave memory: [mem 0xdb800000-0xdb96cfff]
[    0.000000] PM: Registered nosave memory: [mem 0xdbaf0000-0xdbf09fff]
[    0.000000] PM: Registered nosave memory: [mem 0xdbf0a000-0xdcb78fff]
[    0.000000] PM: Registered nosave memory: [mem 0xdf000000-0xdfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xe0000000-0xf7ffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xf8000000-0xfbffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfc000000-0xfcffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfd000000-0xffffffff]
[    0.000000] [mem 0xe0000000-0xf7ffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns
[    0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1
[    0.000000] percpu: Embedded 54 pages/cpu s184320 r8192 d28672 u2097152
[    0.000000] pcpu-alloc: s184320 r8192 d28672 u2097152 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 8245193
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-28-generic root=UUID=85e3066a-bb82-4e1a-ab66-7ea3bb09fcfe ro acpi=off rcu_nocbs=0-11 maxcpus=6 quiet splash vt.handoff=7
[    0.000000] Dentry cache hash table entries: 4194304 (order: 13, 33554432 bytes, linear)
[    0.000000] Inode-cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:on, heap free:off
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 32783340K/33504368K available (14339K kernel code, 2397K rwdata, 4948K rodata, 2712K init, 4992K bss, 721028K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] ftrace: allocating 44478 entries in 174 pages
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:   RCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.
[    0.000000]     Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 524544, nr_irqs: 32, preallocated irqs: 16
[    0.000000] random: crng done (trusting CPU's manufacturer)
[    0.000000] spurious 8259A interrupt: IRQ7.
[    0.000000] vt handoff: transparent VT on vt#7
[    0.000000] Console: colour dummy device 80x25
[    0.000000] printk: console [tty0] enabled
[    0.000000] APIC: ACPI MADT or MP tables are not detected
[    0.000000] APIC: Switch to virtual wire mode setup with no configuration
[    0.000000] Not enabling interrupt remapping due to skipped IO-APIC setup
[    0.012000] tsc: Using PIT calibration value
[    0.012000] tsc: Detected 3593.430 MHz processor
[    0.000002] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x33cc1529a9c, max_idle_ns: 440795274758 ns
[    0.000004] Calibrating delay loop (skipped), value calculated using timer frequency.. 7186.86 BogoMIPS (lpj=14373720)
[    0.000005] pid_max: default: 32768 minimum: 301
[    0.000041] LSM: Security Framework initializing
[    0.000048] Yama: becoming mindful.
[    0.000063] AppArmor: AppArmor initialized
[    0.000129] Mount-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.000171] Mountpoint-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.000188] *** VALIDATE tmpfs ***
[    0.000277] *** VALIDATE proc ***
[    0.000301] *** VALIDATE cgroup1 ***
[    0.000302] *** VALIDATE cgroup2 ***
[    0.000328] x86/cpu: User Mode Instruction Prevention (UMIP) activated
[    0.000372] LVT offset 1 assigned for vector 0xf9
[    0.000491] LVT offset 2 assigned for vector 0xf4
[    0.000524] Last level iTLB entries: 4KB 1024, 2MB 1024, 4MB 512
[    0.000525] Last level dTLB entries: 4KB 2048, 2MB 2048, 4MB 1024, 1GB 0
[    0.000526] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization
[    0.000527] Spectre V2 : Mitigation: Full AMD retpoline
[    0.000528] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch
[    0.000528] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier
[    0.000529] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl
[    0.000530] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp
[    0.004545] Freeing SMP alternatives memory: 40K
[    0.005626] smpboot: SMP disabled
[    0.005691] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[    0.005693] ... version:                0
[    0.005693] ... bit width:              48
[    0.005693] ... generic registers:      6
[    0.005694] ... value mask:             0000ffffffffffff
[    0.005694] ... max period:             00007fffffffffff
[    0.005694] ... fixed-purpose events:   0
[    0.005694] ... event mask:             000000000000003f
[    0.005708] rcu: Hierarchical SRCU implementation.
[    0.006083] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[    0.006096] smp: Bringing up secondary CPUs ...
[    0.006096] smp: Brought up 1 node, 1 CPU
[    0.006097] smpboot: Max logical packages: 1
[    0.006097] smpboot: Total of 1 processors activated (7186.86 BogoMIPS)
[    0.006675] devtmpfs: initialized

Thanks!!

Best Answer

[UPDATE Jul 2] TL,DR: If you have Ryzen 3600, just add this to your boot parameters:

pci=assign-busses apicmaintimer idle=poll reboot=cold,hard 

1. If using grub, open Terminal:

sudo nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=assign-busses apicmaintimer idle=poll reboot=cold,hard"

sudo update-grub

2. If using kernelstub (on POP! OS), open Terminal:

sudo kernelstub -a "pci=assign-busses apicmaintimer idle=poll reboot=cold,hard"

Restart and enjoy no crash whatsoever!


[UPDATE May 24] Trying out solution mentioned in the comment below by OP. Having SMT on at the moment. Will report if there's any problem.


I also have Ryzen 5 3600 and Gigabyte X570. You can't simply "refresh cpu cores info for OS after system boot" because it's not a boot problem. This is a power management problem that's probably because Linux kernel v5.4 ACPI features were not compatible with Ryzen Zen architecture. So Linux did not know whether a CPU core is idle or not and sometimes issued commands to shut it down when it's doing some work. That results in applications crash randomly, especially desktop GUI apps and video-related processes that require parallel processing.

When using "acpi=off", we explicitly told the kernel to disable all power management features. So that effectively disabled multi-core usage because the OS has no way to manage them.

TL,DR: After trying many different combos of BIOS settings and kernel boot parameters, I ended up having:

  • BIOS:

    • Global C State Control: Disabled

    • Power Idle Control: Typical Current Idle (that disable C6 states)

    • SMT: Disabled (very important, even only turning SMT off made CPU stuck soft lockup happened much less frequently.)

  • boot: (grub or kernelstub) acpi=ht irqpoll

Notes: "ht" means hyperthreading. That disabled ACPI almost completely except just enough to command the cpu cores. SMT = Simultaneous Multi Threads, that allow 1 core to run more than 1 thread (process) at the same time. But having buggy ACPI can cause trouble running SMT. Disabling it will result in showing only 6 physical cores instead of 12 logical cores, but that's ok. Video games even showed higher FPS rates when SMT is disabled.

Hope this helps :)

Related Question