Table of Contents

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

logger ILogger
buffer nint
offset nuint
index int
encoder nint

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

logger ILogger
duration double

CircuitBreakerReset(ILogger)

[LoggerMessage(EventId = 5204, Level = LogLevel.Information, Message = "Circuit breaker reset, Metal GPU operations resuming")]
public static void CircuitBreakerReset(this ILogger logger)

Parameters

logger ILogger

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

logger ILogger
commandBuffer nint

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

logger ILogger
commandCount int
duration double

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

logger ILogger
operation string
streamId string
duration double

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

logger ILogger
totalStreams long
totalCommands long

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

logger ILogger
architecture string
device nint
optimalStreams int
maxConcurrent int

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

logger ILogger
size nuint
index int
encoder nint

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

logger ILogger
operationName string

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

logger ILogger
operationName string

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

logger ILogger
health MetalExecutionHealth
architecture string
activeOps int

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

logger ILogger

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

logger ILogger
startEvent string
endEvent string
time double

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

logger ILogger
encoder nint
commandCount int

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

logger ILogger
architecture string

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

logger ILogger
retryCount int
maxRetries int
delay double
error MetalError

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

logger ILogger
totalEvents long

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

logger ILogger
maxEvents int
timingPool int
syncPool int

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

logger ILogger
created int
reused int
reuseRatio double

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

logger ILogger
timingSize int
syncSize int

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

logger ILogger
eventId string
commandQueue nint

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

logger ILogger
operations long
resources long
uptime TimeSpan

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

logger ILogger
architecture string
device nint

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

logger ILogger
operations long
resources long
activeOps int
successRate double

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

logger ILogger
nodeCount int
levelCount int

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

logger ILogger
operationId string
duration double

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

logger ILogger
operationId string
duration double

ExecutionPaused(ILogger)

[LoggerMessage(EventId = 5305, Level = LogLevel.Information, Message = "Metal execution context paused")]
public static void ExecutionPaused(this ILogger logger)

Parameters

logger ILogger

ExecutionResumed(ILogger)

[LoggerMessage(EventId = 5306, Level = LogLevel.Information, Message = "Metal execution context resumed")]
public static void ExecutionResumed(this ILogger logger)

Parameters

logger ILogger

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

logger ILogger
issueCount int

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

logger ILogger
activeEvents int
maxEvents int

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

logger ILogger
count int

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

logger ILogger
operationName string

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

logger ILogger
retryCount int

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

logger ILogger
operationName string
elapsedMs long

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

logger ILogger
operation string
gpuTime double
cpuTime double
overhead double

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

logger ILogger
operations long
successRate double
avgDuration double

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

logger ILogger
pipelineState nint
encoder nint

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

logger ILogger
totalCleaned int
timingCleaned int
syncCleaned int

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

logger ILogger
sessionId string
avgGpu double
minGpu double
maxGpu double
p95 double
throughput double

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

logger ILogger
resourceId string
type MetalResourceType
size long

ResourceUntracked(ILogger, string)

[LoggerMessage(EventId = 5304, Level = LogLevel.Trace, Message = "Untracked Metal resource {ResourceId}")]
public static void ResourceUntracked(this ILogger logger, string resourceId)

Parameters

logger ILogger
resourceId string

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

logger ILogger
buffers int
textures int
pipelines int
memory double

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

logger ILogger
streamId string
priority MetalStreamPriority
flags MetalStreamFlags

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

logger ILogger
groupName string
streamCount int

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

logger ILogger
eventId string
handle nint

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

logger ILogger
gridW int
gridH int
gridD int
tgW int
tgH int
tgD int

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

logger ILogger
eventId string
handle nint

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

logger ILogger
eventHandle nint

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

logger ILogger
eventHandle nint

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

logger ILogger
eventHandle nint

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

logger ILogger
startEventId string
endEventId string

UnifiedMemoryCleanup(ILogger)

[LoggerMessage(EventId = 5208, Level = LogLevel.Information, Message = "Performing unified memory cleanup on Apple Silicon")]
public static void UnifiedMemoryCleanup(this ILogger logger)

Parameters

logger ILogger