[−][src]Enum glommio::prelude::Shares
Represents how many shares a TaskQueue
should receive.
Glommio's scheduler doesn't work with priorities, but rather shares. That means that if there is only one active task queue in the system, it will always receive 100 % of the resources.
As soon as two or more task queues are active resources will be split between them proportionally to their shares: a queue with more shares will receive more resources.
Be careful when trying to reason about percentages of utilization as they will depend
on the active task queues (The percentage of resources assigned to a task queue should be close to
shares(i) / sum(shares(i) for i in t)
)
For example, if all task queues have 1000 shares (the default), when two of them are active they will have each 50% of the resources. As soon as a third one activates, each now has 33%.
This can be far off if there are other heavy processes competing for resources with your application in a way that glommio can't see. For best results you should consider dedicating CPUs and storage devices to your application.
Shares are enforced by the system to be between 1 and 1000. So if all TaskQueue
s want
maximum resources they should all get similar fractions. It is not possible for a TaskQueue
to say it wants to use more than the others: it is only possible for the other task queues to
say they are okay with using less (by reducing their shares)
Variants
Static(usize)
Static shares never change over the course of a lifetime of the application, therefore they never have to be recomputed
Dynamic(Rc<dyn SharesManager>)
Dynamic shares can change and are periodically recomputed.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Shares
impl !Send for Shares
impl !Sync for Shares
impl Unpin for Shares
impl !UnwindSafe for Shares
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,