<div dir="ltr">Try to strace the process. Either attach strace or modify service file to run the strace from the beginning.<div><br></div><div>To attach simply (replace $HWMON_PID with appropriate pid):</div><div><br></div><div># strace -fv -tt -etrace=file -p $HWMON_PID -s 2048 -o /tmp/hwmon.log.$$</div><div><br></div><div>You should include "strace" package in the image by either modifying the build/conf/local.conf and place / append the variable:</div><div>======= cut =======</div><div>IMAGE_INSTALL_append = " strace"</div><div>======= cut =======</div><div><br></div><div>Please note the space before the package name. It is required.</div><div><br></div><div>To modify service file, simply edit either source file:</div><div><br></div><div><a href="https://github.com/openbmc/meta-phosphor/blob/a87fb2d1eb682ed0f04e0f269966b9ae4aafbb1e/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon%40.service">https://github.com/openbmc/meta-phosphor/blob/a87fb2d1eb682ed0f04e0f269966b9ae4aafbb1e/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon%40.service</a><br></div><div><br></div><div>in your local build tree or edit service file after booting the image using "vi":</div><div><br></div><div># vi /lib/systemd/system/xyz.openbmc_project.Hwmon\@.service</div><div><br></div><div>and change ExecStart param to:</div><div>======== cut ========</div><div>ExecParam=/usr/bin/strace -tt -etrace=file -fv -s 2048 -o /tmp/hwmon.log.$$ /usr/bin/phosphor-hwmon-readd -o %I</div><div><div>======== cut ========</div><div><br></div><div><div>Then reload systemd and restart the service:</div><div><br></div><div># systemctl daemon-reload</div><div># systemctl restart xyz.openbmc_project.Hwmon\@.service</div><div><br></div><div>And then check the /tmp/hwmon.log.* file.</div><div>With the "-tt" option you will get a precise timestamp between each syscall.</div><div><br></div><div>If there is nothing suspicious, try to remove the "-etrace=file" option.</div><div></div></div><div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 7 Oct 2020 at 17:25, Patrick Williams <<a href="mailto:patrick@stwcx.xyz">patrick@stwcx.xyz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Oct 06, 2020 at 10:42:18PM +0700, Nguyen Chanh wrote:<br>
> In <a href="https://github.com/openbmc/phosphor-hwmon" rel="noreferrer" target="_blank">https://github.com/openbmc/phosphor-hwmon</a> => hwmonio.cpp , I saw we use<br>
> the std::ifstream to open and read a device sensor.<br>
> <br>
> But, I met an issue with it. In case the sensor was disabled (Ex: the Fan<br>
> was unplugged), the std::ifstream read will take a long time . The timeout<br>
> in there is so long. It makes my system have a BIG delay in each checking<br>
> sensor.<br>
> <br>
> Other observation : In case the sensor device is ready, the time for sensor<br>
> reading is expected.<br>
> <br>
> Measuring std::ifstream reading:<br>
> <br>
> In case unplugged sensor: 91385 microseconds<br>
> In case plugged sensor. : 507 microseconds<br>
<br>
Do you know which device driver it is interacting with?  This sounds<br>
like an issue with the underlying driver.  Perhaps it is attempting<br>
too many retries.<br>
<br>
> <br>
> The patch to measure the std::ifstream reading, please see attachment !<br>
> <br>
> Unexpected behavior you saw<br>
> <br>
> The timeout in there is so long<br>
> <br>
> Expected behavior<br>
> <br>
> Do we have any better solution in this case? take less more timeout.<br>
> [image: Screen Shot 2020-10-03 at 11.32.36 AM.png]<br>
> -- <br>
> *Nguyen Minh Chanh *<br>
> *Embedded Software Engineer *<br>
<br>
<br>
<br>
-- <br>
Patrick Williams<br>
</blockquote></div>