Skip to content

Commit

Permalink
Merge pull request #3358 from JuliaLang/jn/sysinfo
Browse files Browse the repository at this point in the history
add a Sys module and start to move some system constants out of base
  • Loading branch information
JeffBezanson committed Jun 12, 2013
2 parents 495b3ed + f7a9a4b commit dbac83f
Show file tree
Hide file tree
Showing 11 changed files with 178 additions and 209 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ ifeq ($(USE_SYSTEM_LIBUV),0)
cp -a $(BUILD)/lib/libuv.a $(PREFIX)/$(JL_PRIVATE_LIBDIR)
cp -a $(BUILD)/include/uv* $(PREFIX)/include/julia
endif
cp -a src/julia.h $(PREFIX)/include/julia
cp -a src/julia.h src/support/*.h $(PREFIX)/include/julia
# Copy system image
cp $(BUILD)/$(JL_PRIVATE_LIBDIR)/sys.ji $(PREFIX)/$(JL_PRIVATE_LIBDIR)
# Copy in all .jl sources as well
Expand Down
4 changes: 2 additions & 2 deletions base/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ file_constants.jl: ../src/file_constants.h
uv_constants.jl: ../src/uv_constants.h
$(QUIET_PERL) ${CC} -E -P "-I$(LIBUV_INC)" -DJULIA ../src/uv_constants.h | tail -n 5 > $@

build_h.jl: ../Make.inc ../src/os_detect.h
$(QUIET_PERL) $(CC) -E -P -DJULIA ../src/os_detect.h | grep OS_NAME > $@
build_h.jl: ../Make.inc build.h
$(QUIET_PERL) $(CC) -E -P -D_ARCH=$(ARCH) -D_MACHINE=$(shell $(CC) -dumpmachine) build.h -I../src/support | grep . > $@
@echo "const libm_name = \"$(LIBMNAME)\"" >> $@
@echo "const libblas_name = \"$(LIBBLASNAME)\"" >> $@
@echo "const liblapack_name = \"$(LIBLAPACKNAME)\"" >> $@
Expand Down
26 changes: 26 additions & 0 deletions base/build.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef OS_DETECT_H
#define OS_DETECT_H
#include "platform.h"

/* This file is used by Julia */

#if defined(_OS_WINDOWS_)
#define OS_CURRENT Windows
#elif defined(__linux__)
#define OS_CURRENT Linux
#elif defined(__FreeBSD__)
#define OS_CURRENT FreeBSD
#elif defined(__APPLE__)
#define OS_CURRENT Darwin
#else
#define OS_CURRENT Unknown
#warning OS_CURRENT is Unknown
#endif
const OS_NAME = :OS_CURRENT

#define XSTR(x) STR(x)
#define STR(x) #x
const ARCH = :_ARCH
const MACHINE = XSTR(_MACHINE)

#endif // OS_DETECT_H
11 changes: 3 additions & 8 deletions base/client.jl
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ function process_options(args::Array{Any,1})
elseif args[i]=="-p"
i+=1
if i > length(args) || !isdigit(args[i][1])
np = CPU_CORES
np = Sys.CPU_CORES
else
np = int(args[i])
end
Expand Down Expand Up @@ -301,6 +301,8 @@ function _start()
if Base.libblas_name == "libopenblas"
check_openblas()
end
Sys.init()
global const CPU_CORES = Sys.CPU_CORES

# set default local address
global bind_addr = getipaddr()
Expand All @@ -315,13 +317,6 @@ function _start()
end
end

# set CPU core count
global const CPU_CORES = int(
haskey(ENV,"JULIA_CPU_CORES") ?
ENV["JULIA_CPU_CORES"] :
ccall(:jl_cpu_cores, Int32, ())
)

#atexit(()->flush(STDOUT))
try
init_sched()
Expand Down
2 changes: 2 additions & 0 deletions base/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -224,5 +224,7 @@ export ref
const assign = setindex!
export assign

# will be removed from exports (moved into Base.Sys): OS_NAME, WORD_SIZE, CPU_CORES

typealias ComplexPair Complex
export ComplexPair
1 change: 1 addition & 0 deletions base/exports.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export
GMP,
QuadGK,
Sort,
Sys,
Test,
Pkg,
Operators,
Expand Down
1 change: 1 addition & 0 deletions base/sysimg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ include("darray.jl")
include("mmap.jl")

# utilities - version, timing, help, edit, metaprogramming
include("sysinfo.jl")
include("version.jl")
include("datafmt.jl")
include("deepcopy.jl")
Expand Down
133 changes: 133 additions & 0 deletions base/sysinfo.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
module Sys

export CPU_CORES,
OS_NAME,
WORD_SIZE,
ARCH,
MACHINE,
cpu_info,
uptime,
loadavg,
free_memory,
total_memory

import ..Base: WORD_SIZE, OS_NAME, ARCH, MACHINE, UV_error_t
import ..Base: show, repl_show

function init()
# set CPU core count
global const CPU_CORES = int(
haskey(ENV,"JULIA_CPU_CORES") ?
ENV["JULIA_CPU_CORES"] :
ccall(:jl_cpu_cores, Int32, ())
)
global const SC_CLK_TCK = ccall(:jl_SC_CLK_TCK, Clong, ())
end

type UV_cpu_info_t
model::Ptr{Uint8}
speed::Int32
cpu_times!user::Uint64
cpu_times!nice::Uint64
cpu_times!sys::Uint64
cpu_times!idle::Uint64
cpu_times!irq::Uint64
end
type CPUinfo
model::ASCIIString
speed::Int32
cpu_times!user::Uint64
cpu_times!nice::Uint64
cpu_times!sys::Uint64
cpu_times!idle::Uint64
cpu_times!irq::Uint64
CPUinfo(model,speed,u,n,s,id,ir)=new(model,speed,u,n,s,id,ir)
end
CPUinfo(info::UV_cpu_info_t) = CPUinfo(bytestring(info.model), info.speed,
info.cpu_times!user, info.cpu_times!nice, info.cpu_times!sys,
info.cpu_times!idle, info.cpu_times!irq)

show(io::IO, cpu::CPUinfo) = show(io, cpu, true, " ")
function show(io::IO, info::CPUinfo, header::Bool, prefix::String)
tck = SC_CLK_TCK
if header
println(io, info.model, ": ")
print(" "^length(prefix))
if tck > 0
@printf io " %5s %9s %9s %9s %9s %9s\n" "speed" "user" "nice" "sys" "idle" "irq"
else
@printf io " %5s %9s %9s %9s %9s %9s ticks\n" "speed" "user" "nice" "sys" "idle" "irq"
end
end
print(prefix)
if tck > 0
@printf io "%5d MHz %9d s %9d s %9d s %9d s %9d s" info.speed info.cpu_times!user/tck info.cpu_times!nice/tck info.cpu_times!sys/tck info.cpu_times!idle/tck info.cpu_times!irq/tck
else
@printf io "%5d MHz %9d %9d %9d %9d %9d ticks" info.speed info.cpu_times!user info.cpu_times!nice info.cpu_times!sys info.cpu_times!idle info.cpu_times!irq
end
end
function cpu_summary(io::IO, cpu::Array{CPUinfo}, i, j)
if j-i < 9
header = true
for x = i:j
if header == false println() end
show(io,cpu[x],header,"#$(x-i+1) ")
header = false
end
else
summary = CPUinfo(cpu[i].model,0,0,0,0,0,0)
count = j-i+1
for x = i:j
summary.speed += cpu[i].speed
summary.cpu_times!user += cpu[x].cpu_times!user
summary.cpu_times!nice += cpu[x].cpu_times!nice
summary.cpu_times!sys += cpu[x].cpu_times!sys
summary.cpu_times!idle += cpu[x].cpu_times!idle
summary.cpu_times!irq += cpu[x].cpu_times!irq
end
summary.speed = div(summary.speed,count)
show(io,summary,true,"#1-$(count) ")
end
end
function show(io::IO, cpu::Array{CPUinfo})
model = cpu[1].model
first = 1
for i = 2:length(cpu)
if model != cpu[i].model
cpu_summary(io,cpu,first,i-1)
first = i
end
end
cpu_summary(io,cpu,first,length(cpu))
end
repl_show(io::IO, cpu::Array{CPUinfo}) = show(io, cpu)
function cpu_info()
UVcpus = Array(Ptr{UV_cpu_info_t},1)
count = Array(Int32,1)
uv_error("uv_cpu_info",ccall(:uv_cpu_info, UV_error_t, (Ptr{Ptr{UV_cpu_info_t}}, Ptr{Int32}), UVcpus, count))
cpus = Array(CPUinfo,count[1])
for i = 1:length(cpus)
cpus[i] = CPUinfo(unsafe_load(UVcpus[1],i))
end
ccall(:uv_free_cpu_info, Void, (Ptr{UV_cpu_info_t}, Int32), UVcpus[1], count[1])
cpus
end

function uptime()
uptime_ = Array(Float64,1)
uv_error("uv_uptime",ccall(:uv_uptime, UV_error_t, (Ptr{Float64},), uptime_))
return uptime_[1]
end

function loadavg()
loadavg_ = Array(Float64,3)
ccall(:uv_loadavg, Void, (Ptr{Float64},), loadavg_)
return loadavg_
end

free_memory() = ccall(:uv_get_free_memory, Uint64, ())
total_memory() = ccall(:uv_get_total_memory, Uint64, ())



end
120 changes: 7 additions & 113 deletions base/util.jl
Original file line number Diff line number Diff line change
Expand Up @@ -225,20 +225,20 @@ function versioninfo(io::IO=OUTPUT_STREAM, verbose::Bool=false)
println(io, "Julia $version_string")
println(io, commit_string)
println(io, "Platform Info:")
println(io, " OS_NAME: ", OS_NAME)
println(io, " WORD_SIZE: ", WORD_SIZE)
println(io, " System: ", Sys.OS_NAME, " (", Sys.MACHINE, ")")
println(io, " WORD_SIZE: ", Sys.WORD_SIZE)
if verbose
lsb = readchomp(ignorestatus(`lsb_release -ds`) .> SpawnNullStream())
if lsb != ""
println(io, " ", lsb)
end
println(io, " uname: ",readchomp(`uname -mprsv`))
println(io, "Memory: $(total_memory()/2^30) GB ($(free_memory()/2^20) MB free)")
try println(io, "Uptime: $(uptime()) sec") catch end
println(io, "Memory: $(Sys.total_memory()/2^30) GB ($(Sys.free_memory()/2^20) MB free)")
try println(io, "Uptime: $(Sys.uptime()) sec") catch end
print(io, "Load Avg: ")
print_matrix(io, Base.loadavg()')
print_matrix(io, Sys.loadavg()')
println(io )
println(io, cpu_info())
println(io, Sys.cpu_info())
end
if Base.libblas_name == "libopenblas"
openblas_config = openblas_get_config()
Expand All @@ -256,118 +256,12 @@ function versioninfo(io::IO=OUTPUT_STREAM, verbose::Bool=false)
end
end
println(io )
println(io, "Package Directory: ", Pkg.dir())
println(io, "Packages Installed:")
Pkg.status(io )
end
end

type UV_cpu_info_t
model::Ptr{Uint8}
speed::Int32
cpu_times!user::Uint64
cpu_times!nice::Uint64
cpu_times!sys::Uint64
cpu_times!idle::Uint64
cpu_times!irq::Uint64
end
type CPUinfo
model::ASCIIString
speed::Int32
cpu_times!user::Uint64
cpu_times!nice::Uint64
cpu_times!sys::Uint64
cpu_times!idle::Uint64
cpu_times!irq::Uint64
SC_CLK_TCK::Int
CPUinfo(model,speed,u,n,s,id,ir,ticks)=new(model,speed,u,n,s,id,ir,ticks)
end
CPUinfo(info::UV_cpu_info_t, ticks) = CPUinfo(bytestring(info.model), info.speed,
info.cpu_times!user, info.cpu_times!nice, info.cpu_times!sys,
info.cpu_times!idle, info.cpu_times!irq, ticks)

show(io::IO, cpu::CPUinfo) = show(io, cpu, true, " ")
function show(io::IO, info::CPUinfo, header::Bool, prefix::String)
tck = info.SC_CLK_TCK
if header
println(io, info.model, ": ")
print(" "^length(prefix))
if tck > 0
@printf io " %5s %9s %9s %9s %9s %9s\n" "speed" "user" "nice" "sys" "idle" "irq"
else
@printf io " %5s %9s %9s %9s %9s %9s ticks\n" "speed" "user" "nice" "sys" "idle" "irq"
end
end
print(prefix)
if tck > 0
@printf io "%5d MHz %9d s %9d s %9d s %9d s %9d s" info.speed info.cpu_times!user/tck info.cpu_times!nice/tck info.cpu_times!sys/tck info.cpu_times!idle/tck info.cpu_times!irq/tck
else
@printf io "%5d MHz %9d %9d %9d %9d %9d ticks" info.speed info.cpu_times!user info.cpu_times!nice info.cpu_times!sys info.cpu_times!idle info.cpu_times!irq
end
end
function cpu_summary(io::IO, cpu::Array{CPUinfo}, i, j)
if j-i < 9
header = true
for x = i:j
if header == false println() end
show(io,cpu[x],header,"#$(x-i+1) ")
header = false
end
else
summary = CPUinfo(cpu[i].model,0,0,0,0,0,0,cpu[i].SC_CLK_TCK)
count = j-i+1
for x = i:j
summary.speed += cpu[i].speed
summary.cpu_times!user += cpu[x].cpu_times!user
summary.cpu_times!nice += cpu[x].cpu_times!nice
summary.cpu_times!sys += cpu[x].cpu_times!sys
summary.cpu_times!idle += cpu[x].cpu_times!idle
summary.cpu_times!irq += cpu[x].cpu_times!irq
end
summary.speed = div(summary.speed,count)
show(io,summary,true,"#1-$(count) ")
end
end
function show(io::IO, cpu::Array{CPUinfo})
model = cpu[1].model
first = 1
for i = 2:length(cpu)
if model != cpu[i].model
cpu_summary(io,cpu,first,i-1)
first = i
end
end
cpu_summary(io,cpu,first,length(cpu))
end
repl_show(io::IO, cpu::Array{CPUinfo}) = show(io, cpu)
function cpu_info()
SC_CLK_TCK = ccall(:jl_SC_CLK_TCK, Clong, ())
UVcpus = Array(Ptr{UV_cpu_info_t},1)
count = Array(Int32,1)
uv_error("uv_cpu_info",ccall(:uv_cpu_info, UV_error_t, (Ptr{Ptr{UV_cpu_info_t}}, Ptr{Int32}), UVcpus, count))
cpus = Array(CPUinfo,count[1])
for i = 1:length(cpus)
cpus[i] = CPUinfo(unsafe_load(UVcpus[1],i),SC_CLK_TCK)
end
ccall(:uv_free_cpu_info, Void, (Ptr{UV_cpu_info_t}, Int32), UVcpus[1], count[1])
cpus
end

function uptime()
uptime_ = Array(Float64,1)
uv_error("uv_uptime",ccall(:uv_uptime, UV_error_t, (Ptr{Float64},), uptime_))
return uptime_[1]
end

function loadavg()
loadavg_ = Array(Float64,3)
ccall(:uv_loadavg, Void, (Ptr{Float64},), loadavg_)
return loadavg_
end

free_memory() = ccall(:uv_get_free_memory, Uint64, ())
total_memory() = ccall(:uv_get_total_memory, Uint64, ())


# `methodswith` -- shows a list of methods using the type given

function methodswith(io::IO, t::Type, m::Module, showparents::Bool)
Expand Down
Loading

0 comments on commit dbac83f

Please sign in to comment.