iovisor / bcc

BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more
Apache License 2.0
20.36k stars 3.86k forks source link

BPF.ring_buffer_poll(timeout=T) documentation ambigious #5033

Open AITleo opened 3 months ago

AITleo commented 3 months ago

The documentation about the timeout for BPF.ring_buffer_poll(timeout=T) is unclear. At least for me.

It states:

The timeout parameter is optional and measured in milliseconds. In its absence, polling continues until there is no more data or the callback returns a negative value.

From reading this I get an understanding, that if there is no timeout specified and no data available in the ringbuffer (yet), the function would not block but return immediately.

My experiments on the other hand show that it does block indefinitely and waits for data.

For my use case supplying a timeout fixes the problem, but may I suggest to be more precise in the documentation?

I am talking about this line here.

yonghong-song commented 3 months ago

My experiments on the other hand show that it does block indefinitely and waits for data.

Could you give more specifics on blocking indefinitely?

AITleo commented 3 months ago

Indefinitely is of course an overstatement, but when running the python program with debugger it shows that it hangs at this call. I of course only waited a few seconds before killing my program, but how I interpret the documentation is that without timeout it would either read from the buffer and return or if it is empty just return and never wait.