summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/nativec
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/nativec')
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java5
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java28
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java25
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/NativeHeap.java24
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java5
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);