Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
htop
Commits
0aa485cf
Commit
0aa485cf
authored
Nov 27, 2014
by
Hisham Muhammad
Browse files
Reading swap data!
parent
d8f2b5ab
Changes
3
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
0aa485cf
...
...
@@ -141,6 +141,10 @@ else
[AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
fi
if test "$my_htop_platform" = "freebsd"; then
AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
fi
AC_ARG_ENABLE(native_affinity, [AC_HELP_STRING([--enable-native-affinity], [enable native sched_setaffinity and sched_getaffinity for affinity support, disables hwloc])], ,enable_native_affinity="yes")
if test "x$enable_native_affinity" = xyes -a "x$cross_compiling" = xno; then
AC_MSG_CHECKING([for usable sched_setaffinity])
...
...
freebsd/FreeBSDProcessList.c
View file @
0aa485cf
...
...
@@ -26,12 +26,15 @@ typedef struct FreeBSDProcessList_ {
}*/
static
int
MIB_vm_stats_vm_v_wire_count
[
4
];
static
int
MIB_vm_stats_vm_v_cache_count
[
4
];
static
int
MIB_hw_physmem
[
2
];
static
int
pageSizeKb
;
ProcessList
*
ProcessList_new
(
UsersTable
*
usersTable
,
Hashtable
*
pidWhiteList
)
{
FreeBSDProcessList
*
this
=
calloc
(
1
,
sizeof
(
FreeBSDProcessList
));
ProcessList
*
pl
=
(
ProcessList
*
)
this
;
ProcessList_init
(
(
ProcessList
*
)
this
,
usersTable
,
pidWhiteList
);
FreeBSDProcessList
*
fpl
=
calloc
(
1
,
sizeof
(
FreeBSDProcessList
));
ProcessList
*
pl
=
(
ProcessList
*
)
fpl
;
ProcessList_init
(
pl
,
usersTable
,
pidWhiteList
);
int
cpus
=
1
;
size_t
sizeof_cpus
=
sizeof
(
cpus
);
...
...
@@ -45,31 +48,51 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) {
pl
->
cpus
[
i
].
totalPeriod
=
1
;
}
size_t
len
=
4
;
sysctlnametomib
(
"vm.stats.vm.v_wire_count"
,
MIB_vm_stats_vm_v_wire_count
,
&
len
);
len
=
2
;
sysctlnametomib
(
"hw.physmem"
,
MIB_hw_physmem
,
&
len
);
size_t
len
;
len
=
4
;
sysctlnametomib
(
"vm.stats.vm.v_wire_count"
,
MIB_vm_stats_vm_v_wire_count
,
&
len
);
len
=
4
;
sysctlnametomib
(
"vm.stats.vm.v_cache_count"
,
MIB_vm_stats_vm_v_cache_count
,
&
len
);
len
=
2
;
sysctlnametomib
(
"hw.physmem"
,
MIB_hw_physmem
,
&
len
);
pageSizeKb
=
PAGE_SIZE_KB
;
fpl
->
kd
=
kvm_open
(
NULL
,
"/dev/null"
,
NULL
,
0
,
NULL
);
assert
(
fpl
->
kd
);
return
pl
;
}
return
(
ProcessList
*
)
this
;
void
ProcessList_delete
(
ProcessList
*
this
)
{
const
FreeBSDProcessList
*
fpl
=
(
FreeBSDProcessList
*
)
this
;
if
(
fpl
->
kd
)
kvm_close
(
fpl
->
kd
);
ProcessList_done
(
this
);
free
(
this
);
}
static
inline
void
FreeBSDProcessList_scanMemoryInfo
(
ProcessList
*
pl
)
{
const
FreeBSDProcessList
*
fpl
=
(
FreeBSDProcessList
*
)
pl
;
unsigned
long
long
int
swapFree
=
0
;
size_t
len
=
sizeof
(
pl
->
totalMem
);
sysctl
(
MIB_hw_physmem
,
2
,
&
(
pl
->
totalMem
),
&
len
,
NULL
,
0
);
pl
->
totalMem
/=
1024
;
sysctl
(
MIB_vm_stats_vm_v_wire_count
,
4
,
&
(
pl
->
usedMem
),
&
len
,
NULL
,
0
);
pl
->
usedMem
*=
PAGE_SIZE
/
1024
;
pl
->
usedMem
*=
pageSizeKb
;
pl
->
freeMem
=
pl
->
totalMem
-
pl
->
usedMem
;
sysctl
(
MIB_vm_stats_vm_v_cache_count
,
4
,
&
(
pl
->
cachedMem
),
&
len
,
NULL
,
0
);
pl
->
cachedMem
*=
pageSizeKb
;
pl
->
sharedMem
=
0
;
pl
->
buffersMem
=
0
;
pl
->
cachedMem
=
0
;
struct
kvm_swap
swap
[
16
];
int
nswap
=
kvm_getswapinfo
(
fpl
->
kd
,
swap
,
sizeof
(
swap
)
/
sizeof
(
swap
[
0
]),
0
);
pl
->
totalSwap
=
0
;
swapFree
=
0
;
pl
->
usedSwap
=
pl
->
totalSwap
-
swapFree
;
pl
->
usedSwap
=
0
;
for
(
int
i
=
0
;
i
<
nswap
;
i
++
)
{
pl
->
totalSwap
+=
swap
[
i
].
ksw_total
;
pl
->
usedSwap
+=
swap
[
i
].
ksw_used
;
}
pl
->
totalSwap
*=
pageSizeKb
;
pl
->
usedSwap
*=
pageSizeKb
;
pl
->
sharedMem
=
0
;
// currently unused
pl
->
buffersMem
=
0
;
// not exposed to userspace
}
void
ProcessList_scan
(
ProcessList
*
this
)
{
...
...
freebsd/FreeBSDProcessList.h
View file @
0aa485cf
...
...
@@ -18,9 +18,10 @@ typedef struct FreeBSDProcessList_ {
}
FreeBSDProcessList
;
ProcessList
*
ProcessList_new
(
UsersTable
*
usersTable
,
Hashtable
*
pidWhiteList
);
void
ProcessList_delete
(
ProcessList
*
this
);
void
ProcessList_scan
(
ProcessList
*
this
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment