@@ -88,8 +88,8 @@ pin var global_counter : hash<u32, u64>(10000)
8888// Per-CPU data with automatic pinning path: /sys/fs/bpf/map_operations_demo/maps/percpu_data
8989pin var percpu_data : percpu_hash< u32, PerCpuData> ( 256 )
9090
91- // Event stream ring buffer with no preallocation flag
92- @flags ( no_prealloc ) pin var event_stream : hash < u32, u32 > ( 65536 )
91+ // Event stream ring buffer
92+ var event_stream : ringbuf < Event > ( 65536 )
9393
9494// Sequential data array - not pinned (local to program)
9595var sequential_data : array< u32, ArrayElement> ( 1024 )
@@ -181,18 +181,20 @@ struct ArrayElement {
181181// Program 3: Event streaming demonstrating ring buffer usage
182182@tracepoint( "syscalls/sys_enter_open" )
183183fn event_logger( ctx: * trace_event_raw_sys_enter) - > i32 {
184- var event = Event {
185- timestamp: 123456 , // Fake timestamp
186- event_type: ctx.id, // Use syscall ID from sys_enter context
187- data: [0 ], // Simplified data
188- }
189-
190184 // Ring buffer output - single writer recommended
191185 try {
192- //var result = event_stream.output(&event, sizeof(Event))
193- var result = 0
194- if ( result != 0 ) {
195- throw 1 // Ring buffer output failed
186+ // Reserve space in the ring buffer
187+ var reserved = event_stream.reserve()
188+ if ( reserved != null) {
189+ // Successfully reserved space - populate event data inline
190+ reserved- > timestamp = 123456 // Fake timestamp
191+ reserved- > event_type = ctx- > id // Use syscall ID from sys_enter context
192+ reserved- > data = [0 ] // Simplified data
193+
194+ // Submit the populated event
195+ event_stream.submit( reserved)
196+ } else {
197+ throw 1 // Ring buffer is full
196198 }
197199 } catch 1 {
198200 // Ring buffer full - this will generate performance warnings
0 commit comments