IceCC调度器日志中“<host> not eligible”含义及场景解读
Hey there, let's unpack that <hostname> not eligible log message you're seeing in your icecc-scheduler logs, and figure out why it keeps popping up when you're trying to diagnose slow build times with Icecream.
Put simply, this message tells you that the Icecream scheduler has determined the specified host can't be used to run the current compilation task. The scheduler checks each available node against a set of criteria before assigning a task, and if a node fails any of those checks, it gets marked as "not eligible" for that particular job.
Here are the most frequent causes behind this log entry:
- Architecture mismatch: The compilation task is targeting a CPU architecture that the host doesn't support. For example, trying to run an x86_64 build task on an ARM-based node will trigger this.
- Insufficient resources: The host is already under heavy load (high CPU usage, low available memory) or doesn't meet the minimum resource requirements for the task. Icecream avoids overloading nodes that can't handle additional work.
- Mismatched build environment: Icecream requires consistent build toolchains across all nodes. If the host has a different version of the compiler (e.g., GCC 11 vs GCC 12) or lacks required libraries/headers needed for the task, it won't be eligible.
- Node connectivity/state issues: The host might be offline, experiencing network issues that prevent communication with the scheduler, or marked as "disabled" in the scheduler's configuration.
- Configuration restrictions: The scheduler could have explicit rules limiting which nodes can run certain tasks (like a blacklist for specific job types), or the host has reached its maximum allowed number of concurrent tasks.
To narrow down why your nodes are being marked ineligible, try these steps:
- Verify architecture compatibility: Run
uname -mon both the machine submitting the build and the ineligible host to confirm they use the same CPU architecture. - Check host resource usage: Log into the host and use tools like
top,htop, orfree -hto check CPU load and available memory. If the node is already maxed out, it won't accept new tasks. - Validate toolchain consistency: Compare the compiler versions on the submitter machine and the host (e.g.,
gcc --versionorclang --version). Icecream relies on matching toolchains to avoid build errors. - Check node status in the scheduler: Run
icecc-scheduler -lon the scheduler machine to see if the host is listed as "online". If it's missing or marked as offline, there's a connectivity problem. - Review configuration files: Check the scheduler's config (usually
/etc/icecc/scheduler.conf) and the host's iceccd config (/etc/icecc/iceccd.conf) for any restrictions on task assignment, likeMAX_JOBSlimits or excluded task types.
内容的提问来源于stack exchange,提问作者Spacemoose

