diff options
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo')
5 files changed, 83 insertions, 4 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java index 67ae30c84f5..2dfa4f6d11b 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java @@ -1,5 +1,10 @@ package com.yahoo.nativec; +/** + * Gives access to the C library version. + * + * @author baldersheim + */ public class GLibcVersion { private final static Throwable initException = NativeC.loadLibrary(GLibcVersion.class); public static Throwable init() { diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java index a4f5486ccf1..eda6c7d1af7 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java @@ -2,7 +2,12 @@ package com.yahoo.nativec; import com.sun.jna.Structure; -public class MallInfo { +/** + * Gives access to the information provided by the C library mallinfo() function. + * + * @author baldersheim + */ +public class MallInfo extends NativeHeap { private final static Throwable initException = NativeC.loadLibrary(MallInfo.class); public static Throwable init() { return initException; @@ -23,8 +28,27 @@ public class MallInfo { public int keepcost; /* Top-most, releasable space (bytes) */ } private static native MallInfoStruct.ByValue mallinfo(); + + private final MallInfoStruct mallinfo; public MallInfo() { mallinfo = mallinfo(); } - private final MallInfoStruct mallinfo; + + @Override + public long usedSize() { + long v = mallinfo.uordblks; + return v << 20; // Due to too few bits in ancient mallinfo vespamalloc reports in 1M units + } + + @Override + public long totalSize() { + long v = mallinfo.arena; + return v << 20; // Due to too few bits in ancient mallinfo vespamalloc reports in 1M units + } + + @Override + public long availableSize() { + long v = mallinfo.fordblks; + return v << 20; // Due to too few bits in ancient mallinfo vespamalloc reports in 1M units + } } diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java index 1ae3bc590e2..ea735046843 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java @@ -2,7 +2,12 @@ package com.yahoo.nativec; import com.sun.jna.Structure; -public class MallInfo2 { +/** + * Gives access to the information provided by the C library mallinfo2() function. + * + * @author baldersheim + */ +public class MallInfo2 extends NativeHeap { private final static Throwable initException = NativeC.loadLibrary(MallInfo2.class); public static Throwable init() { return initException; @@ -23,8 +28,24 @@ public class MallInfo2 { public long keepcost; /* Top-most, releasable space (bytes) */ } private static native MallInfo2Struct.ByValue mallinfo2(); + private final MallInfo2Struct mallinfo; + public MallInfo2() { mallinfo = mallinfo2(); } - private final MallInfo2Struct mallinfo; + + @Override + public long usedSize() { + return mallinfo.uordblks; + } + + @Override + public long totalSize() { + return mallinfo.arena; + } + + @Override + public long availableSize() { + return mallinfo.fordblks; + } } diff --git a/vespajlib/src/main/java/com/yahoo/nativec/NativeHeap.java b/vespajlib/src/main/java/com/yahoo/nativec/NativeHeap.java new file mode 100644 index 00000000000..ddff2e33230 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/nativec/NativeHeap.java @@ -0,0 +1,24 @@ +package com.yahoo.nativec; + +import com.sun.jna.Platform; + +/** + * Represents the native C heap if accessible + * + * @author baldersheim + */ +public class NativeHeap { + public long usedSize() { return 0; } + public long totalSize() { return 0; } + public long availableSize() { return 0; } + public static NativeHeap sample() { + if (Platform.isLinux()) { + GLibcVersion version = new GLibcVersion(); + if ((version.major() >= 3) || ((version.major() == 2) && (version.minor() >= 33))) { + return new MallInfo2(); + } + return new MallInfo(); + } + return new NativeHeap(); + } +} diff --git a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java index 3e2c26d2ef2..0fdcbca5f14 100644 --- a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java +++ b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java @@ -2,6 +2,11 @@ package com.yahoo.nativec; import com.sun.jna.LastErrorException; +/** + * Gives access to the C library posix_fadvise() function. + * + * @author baldersheim + */ public class PosixFAdvise { public static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h private final static Throwable initException = NativeC.loadLibrary(PosixFAdvise.class); |