在跟踪中,缓冲模式是跟踪记录提供程序在填充其缓冲区时的行为。如果跟踪记录提供程序的缓冲区在跟踪记录运行时填满,您可能会获得不完整的跟踪记录。
每个跟踪记录提供程序的行为都独立于其他跟踪记录提供程序。 如果一个跟踪记录提供程序填充了其缓冲区,其他跟踪记录提供程序仍可继续将跟踪事件记录到自己的缓冲区,直到跟踪记录停止。
有三种缓冲模式:
如需了解 fuchsia.tracing.provider
FIDL 的 BufferingMode
,请参阅 BufferingMode
。
一次性
在这种缓冲模式下,只有一个持久的缓冲区。如果跟踪提供程序的缓冲区已满,该跟踪提供程序会停止记录事件。
圆形
在这种缓冲区模式下,跟踪缓冲区分为三部分:持久性缓冲区和两个滚动缓冲区。持久性缓冲区用于足够重要的记录,以免丢失。其中包括线程和字符串引用的记录。
当您启动跟踪记录时,跟踪提供程序会将数据写入第一个滚动缓冲区。当一个滚动缓冲区填满后,跟踪提供程序会将数据写入另一个滚动缓冲区。
如果持久性缓冲区已填充,则对跟踪提供程序的跟踪将停止。此行为不会影响其他跟踪提供程序。
在线播放
在这种缓冲区模式下,跟踪缓冲区分为三部分:持久性缓冲区和两个滚动缓冲区。持久性缓冲区用于足够重要的记录,以免丢失。其中包括线程和字符串引用的记录。
当您启动跟踪记录时,跟踪提供程序会将数据写入第一个滚动缓冲区。当一个滚动缓冲区填满后,跟踪提供程序会通知跟踪管理器一个滚动缓冲区已满,同时会将数据写入另一个滚动缓冲区。如果另一个滚动缓冲区不可用,则数据将被丢弃,直到滚动缓冲区可用。从填充缓冲区到跟踪管理器报告缓冲区内容已保存之时,滚动缓冲区会变得不可用。
数据丢失的可能性取决于跟踪提供程序创建记录的速率以及跟踪管理器保存缓冲区的速率。丢弃的数据可能会导致轨迹不完整,但在大多数情况下,这比等待缓冲区保存而影响程序性能更可取。
如果持久性缓冲区已填充,则对跟踪提供程序的跟踪将停止。此行为不会影响其他跟踪提供程序。