问题:web界面获取组件信息,一直在转圈3~5s之后才显示出来信息
定位原因:调用curl命令来获取智能网卡温度,导致web界面卡顿
流程:调用skynet fork线程去获取智能网卡温度,获取方式是通过curl命令curl.easy_perform调用redfish url来获取智能网卡温度;
问题一:调用skynet fork执行获取智能网卡温度,获取智能网卡温度流程会有3~5s卡顿,为什么会影响属性的获取,难道会影响RPC调用?应该如何解决这个问题
问题二:获取智能网卡温度需要使用curl命令,发现curl.easy_perform是串行阻塞的,是否有其他方式解决?
1、调用阻塞性API的C库会导致进程下的资源树访问阻塞、组件心跳心跳丢失的情况。
2、需要使用框架提供的worker库,创建worker线程,将阻塞操作在worker线程中执行。
参考指导:worker_core 后台工作线程库 | openUBMC
使用worker_core来执行获取智能网卡温度curl动作之后,还是出现属性获取失败,web卡顿问题:
以下为使用worker获取不同组件的温度,3s超时一次,循环获取:
2000-02-25 16:06:42.430477 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/CPU_Temp, err=Timeout was reached
2000-02-25 16:06:42.430678 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=15
2000-02-25 16:06:42.430824 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, error: Timeout was reached
2000-02-25 16:06:42.430964 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/M2Zone_Temp
2000-02-25 16:06:45.550750 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/M2Zone_Temp, err=Timeout was reached
2000-02-25 16:06:45.550966 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=16
2000-02-25 16:06:45.551113 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/M2Zone_Temp, error: Timeout was reached
2000-02-25 16:06:45.551264 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp
2000-02-25 16:06:48.673682 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp, err=Timeout was reached
2000-02-25 16:06:48.674062 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=17
2000-02-25 16:06:48.674235 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp, error: Timeout was reached
2000-02-25 16:06:48.674387 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/FPGA_Temp
2000-02-25 16:06:51.790993 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/FPGA_Temp, err=Timeout was reached
2000-02-25 16:06:51.791344 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=18
2000-02-25 16:06:51.792173 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/FPGA_Temp, error: Timeout was reached
2000-02-25 16:06:51.792845 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/NIC_OPT1_Temp
按道理已经在worker创建线程执行温度获取,不影响DPUCard属性的获取,但是出现了:
% lsprop DPUCard_1_0101
org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
已解决,local w = worker.new(0)需要定义为全局变量