API Reference
This page provides complete API reference documentation for Gthulhu and Qumun.
Qumun API
Core Module
core.LoadSched()
Load BPF scheduler program.
Parameters:
- bpfObjectFile: Path to BPF object file (e.g., main.bpf.o)
Returns:
- *BPFModule: BPF module instance
Example:
BPFModule.AssignUserSchedPid()
Set the PID of the user-space scheduler.
Parameters:
- pid: Process ID of the user-space scheduler
Example:
pid := os.Getpid()
err := bpfModule.AssignUserSchedPid(pid)
if err != nil {
    log.Printf("AssignUserSchedPid failed: %v", err)
}
BPFModule.Attach()
Attach BPF program to kernel.
Example:
BPFModule.ReceiveProcExitEvt()
Receive process exit events.
Returns:
- int: PID of exited process, or -1 if no events
Example:
go func() {
    for {
        if pid := bpfModule.ReceiveProcExitEvt(); pid != -1 {
            sched.DeletePidFromTaskInfo(pid)
        } else {
            time.Sleep(100 * time.Millisecond)
        }
    }
}()
Cache Module (util package)
cache.InitCacheDomains()
Initialize CPU cache domains.
Parameters:
- bpfModule: BPF module instance
Example:
err := cache.InitCacheDomains(bpfModule)
if err != nil {
    log.Panicf("InitCacheDomains failed: %v", err)
}
Scheduler Module (sched package)
sched.DeletePidFromTaskInfo()
Delete specified PID from task information.
Parameters:
- pid: Process ID to delete
BPF Program API
Map Structures
task_info_map
Hash map storing task information.
struct {
    __uint(type, BPF_MAP_TYPE_HASH);
    __uint(max_entries, MAX_TASKS);
    __type(key, pid_t);
    __type(value, struct task_info);
} task_info_map SEC(".maps");
struct task_info
Task information structure.
struct task_info {
    __u64 vruntime;                    // Virtual runtime
    __u32 weight;                      // Task weight
    __u32 slice_ns;                    // Time slice (nanoseconds)
    __u64 exec_start;                  // Execution start time
    __u64 sum_exec_runtime;            // Cumulative execution time
    __u32 voluntary_ctxt_switches;     // Voluntary context switches
    __u32 nonvoluntary_ctxt_switches;  // Non-voluntary context switches
};
BPF Program Entry Points
sched_ext_ops
Scheduler operations structure.
SEC(".struct_ops.link")
struct sched_ext_ops gthulhu_ops = {
    .select_cpu         = (void *)gthulhu_select_cpu,
    .enqueue            = (void *)gthulhu_enqueue,
    .dispatch           = (void *)gthulhu_dispatch,
    .running            = (void *)gthulhu_running,
    .stopping           = (void *)gthulhu_stopping,
    .enable             = (void *)gthulhu_enable,
    .init               = (void *)gthulhu_init,
    .exit               = (void *)gthulhu_exit,
    .name               = "gthulhu",
};
Core Functions
gthulhu_select_cpu()
Select appropriate CPU core.
Parameters:
- p: Task structure pointer
- prev_cpu: Previous CPU number
- wake_flags: Wake-up flags
Returns:
- s32: Selected CPU number
gthulhu_enqueue()
Enqueue task.
gthulhu_dispatch()
Dispatch task for execution.
Configuration Options
Environment Variables
| Variable | Description | Default | Type | 
|---|---|---|---|
GTHULHU_DEBUG | 
Enable debug mode | false | 
bool | 
GTHULHU_LOG_LEVEL | 
Log level | INFO | 
string | 
GTHULHU_MAX_TASKS | 
Maximum number of tasks | 4096 | 
int | 
Runtime Parameters
Time Slice Configuration
// Base time slice (nanoseconds)
#define BASE_SLICE_NS    5000000ULL  // 5ms
// Minimum time slice
#define MIN_SLICE_NS     1000000ULL  // 1ms
// Maximum time slice
#define MAX_SLICE_NS    20000000ULL  // 20ms
Weight Configuration
// Weight table corresponding to nice values
static const int prio_to_weight[40] = {
 /* -20 */     88761,     71755,     56483,     46273,     36291,
 /* -15 */     29154,     23254,     18705,     14949,     11916,
 /* -10 */      9548,      7620,      6100,      4904,      3906,
 /*  -5 */      3121,      2501,      1991,      1586,      1277,
 /*   0 */      1024,       820,       655,       526,       423,
 /*   5 */       335,       272,       215,       172,       137,
 /*  10 */       110,        87,        70,        56,        45,
 /*  15 */        36,        29,        23,        18,        15,
};
Error Handling
Common Error Codes
| Error Code | Description | Solution | 
|---|---|---|
-EPERM | 
Permission denied | Run with root privileges | 
-ENOENT | 
BPF file not found | Verify BPF object file path | 
-EINVAL | 
Invalid parameters | Check function parameters | 
-ENOMEM | 
Out of memory | Increase system memory | 
Error Handling Example
// Error handling pattern
if err := bpfModule.Attach(); err != nil {
    switch {
    case strings.Contains(err.Error(), "permission denied"):
        log.Fatal("Root privileges required")
    case strings.Contains(err.Error(), "no such file"):
        log.Fatal("BPF file does not exist")
    default:
        log.Fatalf("Unknown error: %v", err)
    }
}
Debugging API
Statistics Information
// Get scheduler statistics
type SchedulerStats struct {
    TotalTasks          uint64
    ActiveTasks         uint64
    ContextSwitches     uint64
    AverageLatency      time.Duration
    CPUUtilization      float64
}
func GetSchedulerStats() *SchedulerStats {
    // Implementation details...
}
Debug Tool Functions
// BPF debug macros
#define bpf_debug(fmt, args...) \
    bpf_trace_printk(fmt, sizeof(fmt), ##args)
// Trace task state changes
static void trace_task_state(struct task_struct *p, const char *event) {
    bpf_debug("Task %d: %s (vruntime=%llu)\n", 
              p->pid, event, get_task_vruntime(p));
}
Performance Tuning API
Dynamic Parameter Adjustment
// Adjust scheduling parameters
type SchedulingParams struct {
    BaseSliceNs      uint64
    MinSliceNs       uint64  
    MaxSliceNs       uint64
    LatencyFactor    float64
    WeightMultiplier float64
}
func UpdateSchedulingParams(params *SchedulingParams) error {
    // Implementation details...
}
Performance Monitoring
// Performance counters
struct perf_counters {
    __u64 dispatch_count;
    __u64 enqueue_count;
    __u64 context_switch_count;
    __u64 total_runtime;
    __u64 idle_time;
};
API Version
Current API Version: v0.1.x
API Stability: Alpha (may have breaking changes)
More Examples
For more usage examples, please refer to the examples/ directory in the project source code.