-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
task: add task size to tracing instrumentation (#6881)
In Tokio, the futures for tasks are stored on the stack unless they are explicitly boxed, either by the user or auto-boxed by Tokio when they are especially large. Auto-boxing now also occurs in release mode (since #6826). Having very large futures can be problematic as it can cause a stack overflow. In some cases it might be desireable to have smaller futures, even if they are placed on the heap. This change adds the size of the future driving an async task or the function driving a blocking task to the tracing instrumentation. In the case of a future that is auto-boxed by Tokio, both the final size as well the original size before boxing is included. To do this, a new struct `SpawnMeta` gets passed down from where a future might get boxed to where the instrumentation is added. This contains the task name (optionally) and the original future or function size. If the `tokio_unstable` cfg flag and the `tracing` feature aren't both enabled, then this struct will be zero sized, which is a small improvement on the previous behavior of unconditionally passing down an `Option<&str>` for the name. This will make this information immediately available in Tokio Console, and will enable new lints which will warn users if they have large futures (just for async tasks). We have some tests under the `tracing-instrumentation` crate which test that the `size.bytes` and `original_size.bytes` fields are set correctly. The minimal version of `tracing` required for Tokio has been bumped from 0.1.25 to 0.1.29 to get the `Value` impl on `Option<T>`. Given that the current version is 0.1.40, this seems reasonable, especially given that Tracing's MSRV is still lower than Tokio's in the latest version.
- Loading branch information
Showing
10 changed files
with
278 additions
and
103 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.