不能保留 512MB 或更多的 CMA [英] Cannot reserve 512MB or more of CMA

查看:64
本文介绍了不能保留 512MB 或更多的 CMA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在具有 64GB 内存的 ARM64 机器上保留 512MB 的 CMA 内存,并且在 linux 启动期间我会收到cma:无法保留 512MiB"错误消息.保留 384MB 工作正常.如果您需要更多信息,请告诉我.我很感激任何帮助.

I'm trying to reserve 512MB of CMA memory on an ARM64 box with 64GB of memory, and I'll get "cma: Failed to reserve 512MiB" error message during linux boot. Reserving 384MB works fine. Please let me know if you need further info. I'd appreciate any help.

[ESL_Start_OS]:[644L] Start to jump Linux kernel
    Booting Linux on physical CPU 0x10000
    Initializing cgroup subsys cpuset
    Initializing cgroup subsys cpu
    Initializing cgroup subsys cpuacct
    Linux version 4.1.0+ (s00327669@salem-linux) (gcc version 4.9.3 20141031 (prerelease) (Linaro GCC 2014.11) ) #4 SMP Mon Oct 5 12:00:57 EDT 2015
    CPU: AArch64 Processor [411fd071] revision 1
    Detected PIPT I-cache on CPU0
    alternatives: enabling workaround for ARM erratum 832075
    earlycon: Early serial console at MMIO32 0x60300000 (options '')
    bootconsole [uart0] enabled
    efi: Getting EFI parameters from FDT:
    efi: UEFI not found.
    cma: Failed to reserve 512 MiB
    PERCPU: Embedded 16 pages/cpu @ffffffd7bfa00000 s27648 r8192 d29696 u65536
    Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16514064
    Kernel command line: rdinit=/init console=ttyS0,115200 earlycon=uart8250,mmio32,0x60300000 cma=512M                                                                                                 
    log_buf_len individual max cpu contribution: 4096 bytes
    log_buf_len total cpu_extra contributions: 126976 bytes
    log_buf_len min size: 16384 bytes
    log_buf_len: 262144 bytes
    early log buf free: 14220(86%)
    PID hash table entries: 4096 (order: 3, 32768 bytes)
    Dentry cache hash table entries: 8388608 (order: 14, 67108864 bytes)
    Inode-cache hash table entries: 4194304 (order: 13, 33554432 bytes)
    software IO TLB [mem 0x3bbff000-0x3fbff000] (64MB) mapped at [ffffffc03bbff000-ffffffc03fbfefff]
    Memory: 65469716K/67104768K available (6109K kernel code, 537K rwdata, 2516K rodata, 436K init, 226K bss, 1635052K reserved, 0K cma-reserved)
    Virtual kernel memory layout:
        vmalloc : 0xffffff8000000000 - 0xffffffbdbfff0000   (   246 GB)
        vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)
                  0xffffffbdc0000000 - 0xffffffbe20000000   (  1536 MB actual)
        fixed   : 0xffffffbffabfd000 - 0xffffffbffac00000   (    12 KB)
        PCI I/O : 0xffffffbffae00000 - 0xffffffbffbe00000   (    16 MB)
        modules : 0xffffffbffc000000 - 0xffffffc000000000   (    64 MB)
        memory  : 0xffffffc000000000 - 0xffffffd800000000   ( 98304 MB)
          .init : 0xffffffc0008ef000 - 0xffffffc00095c000   (   436 KB)
          .text : 0xffffffc000080000 - 0xffffffc0008ee7c4   (  8634 KB)
          .data : 0xffffffc000965000 - 0xffffffc0009eb400   (   537 KB)
    SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=32, Nodes=1
    Hierarchical RCU implementation.
            Additional per-CPU info printed with stalls.
    NR_IRQS:64 nr_irqs:64 0
    ITS: /interrupt-controller@6d000000/interrupt-controller@6c000000
    ITS: allocated 65536 Devices @17b9480000 (psz 4K, shr 2)
    ITS: allocated 512 Virtual CPUs @17b9418000 (psz 4K, shr 2)
    ITS: allocated 512 Interrupt Collections @17b9419000 (psz 4K, shr 2)
    ITS: /interrupt-controller@6d000000/interrupt-controller@4c000000
    ITS: allocated 65536 Devices @17b9500000 (psz 4K, shr 2)
    ITS: allocated 512 Virtual CPUs @17b9432000 (psz 4K, shr 2)
    ITS: allocated 512 Interrupt Collections @17b9433000 (psz 4K, shr 2)
    ITS: /interrupt-controller@6d000000/interrupt-controller@c6000000
    ITS: allocated 65536 Devices @17b9580000 (psz 4K, shr 2)
    ITS: allocated 512 Virtual CPUs @17b943d000 (psz 4K, shr 2)
    ITS: allocated 512 Interrupt Collections @17b943e000 (psz 4K, shr 2)
    ITS: /interrupt-controller@6d000000/interrupt-controller@a3000000
    ITS: allocated 65536 Devices @17b9600000 (psz 4K, shr 2)
    ITS: allocated 512 Virtual CPUs @17b9467000 (psz 4K, shr 2)
    ITS: allocated 512 Interrupt Collections @17b9468000 (psz 4K, shr 2)
    ITS: /interrupt-controller@6d000000/interrupt-controller@b7000000
    ITS: allocated 65536 Devices @17b9700000 (psz 4K, shr 2)
    ITS: allocated 512 Virtual CPUs @17b9681000 (psz 4K, shr 2)
    ITS: allocated 512 Interrupt Collections @17b9682000 (psz 4K, shr 2)
    GIC: using LPI property table @0x00000017b96a0000
    ITS: Allocated 1792 chunks for LPIs
    CPU0: found redistributor 10000 region 1:0x000000004d100000
    CPU0: using LPI pending table @0x00000017b96b0000
    MBIGEN: /peripherals/interrupt-controller@4c030000
    MBIGEN: /peripherals/interrupt-controller@6c030000
    MBIGEN: /peripherals/interrupt-controller@c6030000
    MBIGEN: /peripherals/interrupt-controller@a3030000
    MBIGEN: /peripherals/interrupt-controller@b7030000
    Architected cp15 timer(s) running at 50.00MHz (phys).
    clocksource arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xb8812736b, max_idle_ns: 440795202655 ns
    sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 4398046511100ns
    Console: colour dummy device 80x25
    Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=200000)
    pid_max: default: 32768 minimum: 301
    Security Framework initialized
    Mount-cache hash table entries: 131072 (order: 8, 1048576 bytes)
    Mountpoint-cache hash table entries: 131072 (order: 8, 1048576 bytes)
    Initializing cgroup subsys memory
    Initializing cgroup subsys devices
    Initializing cgroup subsys freezer
    Initializing cgroup subsys hugetlb
    hw perfevents: enabled with arm/armv8-pmuv3 PMU driver, 7 counters available
    EFI services will not be available.
    CPU1: Booted secondary processor
    Detected PIPT I-cache on CPU1
    CPU1: found redistributor 10001 region 1:0x000000004d130000
    CPU1: using LPI pending table @0x00000017b8ee0000
    CPU2: Booted secondary processor
    Detected PIPT I-cache on CPU2
    CPU2: found redistributor 10002 region 1:0x000000004d160000
    CPU2: using LPI pending table @0x00000017b8f10000
    CPU3: Booted secondary processor
    Detected PIPT I-cache on CPU3
    CPU3: found redistributor 10003 region 1:0x000000004d190000
    CPU3: using LPI pending table @0x00000017b8f40000
    CPU4: Booted secondary processor
    Detected PIPT I-cache on CPU4
    CPU4: found redistributor 10100 region 1:0x000000004d1c0000
    CPU4: using LPI pending table @0x00000017b8f80000
    CPU5: Booted secondary processor
    Detected PIPT I-cache on CPU5
    CPU5: found redistributor 10101 region 1:0x000000004d1f0000
    CPU5: using LPI pending table @0x00000017b8fa0000
    CPU6: Booted secondary processor
    Detected PIPT I-cache on CPU6
    CPU6: found redistributor 10102 region 1:0x000000004d220000
    CPU6: using LPI pending table @0x00000017b8fd0000
    CPU7: Booted secondary processor
    Detected PIPT I-cache on CPU7
    CPU7: found redistributor 10103 region 1:0x000000004d250000
    CPU7: using LPI pending table @0x00000017b8800000
    CPU8: Booted secondary processor
    Detected PIPT I-cache on CPU8
    CPU8: found redistributor 10200 region 1:0x000000004d280000
    CPU8: using LPI pending table @0x00000017b8840000
    CPU9: Booted secondary processor
    Detected PIPT I-cache on CPU9
    CPU9: found redistributor 10201 region 1:0x000000004d2b0000
    CPU9: using LPI pending table @0x00000017b8870000
    CPU10: Booted secondary processor
    Detected PIPT I-cache on CPU10
    CPU10: found redistributor 10202 region 1:0x000000004d2e0000
    CPU10: using LPI pending table @0x00000017b88b0000
    CPU11: Booted secondary processor
    Detected PIPT I-cache on CPU11
    CPU11: found redistributor 10203 region 1:0x000000004d310000
    CPU11: using LPI pending table @0x00000017b88e0000
    CPU12: Booted secondary processor
    Detected PIPT I-cache on CPU12
    CPU12: found redistributor 10300 region 1:0x000000004d340000
    CPU12: using LPI pending table @0x00000017b8910000
    CPU13: Booted secondary processor
    Detected PIPT I-cache on CPU13
    CPU13: found redistributor 10301 region 1:0x000000004d370000
    CPU13: using LPI pending table @0x00000017b8940000
    CPU14: Booted secondary processor
    Detected PIPT I-cache on CPU14
    CPU14: found redistributor 10302 region 1:0x000000004d3a0000
    CPU14: using LPI pending table @0x00000017b8970000
    CPU15: Booted secondary processor
    Detected PIPT I-cache on CPU15
    CPU15: found redistributor 10303 region 1:0x000000004d3d0000
    CPU15: using LPI pending table @0x00000017b89a0000
    CPU16: Booted secondary processor
    Detected PIPT I-cache on CPU16
    CPU16: found redistributor 20000 region 0:0x000000006d100000
    CPU16: using LPI pending table @0x00000017b89e0000
    CPU17: Booted secondary processor
    Detected PIPT I-cache on CPU17
    CPU17: found redistributor 20001 region 0:0x000000006d130000
    CPU17: using LPI pending table @0x00000017b8a10000
    CPU18: Booted secondary processor
    Detected PIPT I-cache on CPU18
    CPU18: found redistributor 20002 region 0:0x000000006d160000
    CPU18: using LPI pending table @0x00000017b8a40000
    CPU19: Booted secondary processor
    Detected PIPT I-cache on CPU19
    CPU19: found redistributor 20003 region 0:0x000000006d190000
    CPU19: using LPI pending table @0x00000017b8a80000
    CPU20: Booted secondary processor
    Detected PIPT I-cache on CPU20
    CPU20: found redistributor 20100 region 0:0x000000006d1c0000
    CPU20: using LPI pending table @0x00000017b8aa0000
    CPU21: Booted secondary processor
    Detected PIPT I-cache on CPU21
    CPU21: found redistributor 20101 region 0:0x000000006d1f0000
    CPU21: using LPI pending table @0x00000017b8ad0000
    CPU22: Booted secondary processor
    Detected PIPT I-cache on CPU22
    CPU22: found redistributor 20102 region 0:0x000000006d220000
    CPU22: using LPI pending table @0x00000017b8b10000
    CPU23: Booted secondary processor
    Detected PIPT I-cache on CPU23
    CPU23: found redistributor 20103 region 0:0x000000006d250000
    CPU23: using LPI pending table @0x00000017b8b40000
    CPU24: Booted secondary processor
    Detected PIPT I-cache on CPU24
    CPU24: found redistributor 20200 region 0:0x000000006d280000
    CPU24: using LPI pending table @0x00000017b8b70000
    CPU25: Booted secondary processor
    Detected PIPT I-cache on CPU25
    CPU25: found redistributor 20201 region 0:0x000000006d2b0000
    CPU25: using LPI pending table @0x00000017b8bb0000
    CPU26: Booted secondary processor
    Detected PIPT I-cache on CPU26
    CPU26: found redistributor 20202 region 0:0x000000006d2e0000
    CPU26: using LPI pending table @0x00000017b8be0000
    CPU27: Booted secondary processor
    Detected PIPT I-cache on CPU27
    CPU27: found redistributor 20203 region 0:0x000000006d310000
    CPU27: using LPI pending table @0x00000017b8400000
    CPU28: Booted secondary processor
    Detected PIPT I-cache on CPU28
    CPU28: found redistributor 20300 region 0:0x000000006d340000
    CPU28: using LPI pending table @0x00000017b8450000
    CPU29: Booted secondary processor
    Detected PIPT I-cache on CPU29
    CPU29: found redistributor 20301 region 0:0x000000006d370000
    CPU29: using LPI pending table @0x00000017b8470000
    CPU30: Booted secondary processor
    Detected PIPT I-cache on CPU30
    CPU30: found redistributor 20302 region 0:0x000000006d3a0000
    CPU30: using LPI pending table @0x00000017b84b0000
    CPU31: Booted secondary processor
    Detected PIPT I-cache on CPU31
    CPU31: found redistributor 20303 region 0:0x000000006d3d0000
    CPU31: using LPI pending table @0x00000017b84e0000
    Brought up 32 CPUs
    SMP: Total of 32 processors activated.
    CPU: All CPU(s) started at EL2
    alternatives: patching kernel code
    devtmpfs: initialized
    DMI not present or invalid.
    clocksource jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
    atomic64_test: passed
    pinctrl core: initialized pinctrl subsystem
    NET: Registered protocol family 16
    cpuidle: using governor ladder
    cpuidle: using governor menu
    vdso: 2 pages (1 code @ ffffffc00096d000, 1 data @ ffffffc00096c000)
    hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
    DMA: preallocated 256 KiB pool for atomic allocations
    Serial: AMBA PL011 UART driver
    hisi-smmu 40040000.smmu_pa: registered 0 master devices
    hisi-smmu 40040000.smmu_pa: probing hardware configuration...
    hisi-smmu 40040000.smmu_pa:     nested translation
    hisi-smmu 40040000.smmu_pa:     coherent table walk
    hisi-smmu 40040000.smmu_pa:     39-bit VA, 39-bit IPA, 48-bit PA
    hisi-smmu 60040000.smmu_pc: registered 0 master devices
    hisi-smmu 60040000.smmu_pc: probing hardware configuration...
    hisi-smmu 60040000.smmu_pc:     nested translation
    hisi-smmu 60040000.smmu_pc:     coherent table walk
    hisi-smmu 60040000.smmu_pc:     39-bit VA, 39-bit IPA, 48-bit PA
    hisi-smmu c0040000.smmu_dsa: registered 0 master devices
    hisi-smmu c0040000.smmu_dsa: probing hardware configuration...
    hisi-smmu c0040000.smmu_dsa:    nested translation
    hisi-smmu c0040000.smmu_dsa:    coherent table walk
    hisi-smmu c0040000.smmu_dsa:    39-bit VA, 39-bit IPA, 48-bit PA
    Warning: Mbigen device id already exist.Old:0x2,new:0x20
    hisi-smmu a0040000.smmu_m3: registered 0 master devices
    hisi-smmu a0040000.smmu_m3: probing hardware configuration...
    hisi-smmu a0040000.smmu_m3:     nested translation
    hisi-smmu a0040000.smmu_m3:     coherent table walk
    hisi-smmu a0040000.smmu_m3:     39-bit VA, 39-bit IPA, 48-bit PA
    hisi-smmu b0040000.smmu_pcie: registered 0 master devices
    hisi-smmu b0040000.smmu_pcie: probing hardware configuration...
    hisi-smmu b0040000.smmu_pcie:   nested translation
    hisi-smmu b0040000.smmu_pcie:   coherent table walk
    hisi-smmu b0040000.smmu_pcie:   39-bit VA, 39-bit IPA, 48-bit PA
    vgaarb: loaded
    SCSI subsystem initialized
    usbcore: registered new interface driver usbfs
    usbcore: registered new interface driver hub
    usbcore: registered new device driver usb
    Warning: Mbigen device id already exist.Old:0x1,new:0x10
    Warning: Mbigen device id already exist.Old:0x3,new:0x30
    Warning: Mbigen device id already exist.Old:0x3,new:0x30
    Switched to clocksource arch_sys_counter
    NET: Registered protocol family 2
    TCP established hash table entries: 524288 (order: 10, 4194304 bytes)
    TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
    TCP: Hash tables configured (established 524288 bind 65536)
    UDP hash table entries: 32768 (order: 8, 1048576 bytes)
    UDP-Lite hash table entries: 32768 (order: 8, 1048576 bytes)
    NET: Registered protocol family 1
    RPC: Registered named UNIX socket transport module.
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    RPC: Registered tcp NFSv4.1 backchannel transport module.
    Unpacking initramfs...
    Freeing initrd memory: 409600K (ffffffc007000000 - ffffffc020000000)
    futex hash table entries: 8192 (order: 7, 524288 bytes)
    audit: initializing netlink subsys (disabled)
    audit: type=2000 audit(5.048:1): initialized
    HugeTLB registered 2 MB page size, pre-allocated 0 pages
    VFS: Disk quotas dquot_6.6.0
    VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
    NFS: Registering the id_resolver key type
    Key type id_resolver registered
    Key type id_legacy registered
    fuse init (API version 7.23)
    9p: Installing v9fs 9p2000 file system support
    bounce: pool size: 64 pages
    Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
    io scheduler noop registered
    io scheduler cfq registered (default)
    hisi-pcie b0080000.pcie: Link up
    PCI host bridge /pcie@0xb0080000 ranges:
      MEM 0xb4100000..0xb4ffffff -> 0xb4100000
    hisi-pcie b0080000.pcie: PCI host bridge to bus 0000:10
    pci_bus 0000:10: root bus resource [bus 10-1f]
    pci_bus 0000:10: root bus resource [mem 0xb4100000-0xb4ffffff]
    pci 0000:10:00.0: IOMMU is currently not supported for PCI
    pci 0000:10:00.0: of_irq_parse_pci() failed with rc=-22
    pci 0000:10:00.0: Primary bus is hard wired to 0
    pci 0000:10:00.0: bridge configuration invalid ([bus 01-01]), reconfiguring
    pci 0000:11:00.0: IOMMU is currently not supported for PCI
    pci 0000:11:00.0: of_irq_parse_pci() failed with rc=-22
    pci 0000:10:00.0: BAR 0: no space for [mem size 0x10000000]
    pci 0000:10:00.0: BAR 0: failed to assign [mem size 0x10000000]
    pci 0000:10:00.0: BAR 8: assigned [mem 0xb4200000-0xb43fffff]
    pci 0000:11:00.0: BAR 0: assigned [mem 0xb4200000-0xb43fffff]
    pci 0000:10:00.0: PCI bridge to [bus 11]
    pci 0000:10:00.0:   bridge window [mem 0xb4200000-0xb43fffff]
    Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    console [ttyS0] disabled
    60300000.uart: ttyS0 at MMIO 0x60300000 (irq = 12, base_baud = 12500000) is a 16550A
    console [ttyS0] enabled
    console [ttyS0] enabled
    bootconsole [uart0] disabled
    bootconsole [uart0] disabled
    msm_serial: driver initialized
    Unable to detect cache hierarcy from DT for CPU 0
    loop: module loaded
    at24 1-0052: 16384 byte 24c128 EEPROM, writable, 64 bytes/write
    Loading iSCSI transport class v2.0-870.
    rdac: device handler registered
    hp_sw: device handler registered
    emc: device handler registered
    alua: device handler registered

推荐答案

在启用 CONFIG_ZONE_DMA 的情况下,正如 arm64 上的默认设置一样,CMA 仅限于具有 32 位寻址功能的设备可以访问的物理内存.因此,如果 4GB 边界以下没有足够的可用 RAM 来找到连续的 512MB 块 (足够对齐)然后它就会失败,无论更高地址有多少内存.这将取决于机器的确切物理内存映射、内核加载的位置、引导加载程序所做的保留等.

With CONFIG_ZONE_DMA enabled, as it is by default on arm64, CMA is restricted to physical memory that devices with 32-bit addressing capabilities can access. Therefore if there isn't enough free RAM below the 4GB boundary to find a contiguous 512MB block (with sufficient alignment) then it's going to fail, regardless of how much RAM exists at higher addresses. That's going to depend on the exact physical memory map of the machine, where the kernel is loaded, what reservations the bootloader has made, etc.

通过比较,我可以很高兴地使用 cma=1024M 启动我的开发板之一 - 那个 内存低于 4GB, 内核在底部附近加载,在顶部附近只有一个小的固件预留,显然设法在两者之间找到了足够大的空间.禁用 ZONE_DMA 的同一个内核很高兴地分配了 4GB 的 CMA(它只能从上面的 6GB 块中出来),但我没有仔细观察所有外围设备损坏的严重程度,并有可能获得无法访问的 DMA 地址.

By way of comparison, I could happily boot one of my dev boards with cma=1024M - that one has 2GB of RAM below 4GB, with the kernel loaded near the bottom and only a small firmware reservation near the top, and evidently managed to find a big enough space between the two. The same kernel with ZONE_DMA disabled happily allocated 4GB of CMA (which can only have come out of the upper 6GB block), but I didn't look closely at how badly broken all the peripherals were with the possibility of being given unreachable DMA addresses.

这篇关于不能保留 512MB 或更多的 CMA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆