# 2025q1 Homework1 (ideas)
contributed by < `SimonLiu423` >
## 還政於民的 sched_ext 及機器學習如何幫助 CPU 排程
> [Link](https://hackmd.io/@sysprog/BJdyxvxX0)
### About
#### CPU scheduling
- schedulable unit: task(sched_entity)
- tasks are run by CPU
- scheduler pick tests & most suitable CPU to run
#### CPU Load Balancing
- Distribute tasks evenly over CPUs.
- Make overall processing more efficient
- Optimize response time
#### SCX (scheduler extension and tools)

- eBPF to kernel is like JS to HTML
- SCX exposes interface for users to implement BPF scheduler
- **Speeds up experiments** of scheduling policies
- **Customization**
- **Rapid scheduler deployment**
#### Integrate ML into CPU scheduler
- collect data via **kprobe**
- use ML to determine whether to perform task migration or not (`can_migrate_task()` in Linux Kernel)
##### Experiment for integrating to SCX
- Create load imbalance with mixtures of CPU-bound tasks and I/O-bound tasks
- CPU-bound task: linux kernel compilation
- I/O-bound task: fio disk I/O task
### Questions
- The experiment only shows that using ML for load balancing is effective when there's a highly CPU intensive task and a I/O intensive task. But what about other cases?
---
## 高性能網頁伺服器
### About
kHTTPd uses kernel thread to process connections, a new thread is created for each time a new connection occurs.
When there's a large amount of connections, it would spend a lot of time creating threads.
#### CMWQ (Concurrency Managed Workqueue)
- Threads are created beforehand
- Assign tasks to threads directly
#### Content Cache
- Uses RCU
- calculate hash for request url and store in hash table
#### Introduce timer to cleanup timeout connections
- Implemented with priority queue
- Constantly check the queue using another thread and delete timed out connections
- uses spinlock
---
## 打造具備網路連線的精簡虛擬機器
### About
- System VM
- Need to run OS
- Need virtualization for hardware
- Process VM
- Runs program (e.g. Java VM)
- Hypervisor
- Type-1
- Can access hardware directly
- Type-2
- An application running on OS
- Less efficient than Type-1
- KVM (Kernel-based Virtual Machine)
- Make kernel serve as Hypervisor
- KVM-Host
- based on KVM
- simple
- no network connection
- VirtIO
- virtualization standard
- PCI device
- Virtqueue
---
## 開發無線網路裝置驅動程式