John Kacur <jkacur@xxxxxxxxxx> writes: > On Wed, 29 Sep 2021, Punit Agrawal wrote: > >> From: Punit Agrawal <punit1.agrawal@xxxxxxxxxxxxx> >> >> On systems where cpu idle is disabled to reduce latencies, >> "/dev/cpu_dma_latency" does not exist and leads to the following >> exception report from python when using hwlatdetect.py - >> >> FileNotFoundError: [Errno 2] No such file or directory: '/dev/cpu_dma_latency >> >> Update hwlatdetect to check whether the file exists before attemping >> to write values to it. Also, make the related debug output conditional >> to c-states support being enabled in the kernel. >> >> While we are touching this part of the code, also address a couple of >> minor issues in the code such as - >> * correct typos >> * reflow comment to fit 80-char column limit >> >> Reported-by: Suresh Hegde <suresh.c11@xxxxxxxxxxxxxxxx> >> Signed-off-by: Punit Agrawal <punit1.agrawal@xxxxxxxxxxxxx> >> --- >> v2 -> v3: >> * Address issues in comment >> * Initialise self.dma_latency_handle in init() >> * Make debug() statements conditional to /dev/cpu_dma_latency >> --- >> src/hwlatdetect/hwlatdetect.py | 16 ++++++++++------ >> 1 file changed, 10 insertions(+), 6 deletions(-) >> >> diff --git a/src/hwlatdetect/hwlatdetect.py b/src/hwlatdetect/hwlatdetect.py >> index 12228f45f852..56fd2af8641d 100755 >> --- a/src/hwlatdetect/hwlatdetect.py >> +++ b/src/hwlatdetect/hwlatdetect.py >> @@ -200,6 +200,7 @@ class Detector(object): >> if os.path.exists('/usr/sbin/rdmsr'): >> self.have_msr = True >> self.initsmi = self.getsmicounts() >> + self.dma_latency_handle = None >> >> def getsmicounts(self): >> counts = [] >> @@ -210,20 +211,23 @@ class Detector(object): >> return counts >> >> # methods for preventing/enabling c-state transitions >> - # openinging /dev/cpu_dma_latency and writeing a 32-bit zero to that file will prevent >> - # c-state transitions while the file descriptor is open. >> + # >> + # opening /dev/cpu_dma_latency and writing a 32-bit zero to that file will >> + # prevent c-state transitions while the file descriptor is open. >> + # >> # use c_states_off() to disable c-state transitions >> # use c_states_on() to close the file descriptor and re-enable c-states >> # >> def c_states_off(self): >> - self.dma_latency_handle = os.open("/dev/cpu_dma_latency", os.O_WRONLY) >> - os.write(self.dma_latency_handle, b'\x00\x00\x00\x00') >> - debug("c-states disabled") >> + if os.path.exists("/dev/cpu_dma_latency"): >> + self.dma_latency_handle = os.open("/dev/cpu_dma_latency", os.O_WRONLY) >> + os.write(self.dma_latency_handle, b'\x00\x00\x00\x00') >> + debug("c-states disabled") >> >> def c_states_on(self): >> if self.dma_latency_handle: >> os.close(self.dma_latency_handle) >> - debug("c-states enabled") >> + debug("c-states enabled") >> >> def cleanup(self): >> raise RuntimeError("must override base method 'cleanup'!") >> -- >> 2.32.0 >> >> > > Signed-off-by: John Kacur <jkacur@xxxxxxxxxx> Thanks for applying the patch!