Class MetalExecutionLogger
- Namespace
- DotCompute.Backends.Metal.Execution
- Assembly
- DotCompute.Backends.Metal.dll
Comprehensive logging and telemetry integration for Metal execution components. Provides structured logging, performance tracking, and diagnostic information.
public static class MetalExecutionLogger
- Inheritance
-
MetalExecutionLogger
- Inherited Members
Methods
BufferBound(ILogger, nint, nuint, int, nint)
[LoggerMessage(EventId = 5502, Level = LogLevel.Trace, Message = "Bound buffer {Buffer} at offset {Offset} to index {Index} on encoder {Encoder}")]
public static void BufferBound(this ILogger logger, nint buffer, nuint offset, int index, nint encoder)
Parameters
CircuitBreakerOpened(ILogger, double)
[LoggerMessage(EventId = 5203, Level = LogLevel.Error, Message = "Circuit breaker opened for {Duration:F0}s due to repeated Metal failures")]
public static void CircuitBreakerOpened(this ILogger logger, double duration)
Parameters
CircuitBreakerReset(ILogger)
[LoggerMessage(EventId = 5204, Level = LogLevel.Information, Message = "Circuit breaker reset, Metal GPU operations resuming")]
public static void CircuitBreakerReset(this ILogger logger)
Parameters
loggerILogger
CommandEncoderCreated(ILogger, nint)
[LoggerMessage(EventId = 5500, Level = LogLevel.Trace, Message = "Created Metal command encoder for command buffer {CommandBuffer}")]
public static void CommandEncoderCreated(this ILogger logger, nint commandBuffer)
Parameters
CommandEncoderDisposed(ILogger, int, double)
[LoggerMessage(EventId = 5506, Level = LogLevel.Trace, Message = "Disposed Metal command encoder: {CommandCount} commands encoded, duration: {Duration:F3}ms")]
public static void CommandEncoderDisposed(this ILogger logger, int commandCount, double duration)
Parameters
CommandExecuted(ILogger, string, string, double)
[LoggerMessage(EventId = 5003, Level = LogLevel.Trace, Message = "Executed command '{Operation}' on stream {StreamId} in {Duration:F3}ms")]
public static void CommandExecuted(this ILogger logger, string operation, string streamId, double duration)
Parameters
CommandStreamDisposed(ILogger, long, long)
[LoggerMessage(EventId = 5006, Level = LogLevel.Information, Message = "Metal Command Stream disposed: created {TotalStreams} streams, executed {TotalCommands} commands")]
public static void CommandStreamDisposed(this ILogger logger, long totalStreams, long totalCommands)
Parameters
CommandStreamInitialized(ILogger, string, nint, int, int)
[LoggerMessage(EventId = 5000, Level = LogLevel.Information, Message = "Metal Command Stream initialized for {Architecture}: device={Device}, optimal_streams={OptimalStreams}, max_concurrent={MaxConcurrent}")]
public static void CommandStreamInitialized(this ILogger logger, string architecture, nint device, int optimalStreams, int maxConcurrent)
Parameters
ConstantDataSet(ILogger, nuint, int, nint)
[LoggerMessage(EventId = 5503, Level = LogLevel.Trace, Message = "Set {Size} bytes of constant data at index {Index} on encoder {Encoder}")]
public static void ConstantDataSet(this ILogger logger, nuint size, int index, nint encoder)
Parameters
CpuFallback(ILogger, string)
[LoggerMessage(EventId = 5207, Level = LogLevel.Information, Message = "Falling back to CPU for Metal operation {OperationName}")]
public static void CpuFallback(this ILogger logger, string operationName)
Parameters
DeviceErrorRecovery(ILogger, string)
[LoggerMessage(EventId = 5206, Level = LogLevel.Warning, Message = "Attempting device error recovery for Metal operation {OperationName}")]
public static void DeviceErrorRecovery(this ILogger logger, string operationName)
Parameters
DiagnosticReportGenerated(ILogger, MetalExecutionHealth, string, int)
[LoggerMessage(EventId = 5603, Level = LogLevel.Information, Message = "Metal diagnostic report generated: Health={Health}, Architecture={Architecture}, Active Operations={ActiveOps}")]
public static void DiagnosticReportGenerated(this ILogger logger, MetalExecutionHealth health, string architecture, int activeOps)
Parameters
loggerILoggerhealthMetalExecutionHealtharchitecturestringactiveOpsint
DiscreteMemoryCleanup(ILogger)
[LoggerMessage(EventId = 5209, Level = LogLevel.Information, Message = "Performing discrete GPU memory cleanup on Intel Mac")]
public static void DiscreteMemoryCleanup(this ILogger logger)
Parameters
loggerILogger
ElapsedTimeMeasured(ILogger, string, string, double)
[LoggerMessage(EventId = 5105, Level = LogLevel.Trace, Message = "Elapsed time between events {StartEvent} and {EndEvent}: {Time:F3}ms")]
public static void ElapsedTimeMeasured(this ILogger logger, string startEvent, string endEvent, double time)
Parameters
EncodingEnded(ILogger, nint, int)
[LoggerMessage(EventId = 5505, Level = LogLevel.Trace, Message = "Ended encoding for encoder {Encoder} with {CommandCount} commands")]
public static void EncodingEnded(this ILogger logger, nint encoder, int commandCount)
Parameters
ErrorHandlerInitialized(ILogger, string)
[LoggerMessage(EventId = 5200, Level = LogLevel.Information, Message = "Metal Error Handler initialized for {Architecture}")]
public static void ErrorHandlerInitialized(this ILogger logger, string architecture)
Parameters
ErrorRetryAttempt(ILogger, int, int, double, MetalError)
[LoggerMessage(EventId = 5201, Level = LogLevel.Warning, Message = "Retry {RetryCount}/{MaxRetries} after {Delay:F0}ms for Metal error: {Error}")]
public static void ErrorRetryAttempt(this ILogger logger, int retryCount, int maxRetries, double delay, MetalError error)
Parameters
loggerILoggerretryCountintmaxRetriesintdelaydoubleerrorMetalError
EventManagerDisposed(ILogger, long)
[LoggerMessage(EventId = 5109, Level = LogLevel.Information, Message = "Metal Event Manager disposed: created {TotalEvents} events")]
public static void EventManagerDisposed(this ILogger logger, long totalEvents)
Parameters
EventManagerInitialized(ILogger, int, int, int)
[LoggerMessage(EventId = 5100, Level = LogLevel.Information, Message = "Metal Event Manager initialized: max_concurrent_events={MaxEvents}, timing_pool={TimingPool}, sync_pool={SyncPool}")]
public static void EventManagerInitialized(this ILogger logger, int maxEvents, int timingPool, int syncPool)
Parameters
EventPoolDisposed(ILogger, int, int, double)
[LoggerMessage(EventId = 5405, Level = LogLevel.Information, Message = "Metal Event Pool disposed: created={Created}, reused={Reused}, reuse ratio={ReuseRatio:P2}")]
public static void EventPoolDisposed(this ILogger logger, int created, int reused, double reuseRatio)
Parameters
EventPoolInitialized(ILogger, int, int)
[LoggerMessage(EventId = 5400, Level = LogLevel.Information, Message = "Metal Event Pool initialized: timing pool={TimingSize}, sync pool={SyncSize}")]
public static void EventPoolInitialized(this ILogger logger, int timingSize, int syncSize)
Parameters
EventRecorded(ILogger, string, nint)
[LoggerMessage(EventId = 5104, Level = LogLevel.Trace, Message = "Recorded event {EventId} on command queue {CommandQueue}")]
public static void EventRecorded(this ILogger logger, string eventId, nint commandQueue)
Parameters
ExecutionContextDisposed(ILogger, long, long, TimeSpan)
[LoggerMessage(EventId = 5308, Level = LogLevel.Information, Message = "Metal Execution Context disposed: executed {Operations} operations, tracked {Resources} resources, uptime {Uptime}")]
public static void ExecutionContextDisposed(this ILogger logger, long operations, long resources, TimeSpan uptime)
Parameters
ExecutionContextInitialized(ILogger, string, nint)
[LoggerMessage(EventId = 5300, Level = LogLevel.Information, Message = "Metal Execution Context initialized for {Architecture}: device={Device}")]
public static void ExecutionContextInitialized(this ILogger logger, string architecture, nint device)
Parameters
ExecutionContextStats(ILogger, long, long, int, double)
[LoggerMessage(EventId = 5307, Level = LogLevel.Debug, Message = "Metal Execution Context: {Operations} ops executed, {Resources} resources tracked, {ActiveOps} active operations, success rate {SuccessRate:P2}")]
public static void ExecutionContextStats(this ILogger logger, long operations, long resources, int activeOps, double successRate)
Parameters
ExecutionGraphCompleted(ILogger, int, int)
[LoggerMessage(EventId = 5004, Level = LogLevel.Debug, Message = "Completed execution graph with {NodeCount} nodes in {LevelCount} levels")]
public static void ExecutionGraphCompleted(this ILogger logger, int nodeCount, int levelCount)
Parameters
ExecutionOperationCompleted(ILogger, string, double)
[LoggerMessage(EventId = 5301, Level = LogLevel.Debug, Message = "Metal operation {OperationId} completed successfully in {Duration:F3}ms")]
public static void ExecutionOperationCompleted(this ILogger logger, string operationId, double duration)
Parameters
ExecutionOperationFailed(ILogger, string, double)
[LoggerMessage(EventId = 5302, Level = LogLevel.Error, Message = "Metal operation {OperationId} failed after {Duration:F3}ms")]
public static void ExecutionOperationFailed(this ILogger logger, string operationId, double duration)
Parameters
ExecutionPaused(ILogger)
[LoggerMessage(EventId = 5305, Level = LogLevel.Information, Message = "Metal execution context paused")]
public static void ExecutionPaused(this ILogger logger)
Parameters
loggerILogger
ExecutionResumed(ILogger)
[LoggerMessage(EventId = 5306, Level = LogLevel.Information, Message = "Metal execution context resumed")]
public static void ExecutionResumed(this ILogger logger)
Parameters
loggerILogger
HealthCheckFailed(ILogger, int)
[LoggerMessage(EventId = 5602, Level = LogLevel.Warning, Message = "Metal health check failed: {IssueCount} issues detected")]
public static void HealthCheckFailed(this ILogger logger, int issueCount)
Parameters
HighEventUsage(ILogger, int, int)
[LoggerMessage(EventId = 5108, Level = LogLevel.Warning, Message = "High event usage: {ActiveEvents}/{MaxEvents} active events")]
public static void HighEventUsage(this ILogger logger, int activeEvents, int maxEvents)
Parameters
IdleStreamsCleanedUp(ILogger, int)
[LoggerMessage(EventId = 5005, Level = LogLevel.Trace, Message = "Cleaned up {Count} idle streams")]
public static void IdleStreamsCleanedUp(this ILogger logger, int count)
Parameters
MemoryErrorRecovery(ILogger, string)
[LoggerMessage(EventId = 5205, Level = LogLevel.Warning, Message = "Attempting memory error recovery for Metal operation {OperationName}")]
public static void MemoryErrorRecovery(this ILogger logger, string operationName)
Parameters
MemoryRetryAttempt(ILogger, int)
[LoggerMessage(EventId = 5202, Level = LogLevel.Warning, Message = "Memory allocation retry {RetryCount}, attempting cleanup...")]
public static void MemoryRetryAttempt(this ILogger logger, int retryCount)
Parameters
OperationCompleted(ILogger, string, long)
[LoggerMessage(EventId = 5210, Level = LogLevel.Debug, Message = "Metal operation {OperationName} completed in {ElapsedMs}ms")]
public static void OperationCompleted(this ILogger logger, string operationName, long elapsedMs)
Parameters
OperationMeasured(ILogger, string, double, double, double)
[LoggerMessage(EventId = 5106, Level = LogLevel.Debug, Message = "Measured operation '{Operation}': GPU={GpuTime:F3}ms, CPU={CpuTime:F3}ms, Overhead={Overhead:F3}ms")]
public static void OperationMeasured(this ILogger logger, string operation, double gpuTime, double cpuTime, double overhead)
Parameters
PerformanceMetrics(ILogger, long, double, double)
[LoggerMessage(EventId = 5600, Level = LogLevel.Information, Message = "Metal performance metrics - Operations: {Operations}, Success Rate: {SuccessRate:P2}, Avg Duration: {AvgDuration:F3}ms")]
public static void PerformanceMetrics(this ILogger logger, long operations, double successRate, double avgDuration)
Parameters
PipelineStateSet(ILogger, nint, nint)
[LoggerMessage(EventId = 5501, Level = LogLevel.Trace, Message = "Set compute pipeline state {PipelineState} on encoder {Encoder}")]
public static void PipelineStateSet(this ILogger logger, nint pipelineState, nint encoder)
Parameters
PoolMaintenanceCleaned(ILogger, int, int, int)
[LoggerMessage(EventId = 5404, Level = LogLevel.Debug, Message = "Pool maintenance cleaned {TotalCleaned} events (timing: {TimingCleaned}, sync: {SyncCleaned})")]
public static void PoolMaintenanceCleaned(this ILogger logger, int totalCleaned, int timingCleaned, int syncCleaned)
Parameters
ProfilingSessionCompleted(ILogger, string, double, double, double, double, double)
[LoggerMessage(EventId = 5107, Level = LogLevel.Information, Message = "Completed Metal profiling session {SessionId}: avg={AvgGpu:F3}ms, min={MinGpu:F3}ms, max={MaxGpu:F3}ms, p95={P95:F3}ms, throughput={Throughput:F1}ops/s")]
public static void ProfilingSessionCompleted(this ILogger logger, string sessionId, double avgGpu, double minGpu, double maxGpu, double p95, double throughput)
Parameters
loggerILoggersessionIdstringavgGpudoubleminGpudoublemaxGpudoublep95doublethroughputdouble
ResourceTracked(ILogger, string, MetalResourceType, long)
[LoggerMessage(EventId = 5303, Level = LogLevel.Trace, Message = "Tracking Metal resource {ResourceId} of type {Type}, size {Size} bytes")]
public static void ResourceTracked(this ILogger logger, string resourceId, MetalResourceType type, long size)
Parameters
loggerILoggerresourceIdstringtypeMetalResourceTypesizelong
ResourceUntracked(ILogger, string)
[LoggerMessage(EventId = 5304, Level = LogLevel.Trace, Message = "Untracked Metal resource {ResourceId}")]
public static void ResourceUntracked(this ILogger logger, string resourceId)
Parameters
ResourceUsage(ILogger, int, int, int, double)
[LoggerMessage(EventId = 5601, Level = LogLevel.Information, Message = "Metal resource usage - Buffers: {Buffers}, Textures: {Textures}, Pipeline States: {Pipelines}, Total Memory: {Memory:N0} MB")]
public static void ResourceUsage(this ILogger logger, int buffers, int textures, int pipelines, double memory)
Parameters
StreamCreated(ILogger, string, MetalStreamPriority, MetalStreamFlags)
[LoggerMessage(EventId = 5001, Level = LogLevel.Debug, Message = "Created Metal stream {StreamId} with priority={Priority}, flags={Flags}")]
public static void StreamCreated(this ILogger logger, string streamId, MetalStreamPriority priority, MetalStreamFlags flags)
Parameters
loggerILoggerstreamIdstringpriorityMetalStreamPriorityflagsMetalStreamFlags
StreamGroupCreated(ILogger, string, int)
[LoggerMessage(EventId = 5002, Level = LogLevel.Debug, Message = "Created optimized stream group '{GroupName}' with {StreamCount} streams")]
public static void StreamGroupCreated(this ILogger logger, string groupName, int streamCount)
Parameters
SyncEventCreated(ILogger, string, nint)
[LoggerMessage(EventId = 5102, Level = LogLevel.Trace, Message = "Created sync event {EventId} (handle={Handle})")]
public static void SyncEventCreated(this ILogger logger, string eventId, nint handle)
Parameters
ThreadgroupsDispatched(ILogger, int, int, int, int, int, int)
[LoggerMessage(EventId = 5504, Level = LogLevel.Debug, Message = "Dispatched threadgroups: grid=({GridW}, {GridH}, {GridD}), threadgroup=({TgW}, {TgH}, {TgD})")]
public static void ThreadgroupsDispatched(this ILogger logger, int gridW, int gridH, int gridD, int tgW, int tgH, int tgD)
Parameters
TimingEventCreated(ILogger, string, nint)
[LoggerMessage(EventId = 5101, Level = LogLevel.Trace, Message = "Created timing event {EventId} (handle={Handle})")]
public static void TimingEventCreated(this ILogger logger, string eventId, nint handle)
Parameters
TimingEventCreatedNew(ILogger, nint)
[LoggerMessage(EventId = 5402, Level = LogLevel.Trace, Message = "Created new timing event: {EventHandle}")]
public static void TimingEventCreatedNew(this ILogger logger, nint eventHandle)
Parameters
TimingEventReturned(ILogger, nint)
[LoggerMessage(EventId = 5403, Level = LogLevel.Trace, Message = "Returned timing event to pool: {EventHandle}")]
public static void TimingEventReturned(this ILogger logger, nint eventHandle)
Parameters
TimingEventReused(ILogger, nint)
[LoggerMessage(EventId = 5401, Level = LogLevel.Trace, Message = "Reused timing event from pool: {EventHandle}")]
public static void TimingEventReused(this ILogger logger, nint eventHandle)
Parameters
TimingPairCreated(ILogger, string, string)
[LoggerMessage(EventId = 5103, Level = LogLevel.Debug, Message = "Created timing pair: start={StartEventId}, end={EndEventId}")]
public static void TimingPairCreated(this ILogger logger, string startEventId, string endEventId)
Parameters
UnifiedMemoryCleanup(ILogger)
[LoggerMessage(EventId = 5208, Level = LogLevel.Information, Message = "Performing unified memory cleanup on Apple Silicon")]
public static void UnifiedMemoryCleanup(this ILogger logger)
Parameters
loggerILogger