Okay I can see the cold/hot terminology is confusing here, and we’ll think about renaming these potentially.
Right now, what we’re calling “cold” storage is everything we’re storing in Tigris. Which is the entire filesystem of your Sprite. Since we have to keep this around 100% of the time (a Sprite’s data has to be stored somewhere 100% of the time, else there’ll be data loss), you are always billed for cold storage for all of your Sprites, until your destroy them. But that’s why cold storage is extremely cheap - $0.02/GB-month.
“Hot” storage is the amount of local NVMe that we need to use for caching when your Sprite is running. Since we can offload this whenever your Sprite is not running (i.e. when your Sprite is warm/cold), you are only billed for hot storage when your Sprite is actually running (as mentioned, Sprites self-report their usage of CPU/RAM/hot storage, so there’s no way we can bill you when your Sprite is not running).
The amount of hot storage used by your Sprite depends a lot on the workload. E.g. some Sprites’ workloads might require touching most/all of their filesystem regularly, in which case we’ll end up caching a lot of the filesystem. Others (probably most) will in general touch a small fraction of the filesystem at any one time, and so we don’t need to keep that much cached at once.
So just to directly address the q: storage doesn’t switch between hot and cold, those are just two different kinds of storage we utilise and therefore for which we bill. Cold storage is what we keep in Tigris, hot storage is what we need to cache on a local NVMe volume.