123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // +build solaris,cgo
- package sysinfo
- import (
- "bytes"
- "os/exec"
- "strconv"
- "strings"
- )
- /*
- #cgo LDFLAGS: -llgrp
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/lgrp_user.h>
- int getLgrpCount() {
- lgrp_cookie_t lgrpcookie = LGRP_COOKIE_NONE;
- uint_t nlgrps;
- if ((lgrpcookie = lgrp_init(LGRP_VIEW_OS)) == LGRP_COOKIE_NONE) {
- return -1;
- }
- nlgrps = lgrp_nlgrps(lgrpcookie);
- return nlgrps;
- }
- */
- import "C"
- // IsCPUSharesAvailable returns whether CPUShares setting is supported.
- // We need FSS to be set as default scheduling class to support CPU Shares
- func IsCPUSharesAvailable() bool {
- cmd := exec.Command("/usr/sbin/dispadmin", "-d")
- outBuf := new(bytes.Buffer)
- errBuf := new(bytes.Buffer)
- cmd.Stderr = errBuf
- cmd.Stdout = outBuf
- if err := cmd.Run(); err != nil {
- return false
- }
- return (strings.Contains(outBuf.String(), "FSS"))
- }
- // New returns a new SysInfo, using the filesystem to detect which features
- // the kernel supports.
- //NOTE Solaris: If we change the below capabilities be sure
- // to update verifyPlatformContainerSettings() in daemon_solaris.go
- func New(quiet bool) *SysInfo {
- sysInfo := &SysInfo{}
- sysInfo.cgroupMemInfo = setCgroupMem(quiet)
- sysInfo.cgroupCPUInfo = setCgroupCPU(quiet)
- sysInfo.cgroupBlkioInfo = setCgroupBlkioInfo(quiet)
- sysInfo.cgroupCpusetInfo = setCgroupCPUsetInfo(quiet)
- sysInfo.IPv4ForwardingDisabled = false
- sysInfo.AppArmor = false
- return sysInfo
- }
- // setCgroupMem reads the memory information for Solaris.
- func setCgroupMem(quiet bool) cgroupMemInfo {
- return cgroupMemInfo{
- MemoryLimit: true,
- SwapLimit: true,
- MemoryReservation: false,
- OomKillDisable: false,
- MemorySwappiness: false,
- KernelMemory: false,
- }
- }
- // setCgroupCPU reads the cpu information for Solaris.
- func setCgroupCPU(quiet bool) cgroupCPUInfo {
- return cgroupCPUInfo{
- CPUShares: true,
- CPUCfsPeriod: false,
- CPUCfsQuota: true,
- CPURealtimePeriod: false,
- CPURealtimeRuntime: false,
- }
- }
- // blkio switches are not supported in Solaris.
- func setCgroupBlkioInfo(quiet bool) cgroupBlkioInfo {
- return cgroupBlkioInfo{
- BlkioWeight: false,
- BlkioWeightDevice: false,
- }
- }
- // setCgroupCPUsetInfo reads the cpuset information for Solaris.
- func setCgroupCPUsetInfo(quiet bool) cgroupCpusetInfo {
- return cgroupCpusetInfo{
- Cpuset: true,
- Cpus: getCPUCount(),
- Mems: getLgrpCount(),
- }
- }
- func getCPUCount() string {
- ncpus := C.sysconf(C._SC_NPROCESSORS_ONLN)
- if ncpus <= 0 {
- return ""
- }
- return strconv.FormatInt(int64(ncpus), 16)
- }
- func getLgrpCount() string {
- nlgrps := C.getLgrpCount()
- if nlgrps <= 0 {
- return ""
- }
- return strconv.FormatInt(int64(nlgrps), 16)
- }
|