You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cn...@apache.org on 2014/07/11 01:26:16 UTC
svn commit: r1609588 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: ./
src/main/java/org/apache/hadoop/io/nativeio/
src/main/native/src/org/apache/hadoop/io/nativeio/
src/test/java/org/apache/hadoop/io/nativeio/
Author: cnauroth
Date: Thu Jul 10 23:26:16 2014
New Revision: 1609588
URL: http://svn.apache.org/r1609588
Log:
HADOOP-10815. Implement Windows equivalent of mlock. Contributed by Chris Nauroth.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1609588&r1=1609587&r2=1609588&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Thu Jul 10 23:26:16 2014
@@ -393,6 +393,8 @@ Release 2.6.0 - UNRELEASED
HADOOP-10808. Remove unused native code for munlock. (cnauroth)
+ HADOOP-10815. Implement Windows equivalent of mlock. (cnauroth)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java?rev=1609588&r1=1609587&r2=1609588&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java Thu Jul 10 23:26:16 2014
@@ -551,6 +551,19 @@ public class NativeIO {
return access0(path, desiredAccess.accessRight());
}
+ /**
+ * Extends both the minimum and maximum working set size of the current
+ * process. This method gets the current minimum and maximum working set
+ * size, adds the requested amount to each and then sets the minimum and
+ * maximum working set size to the new values. Controlling the working set
+ * size of the process also controls the amount of memory it can lock.
+ *
+ * @param delta amount to increment minimum and maximum working set size
+ * @throws IOException for any error
+ * @see POSIX#mlock(ByteBuffer, long)
+ */
+ public static native void extendWorkingSetSize(long delta) throws IOException;
+
static {
if (NativeCodeLoader.isNativeCodeLoaded()) {
try {
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c?rev=1609588&r1=1609587&r2=1609588&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c Thu Jul 10 23:26:16 2014
@@ -388,10 +388,10 @@ Java_org_apache_hadoop_io_nativeio_Nativ
JNIEnv *env, jclass clazz,
jobject buffer, jlong len)
{
-#ifdef UNIX
void* buf = (void*)(*env)->GetDirectBufferAddress(env, buffer);
PASS_EXCEPTIONS(env);
+#ifdef UNIX
if (mlock(buf, len)) {
CHECK_DIRECT_BUFFER_ADDRESS(buf);
throw_ioe(env, errno);
@@ -399,8 +399,10 @@ Java_org_apache_hadoop_io_nativeio_Nativ
#endif
#ifdef WINDOWS
- THROW(env, "java/io/IOException",
- "The function POSIX.mlock_native() is not supported on Windows");
+ if (!VirtualLock(buf, len)) {
+ CHECK_DIRECT_BUFFER_ADDRESS(buf);
+ throw_ioe(env, GetLastError());
+ }
#endif
}
@@ -980,6 +982,40 @@ cleanup:
#endif
}
+/*
+ * Class: org_apache_hadoop_io_nativeio_NativeIO_Windows
+ * Method: extendWorkingSetSize
+ * Signature: (J)V
+ *
+ * The "00024" in the function name is an artifact of how JNI encodes
+ * special characters. U+0024 is '$'.
+ */
+JNIEXPORT void JNICALL
+Java_org_apache_hadoop_io_nativeio_NativeIO_00024Windows_extendWorkingSetSize(
+ JNIEnv *env, jclass clazz, jlong delta)
+{
+#ifdef UNIX
+ THROW(env, "java/io/IOException",
+ "The function extendWorkingSetSize(delta) is not supported on Unix");
+#endif
+
+#ifdef WINDOWS
+ SIZE_T min, max;
+ HANDLE hProcess = GetCurrentProcess();
+ if (!GetProcessWorkingSetSize(hProcess, &min, &max)) {
+ throw_ioe(env, GetLastError());
+ return;
+ }
+ if (!SetProcessWorkingSetSizeEx(hProcess, min + delta, max + delta,
+ QUOTA_LIMITS_HARDWS_MIN_DISABLE | QUOTA_LIMITS_HARDWS_MAX_DISABLE)) {
+ throw_ioe(env, GetLastError());
+ return;
+ }
+ // There is no need to call CloseHandle on the pseudo-handle returned from
+ // GetCurrentProcess.
+#endif
+}
+
JNIEXPORT void JNICALL
Java_org_apache_hadoop_io_nativeio_NativeIO_renameTo0(JNIEnv *env,
jclass clazz, jstring jsrc, jstring jdst)
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java?rev=1609588&r1=1609587&r2=1609588&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java Thu Jul 10 23:26:16 2014
@@ -49,7 +49,6 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.NativeCodeLoader;
-import org.apache.hadoop.util.Shell;
import org.apache.hadoop.util.Time;
public class TestNativeIO {
@@ -572,7 +571,6 @@ public class TestNativeIO {
@Test(timeout=10000)
public void testMlock() throws Exception {
assumeTrue(NativeIO.isAvailable());
- assumeTrue(Shell.LINUX);
final File TEST_FILE = new File(new File(
System.getProperty("test.build.data","build/test/data")),
"testMlockFile");