444: Can‘t open MIDR_EL1 sysfs entry和OSError: [Errno 12] Cannot allocate memory错误记录

在arm端侧设备上面运行模型的时候出现上述两个报错,这里主要对问题进行简单记录

1、444: Can't open MIDR_EL1 sysfs entry

444: Can't open MIDR_EL1 sysfs entry 错误通常与访问 /sys/devices/system/cpu/cpu*/regs/identification/midr_el1 文件失败有关。这个文件包含了处理器的架构信息,通常用于获取处理器的型号和特性。

产生原因:

  1. 权限问题:你可能没有足够的权限来读取这个文件。通常,只有 root 用户或具有适当权限的用户才能访问这些敏感的系统文件。

  2. 文件不存在:在某些情况下,这个文件可能不存在,可能是因为系统配置或内核版本的原因。

  3. 内核配置问题:某些内核配置可能没有启用对这些寄存器的访问,或者内核版本不支持这些功能。

  4. 文件系统问题:文件系统可能存在问题,导致无法访问这些文件。

解决方法:

  1. 检查权限

    • 确保你以 root 用户身份运行命令,或者使用 sudo 来提升权限。

    • 例如:sudo cat /sys/devices/system/cpu/cpu0/regs/identification/midr_el1

  2. 检查文件是否存在

    • 确认文件是否存在:ls /sys/devices/system/cpu/cpu0/regs/identification/midr_el1

    • 如果文件不存在,可能是内核配置或版本的问题。

  3. 检查内核配置

    • 确保内核配置中启用了相关的选项。你可以检查 /proc/config.gz 或 /boot/config-$(uname -r) 文件中的配置。

    • 相关的内核配置选项可能包括 CONFIG_ARM64_PTR_AUTH 或 CONFIG_ARM64_AMU_EXTN

  4. 检查文件系统

    • 如果文件系统有问题,可能需要检查文件系统的完整性。

    • 使用 fsck 工具检查文件系统,特别是 /sys 挂载点。

  5. 更新内核或系统

    • 如果你使用的是较旧的内核版本,可能需要更新到较新的版本,以确保支持这些功能。

    • 确保你的系统软件包是最新的,包括内核和相关的工具。

  6. 使用其他工具

    • 如果无法直接访问 midr_el1 文件,可以尝试使用其他工具来获取处理器的架构信息,例如 lscpu 或 cat /proc/cpuinfo

444: Can't open MIDR_EL1 sysfs entry 错误通常是由于权限不足、文件不存在或内核配置问题引起的。通过检查权限、文件存在性、内核配置以及文件系统状态,可以解决这个问题。如果问题仍然存在,可能需要更新内核或系统软件包。

2、OSError: [Errno 12] Cannot allocate memory 

OSError: [Errno 12] Cannot allocate memory 错误通常表示系统无法分配所需的内存资源。这个错误可能由多种原因引起,以下是一些常见的原因和解决方法:

产生原因:

  1. 内存不足

    • 系统物理内存(RAM)不足,无法满足当前进程的内存需求。

    • 系统交换空间(swap)不足,无法提供足够的虚拟内存。

  2. 内存泄漏

    • 应用程序或进程存在内存泄漏,导致内存被持续占用,最终耗尽可用内存。

  3. 大内存分配

    • 应用程序尝试分配大量内存,超过了系统当前可用的内存资源。

  4. 系统配置问题

    • 系统配置不当,例如交换空间设置过小,或者内存管理策略不当。

  5. 并发问题

    • 多个高内存消耗的进程同时运行,导致内存资源紧张。

解决方法:

  1. 检查内存使用情况

    • 使用 free -h 命令查看系统的内存使用情况,包括物理内存和交换空间的使用情况。

    • 使用 top 或 htop 命令查看当前运行的进程及其内存使用情况。

  2. 增加交换空间

    • 如果交换空间不足,可以增加交换空间。以下是增加交换空间的方法:

      sudo fallocate -l 2G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
    • 将交换文件永久添加到系统中,编辑 /etc/fstab 文件,添加以下行:

      /swapfile none swap sw 0 0
  3. 优化内存使用

    • 检查并优化应用程序的内存使用,避免内存泄漏。

    • 如果可能,减少并发运行的内存密集型进程。

  4. 释放内存

    • 关闭不必要的应用程序或进程,释放内存资源。

    • 使用 sync 命令将缓存数据写入磁盘,然后使用 echo 3 > /proc/sys/vm/drop_caches 命令释放缓存内存。

  5. 增加物理内存

    • 如果系统经常遇到内存不足的问题,考虑增加物理内存(RAM)。

  6. 调整内核参数

    • 可以调整内核参数来优化内存管理,例如调整 vm.swappiness 参数来控制交换空间的利用率。

      sudo sysctl vm.swappiness=10
    • 将调整永久化,编辑 /etc/sysctl.conf 文件,添加以下行:

      vm.swappiness=10
  7. 检查应用程序代码

    • 如果错误发生在特定的应用程序中,检查应用程序代码,确保没有内存泄漏或不合理的内存分配。

OSError: [Errno 12] Cannot allocate memory 错误通常是由于系统内存不足或内存管理问题引起的。通过检查内存使用情况、增加交换空间、优化内存使用、释放内存、增加物理内存或调整内核参数,可以解决这个问题。如果问题仍然存在,可能需要进一步检查应用程序代码或系统配置。

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/143319302