KIP9 (Persistent Storage Mass) and KIP13 (Transient Storage Mass) introduced new types of mass which represent some resource consumption within a node. Originally there was only compute mass (usage of compute resource) but now there is also persistent storage mass (usage of storage space that persist between pruning periods) and transient storage mass (usage of storage space only within a pruning period).
The KIPs above also propose to independently track each mass when checking for block mass limit on the consensus level. This allows fo optimal block space allocation for transactions that consume different resources. The block mass limit is 500,000
grams. So such independent tracking allows for including two transactions that have masses (compute:490,000g; persistent_storage_mass: 10,000g) and (compute:10,000g; persistent_storage_mass: 490,000g) in the same block.
Now, an interesting question arises: On the mempool level, when constructing the block template, how can the transaction selection logic be updated to optimize for block space consumption?