@@ -313,17 +313,21 @@ static void FreeBSDMachine_scanMemoryInfo(Machine* super) {
313
313
// @etosan:
314
314
// memory counter relationships seem to be these:
315
315
// total = active + wired + inactive + cache + free
316
- // htop_used (unavail to anybody) = active + wired
317
- // htop_cache (for cache meter) = buffers + cache
318
- // user_free (avail to procs) = buffers + inactive + cache + free
316
+ // htop_used (unavail to anybody) = active + wired + inactive - buffer
317
+ // htop_cache (for cache meter) = buffer + cache
318
+ // htop_user_free (avail to procs) = buffer + cache + free
319
+ // htop_buffers (disk write buffer) = 0 (not applicable to FreeBSD)
320
+ //
321
+ // 'buffer' contain cache used by most file systems other than ZFS, and is
322
+ // included in 'wired'
319
323
//
320
324
// with ZFS ARC situation becomes bit muddled, as ARC behaves like "user_free"
321
325
// and belongs into cache, but is reported as wired by kernel
322
326
//
323
327
// htop_used = active + (wired - arc)
324
328
// htop_cache = buffers + cache + arc
325
329
u_long totalMem ;
326
- u_int memActive , memWire , cachedMem ;
330
+ u_int memActive , memWire , memInactive , cachedMem ;
327
331
long buffersMem ;
328
332
size_t len ;
329
333
struct vmtotal vmtotal ;
@@ -340,28 +344,30 @@ static void FreeBSDMachine_scanMemoryInfo(Machine* super) {
340
344
len = sizeof (memActive );
341
345
sysctl (MIB_vm_stats_vm_v_active_count , 4 , & (memActive ), & len , NULL , 0 );
342
346
memActive *= this -> pageSizeKb ;
343
- this -> memActive = memActive ;
344
347
345
348
len = sizeof (memWire );
346
349
sysctl (MIB_vm_stats_vm_v_wire_count , 4 , & (memWire ), & len , NULL , 0 );
347
350
memWire *= this -> pageSizeKb ;
348
- this -> memWire = memWire ;
351
+
352
+ len = sizeof (memInactive );
353
+ sysctl (MIB_vm_stats_vm_v_inactive_count , 4 , & (memInactive ), & len , NULL , 0 );
354
+ memInactive *= this -> pageSizeKb ;
349
355
350
356
len = sizeof (buffersMem );
351
357
sysctl (MIB_vfs_bufspace , 2 , & (buffersMem ), & len , NULL , 0 );
352
358
buffersMem /= 1024 ;
353
- super -> buffersMem = buffersMem ;
359
+ super -> cachedMem = buffersMem ;
354
360
355
361
len = sizeof (cachedMem );
356
362
sysctl (MIB_vm_stats_vm_v_cache_count , 4 , & (cachedMem ), & len , NULL , 0 );
357
363
cachedMem *= this -> pageSizeKb ;
358
- super -> cachedMem = cachedMem ;
364
+ super -> cachedMem + = cachedMem ;
359
365
360
366
len = sizeof (vmtotal );
361
367
sysctl (MIB_vm_vmtotal , 2 , & (vmtotal ), & len , NULL , 0 );
362
368
super -> sharedMem = vmtotal .t_rmshr * this -> pageSizeKb ;
363
369
364
- super -> usedMem = this -> memActive + this -> memWire ;
370
+ super -> usedMem = memActive + memWire + memInactive - buffersMem ;
365
371
366
372
struct kvm_swap swap [16 ];
367
373
int nswap = kvm_getswapinfo (this -> kd , swap , ARRAYSIZE (swap ), 0 );
0 commit comments