Hi Stefan,
I got a LSM6DS3 sensor - and managed to get 'block' read from the fifo working... I think - there are a couple of caveats - I dump the data (it would need to alternate buffers in the read) - and the writing 'out' of the data needs to be able to keep up with the reads. Also - I don't check that the data looks 'reasonable' - so it might just be 0s or other guff..
I display the WhoAmI byte for 5s (I had wdt issues until I increased the stack size)
In this sample - I have set the sensor to 1..04kHz (just the accelerometer - so 6 bytes per sample) (Maybe - see below)
The main loop reads the number of samples from 0x3E/0x3f every 10ms- and outputs this to UART - and at 1.04kHz this gives about the right value (~70 samples (420 bytes) - the loop will take longer than 10ms!)
I use a block read - with i2c running at 1MHz - note that I had to increase the stack size (idf.py menuconfig) (and I used 32768)
Also note - I have the version of cal_string that gives a pointer sign error, and I added target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-pointer-sign) to CMakeLists.txt to ignore this...
Here I demonstrate reading 8k of data every 1s - I'm not sure I have set up the sensor correctly (3a, 3b always gives a buffer size of 0

)
I'm using a logic analyser rather than a scope - would be interesting if you still get the 'needles' in the trace?
Martin