This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:EDMA 中的内存分配失败会导致文件系统变为只读

Guru**** 2546290 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/584829/linux-am3352-memory-allocation-failure-in-edma-causes-filesystem-to-become-read-only

器件型号:AM3352

工具/软件:Linux

您好!

客户在使用定制 AM3352板时遇到问题。 EDMA 驱动程序基本上似乎无法分配内存、这会导致文件系统变成只读、因为对 eMMC 的访问失败。 这在内核版本 4.4.32+(SDK8)的多个电路板中是可重复的。

这是 DMSG 日志

[133996.775279] 37277总页数
[133996.779427]交换高速缓存中的0页
[133996.782996] Swap cache stats:add 0、delete 0、find 0/0
[133996.78878]空闲交换 = 0KB
[133996.791689]总交换= 0KB
[133996.794830] 65536页 RAM
[133996.797850] 0页,仅 HIGHMEM/MovableOnly
[133996.801967] 4118页保留
[133996.805353] 4096页 CMA 保留
[133996.809623] EDMA 49000000.EDMA:EDMA_PRE_SLAVE_SG:分配描述符失败
[133996.818560] omap_hmc 481d8000.mmc:prep_slave_sg()失败
[133996.824538] omap_hsmmc 481d8000.mmc:MMC 启动 DMA 失败
[133997.303920] mmcblk0:未知错误-1发送读/写命令、卡状态0x900
[133997.313192] blk_update_request:I/O error、dev mmcblk0、sector 5705028
[133997.320787] blk_update_request:I/O error、dev mmcblk0、sector 5705036
[133997.328107] blk_update_request:I/O 错误、dev mmcblk0、扇区5705044
[133997.33521] blk_update_request:I/O error、dev mmcblk0、sector 5705052
[133997.342473] blk_update_request:I/O error、dev mmcblk0、sector 5705060
[133997.349701] blk_update_request:I/O error、dev mmcblk0、sector 5705068
[133997.357387] blk_update_request:I/O error、dev mmcblk0、sector 5705076
[133997.36444] blk_update_request:I/O error、dev mmcblk0、sector 5705084
[133997.371723] blk_update_request:I/O error、dev mmcblk0、sector 5705092
[133997.378921] blk_update_request:I/O error、dev mmcblk0、sector 5705100
[145301.531121] mmcqd/0:页面分配失败:订单:2、模式:0x2284020
[145301.538045] CPU:0 PID:569 Comm:mmcqd/0未被污染4.4.47 -脏污#18
[145301.544999]硬件名称:通用 AM33XX (平展设备树)
[145301.551587][ ](展开回扫)从[ ](show_stack+0x10/0x14)
[145301.559853][ ](show_stack)从[ ](WARN_ALLOC_FAILE+0xdc/0x120)
[145301.568271][ ](WARN_ALLOC_FAILED)来自[ ](_alloc_pages_nodemASK+0x6bc/0x860)
[145301.577909][ ](__alloc_pages_nodemask)从[ ](cache_alloc_fre填 充+0x2e0/0x578)
[145301.587609][ ](cache_alloc_fre填 充)从[ ](_kmalloc+0xc4/0x114)
[145301.596057][ ](_kmalloc)从[ ](EDMA_PRE_SLAVE_SG+0x8c/0x2d8)
[145301.604506][ ](EDMA_PRE_SLAVE_SG)、来自[ ](omap_hsmmc_request+0x3e4/0x4e8)
[145301.613870][ ](omap_hsmmc_request)、来自[ ](MMC_START_REQUEST+0xe4/0x110)
[145301.623020][ ](MMC_START_REQUEST)、来自[ ](MMC_START_REQ+0x27c/0x3bc)
[145301.631835][ ](MMC_START_REQ)、来自[ ](MMC_blk_issee_rw_rq+b0xac0)
[145301.640710][ ](MMC_blk_issed_rw_rq)、来自[ ](MMC_blk_issee_rq+0xf0/0x4ac)
[145301.649861][ ](MMC_blk_iss问题_rq)、来自[ ](MMC_queue_thread+0xa0/0x140)
[145301.658767][ ](MMC_queue_thread)、来自[ ](kthread+0xd0/0xec)
[145301.666728][ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x24)
[145301.674414]内存信息:
[145301.676945] ACTIVE_ANON:19675 INACTIVE_ANON:10 Isolated _ANON:0
[145301.676945] active_file:26017 inactive_file:11706 isoled_file:0
[145301.676945] 不可避免:0脏:33写回:0不稳定:0
[145301.676945] slab_reimalable:880 slab_unreimalable:1149
[145301.676945] 映射:3155 shmem:11页可达:151跳出:0
[145301.676945] 免费:986 FREE_PCP:20 FREE_CMA:0
[145301.711655]正常免费:3944kB 最小值:1912kB 低电平:2388kB 高电平:2868kB ACTIVE_ANON:78700kB INACTIVE_ANON:40kB ACTIVE_FILE:104068kB INACTIVE_FILE:46824kB CMA UNEVENTABLE:0kB STRAME (ANON):0kB INLOWIT_RECOMB_REBLED:0kB:64kB:20KB RAM CLB:64kB:64kB INB_REB_REBLEBLEB_REB_REBLEBLEBLEM:0kB:24KB RAM CLAPRELABLED REB_RELABLED REBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEBLEM:0kB:0kB:064kB:0kB:24KB_RELABLED REBLEB_REBLEBLEBLEB_REBLEBLEBLEBLE 否
[145301.758291] lowmem_reserve[]:0 0 0
[145301.762104]正常:976*4KB (U) 5*8KB (U) 0*16KB 0*32KB 0*64KB 0*128KB 0*256KB 0*256KB 0*512KB 0*1024KB 0*2048KB 0*4096KB 0*8192KB =3944KB
[145301.774945] 37741总页数
[145301.779093]交换高速缓存中的页数
[145301.782661]交换高速缓存统计数据:添加0,删除0,查找0/0
[145301.788243]自由交换 = 0KB
[145301.791354]总交换空间= 0KB
[145301.794496] 65536页 RAM
[145301.797515] 0页 HICHMEM/MovableOnly
[145301.801633]保留4118页
[145301.805018] 4096页 CMA 保留
[145301.809258] EDMA 49000000.EDMA:EDMA_PRE_SLAVE_SG:未能分配描述符
[145301.817463] OMAP-hmc 481d8000.MMC:prep_slave_sg ()失败
[145301.823441] OMAP-hsmmc 481d8000.MMC:MMC 启动 DMA 失败
[145302.466856] mmcblk0:未知错误-1发送读取/写入命令、卡状态0x900
[145302.477501] blk_update_request:284 callback 被抑制
[145302.483174] blk_update_request:I/O error、dev mmcblk0、sector 1011989
[145302.490524] blk_update_request:I/O 错误、dev mmcblk0、扇区1011997
[145302.497692] blk_update_request:I/O error、dev mmcblk0、sector 1012005
[145302.504768] blk_update_request:I/O error、dev mmcblk0、sector 1012013
[145302.511844] blk_update_request:I/O 错误、dev mmcblk0、扇区1012021
[145302.518951] blk_update_request:I/O 错误、dev mmcblk0、扇区1012029
[145302.525997] blk_update_request:I/O error、dev mmcblk0、sector 1012037
[145302.533165] blk_update_request:I/O 错误、dev mmcblk0、扇区1012045
[145302.540271] blk_update_request:I/O 错误、dev mmcblk0、扇区1012053

[145302.547408] blk_update_request:I/O error、dev mmcblk0、sector 1012061
也有类似的问题  
和  
此外、从上面的第一个帖子中、有一个链接指出   EDMA 驱动器中可能存在内存泄漏:
您能否建议如何解决此问题(这两个部分是否正常/足够)?
 
 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jani 您好、

    [报价用户="Jani Okker"]客户的定制 AM3352 板出现问题。

    您能否在 AM335x TI EVM 上重新生成此问题?

    [引用 user="Jani Okker"]基本上似乎 EDMA 驱动程序无法分配内存

    您是否正在尝试从 DDR3 RAM 分配内存?

    [报价用户="Jani Okker"]这在多个电路板中是可重复的[/报价]

    您是否意味着您的某些定制电路板仅受到影响? 其余的工作正常吗?

    [引用 user="Jani Okker"]内核版本, 4.4.3.32+(SDK8)[/引用]

    SDK8 (ti-SDK-AM335x-EVM-08.00.00.00)随 Linux 内核3.14.26提供

    最新的 PSDK (ti-processor-sdk-linux-am335x-evm-03.02.00.05)随 Linux 内核4.4.3.2一起提供。

    您使用哪一个? SDK8或 PSDK3.2?

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    客户(或我自己)尚未尝试使用 EVM、需要检查为 EVM 重新创建类似测试应用的可行性。

    从 dmesg 日志中、我得出的结论是问题来自以下 EDMA 驱动程序代码:

    edesc = kzalloc (sizeof (* edesc)+ sg_len * sizeof (edesc->pset[0])、
    GFP_Atomic);
    if (!edesc){
    dev_err (dev、"%s":未能分配描述符\n"、__func__);
    return NULL;
    } 

    所有电路板都会受到影响、但重现此问题可能需要2周时间。

    很抱歉、我在 SDK 版本上出错、客户使用 PSDK 中的4.4.4.32+内核(因此不是 SDK8)。

    BR、

     Jani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jani、

    EDMA 驱动程序在主线内核中提供(4.10截至今天)、您可以比较4.32和4.10之间的 EDMA.c 以查看是否有更新:

    lxr.free-electrons.com/.../edma.c

    另一个需要检查的问题是内存是否泄漏。 当你分配内存缓冲区(使用 kzalloc)时、你是否释放过这个缓冲区?

    另一个需要检查的问题是 DDR3内存。 如果 DDR3内存区域出现一些硬件故障、则到达该区域时分配将失败。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jani、

    关于内存泄漏,它可能是由 EDMA 驱动程序或您的应用程序引起的。

    关于 EDMA 驱动程序,您能否检查是否为使用 kzalloc()分配的每个 edesc 调用了 EDMA_desc_free()?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Pavel]Jani、

    关于内存泄漏,它可能是由 EDMA 驱动程序或您的应用程序引起的。

    关于 EDMA 驱动程序,您能否检查是否为使用 kzalloc ()分配的每个 edesc 调用了 EDMA_desc_free()?

    您好、Pavel、

    嗯、这也正是我所怀疑的(EDMA 驱动器中的内存泄漏)。 由于这是我们 SDK/Linux 内核开发的一部分、我认为开发人员/SDK 应用 ENGS 或许最好检查一下这个问题?

    有关您的信息,请参阅随附的 dmesg 日志。

    e2e.ti.com/.../8420.dmesg.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jani 您好、

    [引用用户="Jani Okker"]这也正是我所怀疑的(EDMA 驱动程序中的内存泄漏)[/quot]

    EDMA 驱动程序已经过测试、我们没有任何与 EDMA 驱动程序内存泄漏有关的已知问题:

    我建议您使用 EDMA 测试应用和/或 McASP/Audio、SPI、MMC/SD 和/或 Crypto 驱动程序检查 EDMA 驱动程序。 这些驱动程序使用的是 EDMA 驱动程序、因此您可以使用(例如)音频应用程序测试 EDMA 驱动程序。

    有关更多信息、请参阅以下链接:

    [引用 user="Jani Okker"]有关您的信息,内核4.10.4[/引用]也重现了此问题。

    TI 未正式测试和支持此内核。 官方内核(经过测试和支持)为4.32 (PSDK3.02)和4.41 (PSDK3.03)

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,先生

    我们还在使用 TI 内核4.4的定制板中发现了此问题

    重复的步骤是复制/删除文件数小时、然后出现页面分配失败。
    根设备进入只读状态。 下面是信息

    [7707.545952]内存信息:
    [7707.548244] active_anon:3584 inactive_anon:2259 isoled_anon:0
    active_file:49714 inactive_file:49415 isoled_file:0
    unevicable:0脏:2685写回:6505不稳定:0
    slab_reimclable:14213 slab_unreimclable:3497
    映射:2836 shmem:2287页可达:117跳出:0
    FREE:3764 FREE_PCP:82 FREE_CMA:2157
    [7707.582126]正常免费:15056kB 最小值:2808kB 低电平:3508kB 高电平:4212kB ACTIVE_ANON:14336kB INACTIVE_ANON:9036kB ACTIVE_FILE:198856kB INACTIVE_FILE:197660kB Unevicable:0kB Isolated (ANON):9036kB:248kB:28B RAM 可回收堆栈:248kB:248kB:无中断可回收的 RAM 堆栈:248kB:248kB:无中断可回收堆栈:248kB 否
    [7707.628360] lowmem_reserve[]:0 0 0
    [7707.631882]正常:1526*4KB (UMC) 41*8KB (M) 1*16KB (C) 1*32KB (C) 0*64KB 1*128KB (C) 1*256KB (C) 0*512KB 2KB 1024KB (C) 3*2048KB (C) 0*56KB 0*256KB (C) 0*256KB (C) 0*256KB (C) 0*256KB 0*256KB (C) 0*256KB) 0*256KB 0*15024KB (
    [7707.646414] 101411总页数
    [7707.650355] 0页交换式高速缓存
    [7707.653680]交换高速缓存统计数据:添加0,删除0,查找0/0
    [7707.658924]自由交换= 0KB
    [7707.661812]总交换时间= 0KB
    [7707.664700] 130816页 RAM
    [7707.667587] 0页 HICHMEM/MovableOnly
    [7707.671433]保留3210页
    [7707.674583]保留4096页 CMA
    [7707.678202] EDMA 49000000.EDMA:EDMA_PRE_SLAVE_SG:分配描述符失败
    [7707.686002] OMAP_hmc 4781000.MMC:PRE_SLAVE_SG ()失败
    [7707.691630] OMAP_hsmmc 4781000.MMC:MMC 启动 DMA 失败
    [7707.716914] mmcblk0:未知错误-1发送读/写命令、卡状态为0x900
    [7707.724933] blk_update_request:I/O error、dev mmcblk0、扇区2994218
    [7707.731572(2004)号决议] blk_update_request:I/O error、dev mmcblk0、sector 2994226
    [7707.738147] blk_update_request:I/O error、dev mmcblk0、sector 2994234
    [7707.744744] blk_update_request:I/O error、dev mmcblk0、sector 2994242
    [7707.751356] blk_update_request:I/O error、dev mmcblk0、sector 2994250
    [7707.757930] blk_update_request:I/O error、dev mmcblk0、sector 2994258
    [7707.764644] blk_update_request:I/O error、dev mmcblk0、sector 2994266
    [7707.771252] blk_update_request:I/O error、dev mmcblk0、sector 2994274
    [7707.777825] blk_update_request:I/O error、dev mmcblk0、扇区2994282
    [7707.784418] blk_update_request:I/O error、dev mmcblk0、sector 2994290
    [7707.793455] EXT4-FS 警告(器件 mmcblk0p2):ext4_end_bio:329:I/O 错误-5写入 inode 328709 (偏移量0、大小为1499136、启动块1498133)
    [7707.806927]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332245
    [7707.813569]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332246
    [7707.820209]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332247
    [7707.826849]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332248
    [7707.833546]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332249
    [7707.840189]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332250
    [7707.846830]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332251
    [7707.853470]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332252
    [7707.860141]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332253
    [7707.866783]器件 mmcblk0p2上的缓冲器 I/O 错误、逻辑块1332254
    [7725.547058] mmcqd/0:页面分配失败:订单:2、模式:0x2284020
    [7725.553559] CPU:0 PID:75 Comm:mmcqd/0未被污染4.4.4.0-uc8100-ME+#1
    [7725.560636]硬件名称:通用 AM33XX (平展器件树)
    [7725.566753]背迹:
    [7725.569247][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)

    我们还使用了 TI 内核4.1在我们的 MB 中执行相同的测试、没有发现任何问题。

    在调查之后、它看起来像是 EDMA 问题。
    在数据移动过程中、页面分配速度和可用速度不一致。
    如果系统缓慢释放内存、可用内存可能会短缺。

    目前、权变措施是增加 min_free_KB 参数以避免此问题。

    如果您有任何想法、请告知

    BR
    Yimin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yimin、

    请尝试使用 ti-processor-sdk-linux-am335x-evm-03.03.00.04/board-support/linux-4.4.41

    此致、
    帕维尔