场景如下:
目标:跑一个网络模型,需要在内核保存每层结果
环境:每层跑完会产生一个中断,然后进入中断后半段进行后处理,后处理在spin_lock_irqsave的保护之下
尝试方案如下:
1、直接在后处理中使用filp_open、vfs_write的接口写入,但是貌似这个操作不能在原子操作里面调用,会crash 放弃
2、目前使用的方案:使用create_workqueue工作队列,在任务里面写入,但是对于运行快小模型可以,每层都能保存下来,一到大模型,这个时候保存任务比较耗时,就会出现trace,同时丢任务,但是还是能继续跑下去,所以我只能多跑几遍,然后集合起来才能得到完整的数据,着实麻烦。
[ 4929.012718] [<ffff0000080858e0>] __switch_to+0x90/0xb0
[ 4929.013710] [<ffff00000899139c>] __schedule+0x19c/0x5e0
[ 4929.014407] [<ffff000008991818>] schedule+0x38/0xa0
[ 4929.015049] [<ffff000008994a6c>] schedule_timeout+0x12c/0x280
[ 4929.015863] [<ffff000008124304>] rcu_gp_kthread+0x504/0x750
[ 4929.016597] [<ffff0000080e16ec>] kthread+0xfc/0x130
[ 4929.017230] [<ffff0000080836c0>] ret_from_fork+0x10/0x5
请问有没有专家知道是什么原因啊,或者针对我这个需求,有没有其他更好的方法能告知一番的,感谢。