pub struct DMSCDeviceScheduler { /* private fields */ }Expand description
§Device Scheduler
This file implements a comprehensive device scheduler for DMSC, responsible for:
- Managing device resource allocation and scheduling
- Implementing multiple scheduling algorithms
- Recording allocation history and statistics
- Providing scheduling recommendations based on historical data
§Design Principles
- Multiple Scheduling Algorithms: Supports FirstFit, BestFit, WorstFit, RoundRobin, PriorityBased, and LoadBalanced policies
- Policy Per Device Type: Different device types can have different scheduling policies
- Allocation History: Maintains detailed records of all allocations
- Statistics and Recommendations: Provides insights into scheduling effectiveness and recommendations for optimization
- Resource Pool Integration: Works closely with the resource pool manager
- Thread Safety: Uses Arc and Mutex for thread-safe operations
- Scalability: Designed to handle large numbers of devices and allocations
§Usage Examples
use dmsc::device::{DMSCDeviceScheduler, DMSCAllocationRequest, DMSCDeviceType, DMSCDeviceCapabilities};
use dmsc::device::pool::DMSCResourcePoolManager;
use std::sync::{Arc, Mutex};
fn example() {
// Create resource pool manager
let pool_manager = Arc::new(Mutex::new(DMSCResourcePoolManager::new()));
// Create device scheduler
let mut scheduler = DMSCDeviceScheduler::new(pool_manager);
// Set scheduling policy for GPUs
scheduler.set_policy(DMSCDeviceType::GPU, dmsc::device::DMSCSchedulingPolicy::PriorityBased);
// Create allocation request
let request = DMSCAllocationRequest {
device_type: DMSCDeviceType::GPU,
capabilities: DMSCDeviceCapabilities {
memory_gb: Some(16.0),
compute_units: Some(512),
storage_gb: None,
bandwidth_gbps: None,
custom_capabilities: HashMap::new(),
},
priority: 5,
timeout_secs: 30,
};
// Allocate device
if let Some(allocation_id) = scheduler.allocate(&request) {
println!("Allocated device with ID: {}", allocation_id);
// Record release when done
scheduler.record_release(&allocation_id);
}
// Get statistics
let stats = scheduler.get_statistics();
println!("Total allocations: {}", stats.total_allocations);
}Device scheduler - manages device resource allocation and scheduling
This struct implements a comprehensive device scheduling system that manages resource allocation using various scheduling algorithms. It works closely with the resource pool manager to access available devices and implements multiple scheduling policies per device type.
Implementations§
Source§impl DMSCDeviceScheduler
impl DMSCDeviceScheduler
Sourcepub fn new(resource_pool_manager: Arc<RwLock<DMSCResourcePoolManager>>) -> Self
pub fn new(resource_pool_manager: Arc<RwLock<DMSCResourcePoolManager>>) -> Self
Create a new device scheduler with default policies and empty allocation history.
This method initializes the scheduler with default scheduling policies for each device type and connects it to the provided resource pool manager.
§Parameters
resource_pool_manager: Resource pool manager for accessing available devices
§Returns
A new DMSCDeviceScheduler instance with default policies and settings.
Sourcepub fn get_policy(&self, device_type: &DMSCDeviceType) -> &DMSCSchedulingPolicy
pub fn get_policy(&self, device_type: &DMSCDeviceType) -> &DMSCSchedulingPolicy
Get the scheduling policy for a specific device type.
This method returns the scheduling policy configured for the specified device type. If no policy is configured, it returns the default FirstFit policy.
§Parameters
device_type: Device type to get the policy for
§Returns
A reference to the DMSCSchedulingPolicy for the specified device type.
Sourcepub fn set_policy(
&mut self,
device_type: DMSCDeviceType,
policy: DMSCSchedulingPolicy,
)
pub fn set_policy( &mut self, device_type: DMSCDeviceType, policy: DMSCSchedulingPolicy, )
Set the scheduling policy for a specific device type.
This method configures the scheduling policy for the specified device type.
§Parameters
device_type: Device type to set the policy forpolicy: Scheduling policy to use for this device type
Sourcepub async fn select_device(
&self,
request: &DMSCAllocationRequest,
) -> Option<Arc<DMSCDevice>>
pub async fn select_device( &self, request: &DMSCAllocationRequest, ) -> Option<Arc<DMSCDevice>>
Select a device based on the scheduling policy for the requested device type.
This method selects the best device for the allocation request by:
- Getting the appropriate scheduling policy for the device type
- Collecting available devices from the resource pool manager
- Filtering devices that meet the requirements
- Applying the scheduling policy to select the best device
§Parameters
request: Allocation request with device type, capabilities, priority, and timeout
§Returns
An Arc<DMSCDevice> if a suitable device was found, or None if no device meets the requirements.
Sourcepub async fn allocate(&self, request: &DMSCAllocationRequest) -> Option<String>
pub async fn allocate(&self, request: &DMSCAllocationRequest) -> Option<String>
Allocate a device based on the scheduling policy.
This method selects a device using the appropriate scheduling policy and records the allocation.
§Parameters
request: Allocation request with device type, capabilities, priority, and timeout
§Returns
An allocation ID if successful, or None if no suitable device was found.
Sourcepub async fn record_allocation(
&self,
allocation_id: String,
device_id: String,
device_type: DMSCDeviceType,
capabilities_required: DMSCDeviceCapabilities,
)
pub async fn record_allocation( &self, allocation_id: String, device_id: String, device_type: DMSCDeviceType, capabilities_required: DMSCDeviceCapabilities, )
Record an allocation in the history.
This method records a new allocation in the history, including device information, capabilities required, and allocation time.
§Parameters
allocation_id: Unique allocation identifierdevice_id: ID of the allocated devicedevice_type: Type of the allocated devicecapabilities_required: Capabilities required for this allocation
Sourcepub async fn record_release(&self, allocation_id: &str)
pub async fn record_release(&self, allocation_id: &str)
Record the release of an allocation.
This method updates an allocation record to mark it as released, including the release time and duration of the allocation.
§Parameters
allocation_id: ID of the allocation to release
Sourcepub async fn get_statistics(&self) -> DMSCAllocationStatistics
pub async fn get_statistics(&self) -> DMSCAllocationStatistics
Get allocation statistics and metrics.
This method calculates comprehensive statistics about allocations, including:
- Total and successful allocations
- Success rate
- Average allocation duration
- Statistics by device type
§Returns
A DMSCAllocationStatistics struct containing comprehensive allocation statistics.
Sourcepub async fn get_recommendations(
&self,
device_type: &DMSCDeviceType,
) -> Vec<DMSCSchedulingRecommendation>
pub async fn get_recommendations( &self, device_type: &DMSCDeviceType, ) -> Vec<DMSCSchedulingRecommendation>
Get scheduling recommendations based on historical data.
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for DMSCDeviceScheduler
impl<'py> IntoPyObject<'py> for DMSCDeviceScheduler
Source§type Target = DMSCDeviceScheduler
type Target = DMSCDeviceScheduler
Source§type Output = Bound<'py, <DMSCDeviceScheduler as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCDeviceScheduler as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for DMSCDeviceScheduler
impl PyClass for DMSCDeviceScheduler
Source§impl PyClassImpl for DMSCDeviceScheduler
impl PyClassImpl for DMSCDeviceScheduler
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"# Device Scheduler\n\nThis file implements a comprehensive device scheduler for DMSC, responsible for:\n1. Managing device resource allocation and scheduling\n2. Implementing multiple scheduling algorithms\n3. Recording allocation history and statistics\n4. Providing scheduling recommendations based on historical data\n\n## Design Principles\n\n1. **Multiple Scheduling Algorithms**: Supports FirstFit, BestFit, WorstFit, RoundRobin, PriorityBased, and LoadBalanced policies\n2. **Policy Per Device Type**: Different device types can have different scheduling policies\n3. **Allocation History**: Maintains detailed records of all allocations\n4. **Statistics and Recommendations**: Provides insights into scheduling effectiveness and recommendations for optimization\n5. **Resource Pool Integration**: Works closely with the resource pool manager\n6. **Thread Safety**: Uses Arc and Mutex for thread-safe operations\n7. **Scalability**: Designed to handle large numbers of devices and allocations\n\n## Usage Examples\n\n```rust\nuse dmsc::device::{DMSCDeviceScheduler, DMSCAllocationRequest, DMSCDeviceType, DMSCDeviceCapabilities};\nuse dmsc::device::pool::DMSCResourcePoolManager;\nuse std::sync::{Arc, Mutex};\n\nfn example() {\n // Create resource pool manager\n let pool_manager = Arc::new(Mutex::new(DMSCResourcePoolManager::new()));\n \n // Create device scheduler\n let mut scheduler = DMSCDeviceScheduler::new(pool_manager);\n \n // Set scheduling policy for GPUs\n scheduler.set_policy(DMSCDeviceType::GPU, dmsc::device::DMSCSchedulingPolicy::PriorityBased);\n \n // Create allocation request\n let request = DMSCAllocationRequest {\n device_type: DMSCDeviceType::GPU,\n capabilities: DMSCDeviceCapabilities {\n memory_gb: Some(16.0),\n compute_units: Some(512),\n storage_gb: None,\n bandwidth_gbps: None,\n custom_capabilities: HashMap::new(),\n },\n priority: 5,\n timeout_secs: 30,\n };\n \n // Allocate device\n if let Some(allocation_id) = scheduler.allocate(&request) {\n println!(\"Allocated device with ID: {}\", allocation_id);\n \n // Record release when done\n scheduler.record_release(&allocation_id);\n }\n \n // Get statistics\n let stats = scheduler.get_statistics();\n println!(\"Total allocations: {}\", stats.total_allocations);\n}\n```\nDevice scheduler - manages device resource allocation and scheduling\n\nThis struct implements a comprehensive device scheduling system that manages\nresource allocation using various scheduling algorithms. It works closely with\nthe resource pool manager to access available devices and implements multiple\nscheduling policies per device type.\x00"
const RAW_DOC: &'static CStr = c"# Device Scheduler\n\nThis file implements a comprehensive device scheduler for DMSC, responsible for:\n1. Managing device resource allocation and scheduling\n2. Implementing multiple scheduling algorithms\n3. Recording allocation history and statistics\n4. Providing scheduling recommendations based on historical data\n\n## Design Principles\n\n1. **Multiple Scheduling Algorithms**: Supports FirstFit, BestFit, WorstFit, RoundRobin, PriorityBased, and LoadBalanced policies\n2. **Policy Per Device Type**: Different device types can have different scheduling policies\n3. **Allocation History**: Maintains detailed records of all allocations\n4. **Statistics and Recommendations**: Provides insights into scheduling effectiveness and recommendations for optimization\n5. **Resource Pool Integration**: Works closely with the resource pool manager\n6. **Thread Safety**: Uses Arc and Mutex for thread-safe operations\n7. **Scalability**: Designed to handle large numbers of devices and allocations\n\n## Usage Examples\n\n```rust\nuse dmsc::device::{DMSCDeviceScheduler, DMSCAllocationRequest, DMSCDeviceType, DMSCDeviceCapabilities};\nuse dmsc::device::pool::DMSCResourcePoolManager;\nuse std::sync::{Arc, Mutex};\n\nfn example() {\n // Create resource pool manager\n let pool_manager = Arc::new(Mutex::new(DMSCResourcePoolManager::new()));\n \n // Create device scheduler\n let mut scheduler = DMSCDeviceScheduler::new(pool_manager);\n \n // Set scheduling policy for GPUs\n scheduler.set_policy(DMSCDeviceType::GPU, dmsc::device::DMSCSchedulingPolicy::PriorityBased);\n \n // Create allocation request\n let request = DMSCAllocationRequest {\n device_type: DMSCDeviceType::GPU,\n capabilities: DMSCDeviceCapabilities {\n memory_gb: Some(16.0),\n compute_units: Some(512),\n storage_gb: None,\n bandwidth_gbps: None,\n custom_capabilities: HashMap::new(),\n },\n priority: 5,\n timeout_secs: 30,\n };\n \n // Allocate device\n if let Some(allocation_id) = scheduler.allocate(&request) {\n println!(\"Allocated device with ID: {}\", allocation_id);\n \n // Record release when done\n scheduler.record_release(&allocation_id);\n }\n \n // Get statistics\n let stats = scheduler.get_statistics();\n println!(\"Total allocations: {}\", stats.total_allocations);\n}\n```\nDevice scheduler - manages device resource allocation and scheduling\n\nThis struct implements a comprehensive device scheduling system that manages\nresource allocation using various scheduling algorithms. It works closely with\nthe resource pool manager to access available devices and implements multiple\nscheduling policies per device type.\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCDeviceScheduler>
type ThreadChecker = SendablePyClass<DMSCDeviceScheduler>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyTypeInfo for DMSCDeviceScheduler
impl PyTypeInfo for DMSCDeviceScheduler
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for DMSCDeviceScheduler
impl ExtractPyClassWithClone for DMSCDeviceScheduler
Auto Trait Implementations§
impl Freeze for DMSCDeviceScheduler
impl !RefUnwindSafe for DMSCDeviceScheduler
impl Send for DMSCDeviceScheduler
impl Sync for DMSCDeviceScheduler
impl Unpin for DMSCDeviceScheduler
impl !UnwindSafe for DMSCDeviceScheduler
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more