Merge "Set taskprofile to snapshot merge thread" into main
diff --git a/fs_mgr/libsnapshot/snapuserd/Android.bp b/fs_mgr/libsnapshot/snapuserd/Android.bp
index 6b8e084..bd296a3 100644
--- a/fs_mgr/libsnapshot/snapuserd/Android.bp
+++ b/fs_mgr/libsnapshot/snapuserd/Android.bp
@@ -86,10 +86,15 @@
"libext4_utils",
"libsnapshot_cow",
"liburing",
+ "libprocessgroup",
+ "libjsoncpp",
+ "libcgrouprc",
+ "libcgrouprc_format",
],
include_dirs: ["bionic/libc/kernel"],
export_include_dirs: ["include"],
header_libs: [
+ "libcutils_headers",
"libstorage_literals_headers",
],
ramdisk_available: true,
@@ -126,6 +131,10 @@
"liblog",
"libsnapshot_cow",
"libsnapuserd",
+ "libprocessgroup",
+ "libjsoncpp",
+ "libcgrouprc",
+ "libcgrouprc_format",
"libsnapuserd_client",
"libz",
"liblz4",
@@ -135,6 +144,7 @@
],
header_libs: [
+ "libcutils_headers",
"libstorage_literals_headers",
],
@@ -251,6 +261,10 @@
"libgtest",
"libsnapshot_cow",
"libsnapuserd",
+ "libprocessgroup",
+ "libjsoncpp",
+ "libcgrouprc",
+ "libcgrouprc_format",
"liburing",
"libz",
],
@@ -261,6 +275,7 @@
header_libs: [
"libstorage_literals_headers",
"libfiemap_headers",
+ "libcutils_headers",
],
test_options: {
min_shipping_api_level: 30,
@@ -320,6 +335,10 @@
"libgflags",
"libsnapshot_cow",
"libsnapuserd",
+ "libprocessgroup",
+ "libjsoncpp",
+ "libcgrouprc",
+ "libcgrouprc_format",
"liburing",
"libz",
],
@@ -330,5 +349,6 @@
header_libs: [
"libstorage_literals_headers",
"libfiemap_headers",
+ "libcutils_headers",
],
}
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
index bcf9aab..1e7d0c0 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/merge_worker.cpp
@@ -80,16 +80,16 @@
}
bool MergeWorker::MergeReplaceZeroOps() {
- // Flush after merging 2MB. Since all ops are independent and there is no
+ // Flush after merging 1MB. Since all ops are independent and there is no
// dependency between COW ops, we will flush the data and the number
// of ops merged in COW block device. If there is a crash, we will
// end up replaying some of the COW ops which were already merged. That is
// ok.
//
- // Although increasing this greater than 2MB may help in improving merge
+ // Although increasing this greater than 1MB may help in improving merge
// times; however, on devices with low memory, this can be problematic
// when there are multiple merge threads in parallel.
- int total_ops_merged_per_commit = (PAYLOAD_BUFFER_SZ / BLOCK_SZ) * 2;
+ int total_ops_merged_per_commit = (PAYLOAD_BUFFER_SZ / BLOCK_SZ);
int num_ops_merged = 0;
SNAP_LOG(INFO) << "MergeReplaceZeroOps started....";
@@ -561,6 +561,10 @@
SNAP_PLOG(ERROR) << "Failed to set thread priority";
}
+ if (!SetProfiles({"CPUSET_SP_BACKGROUND"})) {
+ SNAP_PLOG(ERROR) << "Failed to assign task profile to Mergeworker thread";
+ }
+
SNAP_LOG(INFO) << "Merge starting..";
bufsink_.Initialize(PAYLOAD_BUFFER_SZ);
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
index c08c1b1..2baf20d 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_readahead.cpp
@@ -782,6 +782,10 @@
SNAP_PLOG(ERROR) << "Failed to set thread priority";
}
+ if (!SetProfiles({"CPUSET_SP_BACKGROUND"})) {
+ SNAP_PLOG(ERROR) << "Failed to assign task profile to readahead thread";
+ }
+
SNAP_LOG(INFO) << "ReadAhead processing.";
while (!RAIterDone()) {
if (!ReadAheadIOStart()) {
diff --git a/fs_mgr/libsnapshot/snapuserd/utility.cpp b/fs_mgr/libsnapshot/snapuserd/utility.cpp
index fcdb69d..684ca3d 100644
--- a/fs_mgr/libsnapshot/snapuserd/utility.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/utility.cpp
@@ -19,6 +19,9 @@
#include <unistd.h>
#include <android-base/file.h>
+#include <processgroup/processgroup.h>
+
+#include <private/android_filesystem_config.h>
namespace android {
namespace snapshot {
@@ -33,6 +36,17 @@
#endif
}
+bool SetProfiles([[maybe_unused]] std::initializer_list<std::string_view> profiles) {
+#ifdef __ANDROID__
+ if (setgid(AID_SYSTEM)) {
+ return false;
+ }
+ return SetTaskProfiles(gettid(), profiles);
+#else
+ return true;
+#endif
+}
+
bool KernelSupportsIoUring() {
struct utsname uts {};
unsigned int major, minor;
diff --git a/fs_mgr/libsnapshot/snapuserd/utility.h b/fs_mgr/libsnapshot/snapuserd/utility.h
index 255aee1..c3c3cba 100644
--- a/fs_mgr/libsnapshot/snapuserd/utility.h
+++ b/fs_mgr/libsnapshot/snapuserd/utility.h
@@ -14,10 +14,14 @@
#pragma once
+#include <initializer_list>
+#include <string_view>
+
namespace android {
namespace snapshot {
bool SetThreadPriority(int priority);
+bool SetProfiles(std::initializer_list<std::string_view> profiles);
bool KernelSupportsIoUring();
} // namespace snapshot