[ 
https://issues.apache.org/jira/browse/FLINK-39404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yuepeng Pan updated FLINK-39404:
--------------------------------
    Affects Version/s: 2.5.0

> HardwareDescription reports incorrect CPU cores in containerized environments 
> with fractional CPU limits
> --------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-39404
>                 URL: https://issues.apache.org/jira/browse/FLINK-39404
>             Project: Flink
>          Issue Type: Bug
>          Components: API / Core, Runtime / Metrics, Runtime / Task
>    Affects Versions: 2.3.0, 2.5.0
>            Reporter: Dennis-Mircea Ciupitu
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.4.0
>
>
> When Flink runs inside a container with a fractional CPU limit (e.g. 0.5 
> cores), the Web UI and REST API report an incorrect number of CPU cores. A 
> TaskManager limited to 0.5 CPU cores is displayed as having 1 CPU core.
> {{Hardware.getNumberCPUCores()}} relies on 
> {{{}Runtime.getRuntime().availableProcessors(){}}}, which returns an int. In 
> containerized environments (Kubernetes, YARN), this value is the ceiling of 
> the container’s CPU limit, so a limit of {{0.5}} cores is reported as 
> {{{}1{}}}, and {{1.5}} cores is reported as {{{}2{}}}.
> Additionally, {{HardwareDescription.numberOfCPUCores}} is typed as 
> {{{}int{}}}, which fundamentally cannot represent fractional CPU allocations.
> This causes two problems:
>  # {*}Inaccurate Web UI display{*}: The Task Manager list and detail pages 
> show rounded-up CPU cores (e.g. "1" instead of "0.5"), misleading operators 
> about actual resource allocation.
>  # {*}Thread pool over-provisioning{*}: 
> {{ClusterEntrypointUtils.getPoolSize()}} computes {{{}4 * 
> Hardware.getNumberCPUCores(){}}}. With {{0.5}} CPU, this creates {{4}} 
> threads ({{{}4 * ceil(0.5) = 4 * 1 = 4{}}}) instead of the correct 2 threads 
> ({{{}ceil(4 * 0.5) = 2{}}}).
> h3. Steps to Reproduce
>  # Deploy a Flink cluster on Kubernetes with 
> {{kubernetes.taskmanager.cpu.amount: 0.5}}
>  # Open the Flink Web UI → Task Managers
>  # Observe that "CPU Cores" shows *1* instead of *0.5*
> h3. Expected Behavior
>  * The Task Manager Web UI should display *0.5* CPU cores
>  * Thread pool sizing should use the fractional value before ceiling: 
> {{ceil(4 * 0.5) = 2}} threads
> h3. Actual Behavior
>  * The Web UI displays *1* CPU core
>  * Thread pool sizing over-provisions: {{4 * ceil(0.5) = 4}} threads



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to