|
61 | 61 | #' On Unix, query control group (cgroup v1) _quota_ value |
62 | 62 | #' \code{cpu.cfs_quota_us} / \code{cpu.cfs_period_us}. |
63 | 63 | #' |
| 64 | +#' \item `"cgroups2.cpuset.cpus"` - |
| 65 | +#' On Unix, query control group (cgroup v2) _affinity_ value |
| 66 | +#' \code{cpuset.cpus}. |
| 67 | +#' |
| 68 | +#' \item `"cgroups2.cpuset.cpus.effective"` - |
| 69 | +#' On Unix, query control group (cgroup v2) _effective affinity_ value |
| 70 | +#' \code{cpuset.cpus.effective}. |
| 71 | +#' |
64 | 72 | #' \item `"cgroups2.cpu.max"` - |
65 | 73 | #' On Unix, query control group (cgroup v2) _quota_ value \code{cpu.max}. |
66 | 74 | #' |
|
268 | 276 | #' |
269 | 277 | #' @importFrom parallel detectCores |
270 | 278 | #' @export |
271 | | -availableCores <- function(constraints = NULL, methods = getOption2("parallelly.availableCores.methods", c("system", "/proc/self/status", "cgroups.cpuset", "cgroups.cpuquota", "cgroups2.cpu.max", "nproc", "mc.cores", "BiocParallel", "_R_CHECK_LIMIT_CORES_", "Bioconductor", "LSF", "PJM", "PBS", "SGE", "Slurm", "fallback", "custom")), na.rm = TRUE, logical = getOption2("parallelly.availableCores.logical", TRUE), default = c(current = 1L), which = c("min", "max", "all"), omit = getOption2("parallelly.availableCores.omit", 0L), max = getOption2("parallelly.availableCores.max", Inf)) { |
| 279 | +availableCores <- function(constraints = NULL, methods = getOption2("parallelly.availableCores.methods", c("system", "/proc/self/status", "cgroups.cpuset", "cgroups.cpuquota", "cgroups2.cpuset.cpus", "cgroups2.cpuset.cpus.effective", "cgroups2.cpu.max", "nproc", "mc.cores", "BiocParallel", "_R_CHECK_LIMIT_CORES_", "Bioconductor", "LSF", "PJM", "PBS", "SGE", "Slurm", "fallback", "custom")), na.rm = TRUE, logical = getOption2("parallelly.availableCores.logical", TRUE), default = c(current = 1L), which = c("min", "max", "all"), omit = getOption2("parallelly.availableCores.omit", 0L), max = getOption2("parallelly.availableCores.max", Inf)) { |
272 | 280 | stop_if_not( |
273 | 281 | is.null(constraints) || is.character(constraints), !anyNA(constraints) |
274 | 282 | ) |
@@ -373,6 +381,14 @@ availableCores <- function(constraints = NULL, methods = getOption2("parallelly. |
373 | 381 | n <- as.integer(floor(n + 0.5)) |
374 | 382 | if (n == 0L) n <- 1L ## If CPU quota < 0.5, round up to one CPU |
375 | 383 | } |
| 384 | + } else if (method == "cgroups2.cpuset.cpus") { |
| 385 | + ## Number of cores according to Unix cgroups v2 CPU set |
| 386 | + n <- length(getCGroups2CpuSet("cpuset.cpus")) |
| 387 | + if (n == 0L) n <- NA_integer_ |
| 388 | + } else if (method == "cgroups2.cpuset.cpus.effective") { |
| 389 | + ## Number of cores according to Unix cgroups v2 effective CPU set |
| 390 | + n <- length(getCGroups2CpuSet("cpuset.cpus.effective")) |
| 391 | + if (n == 0L) n <- NA_integer_ |
376 | 392 | } else if (method == "cgroups2.cpu.max") { |
377 | 393 | ## Number of cores according to Unix cgroups v2 CPU max quota |
378 | 394 | n <- getCGroups2CpuMax() |
@@ -436,7 +452,7 @@ availableCores <- function(constraints = NULL, methods = getOption2("parallelly. |
436 | 452 | idx_fallback <- which(names(ncores) == "fallback") |
437 | 453 | if (length(idx_fallback) == 1) { |
438 | 454 | ## Use 'fallback' if and only there are only "special" options specified |
439 | | - special <- c("system", "/proc/self/status", "cgroups.cpuset", "cgroups.cpuquota", "cgroups2.cpu.max", "nproc") |
| 455 | + special <- c("system", "/proc/self/status", "cgroups.cpuset", "cgroups.cpuquota", "cgroups2.cpuset.cpus", "cgroups2.cpuset.cpus.effective", "cgroups2.cpu.max", "nproc") |
440 | 456 | ## 'connections' and 'connections-N' are also "special" options |
441 | 457 | special <- c(special, grep(pattern_connections, constraints, value = TRUE)) |
442 | 458 | others <- setdiff(names(ncores), c("fallback", special)) |
|
0 commit comments