Merge changes I115b6b98,Iff84c0df,Ice13f58e,I5302a9a2 into main
* changes: libsnapshot: set num merge threads snapshot_proto add build configuration variables update supported compression methods libsnapshot: get read_ahead_size from build
This commit is contained in:
commit
0381ebefc4
5 changed files with 40 additions and 25 deletions
|
|
@ -103,7 +103,7 @@ message SnapshotStatus {
|
|||
// The old partition size (if none existed, this will be zero).
|
||||
uint64 old_partition_size = 10;
|
||||
|
||||
// Compression algorithm (none, gz, lz4, zstd, or brotli).
|
||||
// Compression algorithm (none, lz4, zstd).
|
||||
string compression_algorithm = 11;
|
||||
|
||||
// Estimated COW size from OTA manifest.
|
||||
|
|
@ -120,6 +120,18 @@ message SnapshotStatus {
|
|||
|
||||
// Max bytes to be compressed at once (4k, 8k, 16k, 32k, 64k, 128k)
|
||||
uint64 compression_factor = 16;
|
||||
|
||||
// Default value is 32, can be set lower for low mem devices
|
||||
uint32 read_ahead_size = 17;
|
||||
|
||||
// Enable direct reads on source device
|
||||
bool o_direct = 18;
|
||||
|
||||
// Blocks size to be verified at once
|
||||
uint64 verify_block_size = 19;
|
||||
|
||||
// Default value is 2, configures threads to do verification phase
|
||||
uint32 num_verify_threads = 20;
|
||||
}
|
||||
|
||||
// Next: 8
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ struct PartitionCowCreator {
|
|||
bool using_snapuserd = false;
|
||||
std::string compression_algorithm;
|
||||
uint64_t compression_factor;
|
||||
uint32_t read_ahead_size;
|
||||
|
||||
// True if multi-threaded compression should be enabled
|
||||
bool enable_threading;
|
||||
|
|
|
|||
|
|
@ -101,8 +101,7 @@ static constexpr auto kUpdateStateCheckInterval = 2s;
|
|||
* time, they could use O_DIRECT functionality wherein the I/O to the source
|
||||
* block device will be O_DIRECT.
|
||||
*/
|
||||
static constexpr auto kCowReadAheadSizeKb = 32;
|
||||
static constexpr auto kSourceReadAheadSizeKb = 32;
|
||||
static constexpr auto kReadAheadSizeKb = 32;
|
||||
|
||||
// Note: IImageManager is an incomplete type in the header, so the default
|
||||
// destructor doesn't work.
|
||||
|
|
@ -418,6 +417,7 @@ bool SnapshotManager::CreateSnapshot(LockedFile* lock, PartitionCowCreator* cow_
|
|||
status->set_using_snapuserd(cow_creator->using_snapuserd);
|
||||
status->set_compression_algorithm(cow_creator->compression_algorithm);
|
||||
status->set_compression_factor(cow_creator->compression_factor);
|
||||
status->set_read_ahead_size(cow_creator->read_ahead_size);
|
||||
if (cow_creator->enable_threading) {
|
||||
status->set_enable_threading(cow_creator->enable_threading);
|
||||
}
|
||||
|
|
@ -1142,8 +1142,8 @@ auto SnapshotManager::CheckMergeState(const std::function<bool()>& before_cancel
|
|||
return result;
|
||||
}
|
||||
|
||||
auto SnapshotManager::CheckMergeState(LockedFile* lock, const std::function<bool()>& before_cancel)
|
||||
-> MergeResult {
|
||||
auto SnapshotManager::CheckMergeState(LockedFile* lock,
|
||||
const std::function<bool()>& before_cancel) -> MergeResult {
|
||||
SnapshotUpdateStatus update_status = ReadSnapshotUpdateStatus(lock);
|
||||
switch (update_status.state()) {
|
||||
case UpdateState::None:
|
||||
|
|
@ -1765,9 +1765,8 @@ bool SnapshotManager::PerformInitTransition(InitTransition transition,
|
|||
base_path_merge;
|
||||
snapuserd_argv->emplace_back(std::move(message));
|
||||
}
|
||||
|
||||
SetReadAheadSize(cow_image_device, kCowReadAheadSizeKb);
|
||||
SetReadAheadSize(source_device, kSourceReadAheadSizeKb);
|
||||
SetReadAheadSize(cow_image_device, snapshot_status.read_ahead_size());
|
||||
SetReadAheadSize(source_device, snapshot_status.read_ahead_size());
|
||||
|
||||
// Do not attempt to connect to the new snapuserd yet, it hasn't
|
||||
// been started. We do however want to wait for the misc device
|
||||
|
|
@ -2852,8 +2851,8 @@ bool SnapshotManager::UnmapAllSnapshots(LockedFile* lock) {
|
|||
return true;
|
||||
}
|
||||
|
||||
auto SnapshotManager::OpenFile(const std::string& file, int lock_flags)
|
||||
-> std::unique_ptr<LockedFile> {
|
||||
auto SnapshotManager::OpenFile(const std::string& file,
|
||||
int lock_flags) -> std::unique_ptr<LockedFile> {
|
||||
unique_fd fd(open(file.c_str(), O_RDONLY | O_CLOEXEC | O_NOFOLLOW));
|
||||
if (fd < 0) {
|
||||
PLOG(ERROR) << "Open failed: " << file;
|
||||
|
|
@ -3309,19 +3308,19 @@ Return SnapshotManager::CreateUpdateSnapshots(const DeltaArchiveManifest& manife
|
|||
LOG(INFO) << "using compression algorithm: " << compression_algorithm
|
||||
<< ", max compressible block size: " << compression_factor;
|
||||
}
|
||||
|
||||
PartitionCowCreator cow_creator{
|
||||
.target_metadata = target_metadata.get(),
|
||||
.target_suffix = target_suffix,
|
||||
.target_partition = nullptr,
|
||||
.current_metadata = current_metadata.get(),
|
||||
.current_suffix = current_suffix,
|
||||
.update = nullptr,
|
||||
.extra_extents = {},
|
||||
.using_snapuserd = using_snapuserd,
|
||||
.compression_algorithm = compression_algorithm,
|
||||
.compression_factor = compression_factor,
|
||||
};
|
||||
auto read_ahead_size =
|
||||
android::base::GetUintProperty<uint>("ro.virtual_ab.read_ahead_size", kReadAheadSizeKb);
|
||||
PartitionCowCreator cow_creator{.target_metadata = target_metadata.get(),
|
||||
.target_suffix = target_suffix,
|
||||
.target_partition = nullptr,
|
||||
.current_metadata = current_metadata.get(),
|
||||
.current_suffix = current_suffix,
|
||||
.update = nullptr,
|
||||
.extra_extents = {},
|
||||
.using_snapuserd = using_snapuserd,
|
||||
.compression_algorithm = compression_algorithm,
|
||||
.compression_factor = compression_factor,
|
||||
.read_ahead_size = read_ahead_size};
|
||||
|
||||
if (dap_metadata.vabc_feature_set().has_threaded()) {
|
||||
cow_creator.enable_threading = dap_metadata.vabc_feature_set().threaded();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include <android-base/logging.h>
|
||||
|
||||
#include "android-base/properties.h"
|
||||
#include "merge_worker.h"
|
||||
#include "read_worker.h"
|
||||
#include "snapuserd_core.h"
|
||||
|
|
@ -235,8 +236,10 @@ void SnapshotHandlerManager::MonitorMerge() {
|
|||
|
||||
LOG(INFO) << "MonitorMerge: active-merge-threads: " << active_merge_threads_;
|
||||
{
|
||||
auto num_merge_threads = android::base::GetUintProperty<uint>(
|
||||
"ro.virtual_ab.num_merge_threads", kMaxMergeThreads);
|
||||
std::lock_guard<std::mutex> lock(lock_);
|
||||
while (active_merge_threads_ < kMaxMergeThreads && merge_handlers_.size() > 0) {
|
||||
while (active_merge_threads_ < num_merge_threads && merge_handlers_.size() > 0) {
|
||||
auto handler = merge_handlers_.front();
|
||||
merge_handlers_.pop();
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ namespace android {
|
|||
namespace snapshot {
|
||||
|
||||
static constexpr uint32_t kMaxPacketSize = 512;
|
||||
static constexpr uint8_t kMaxMergeThreads = 2;
|
||||
|
||||
static constexpr char kBootSnapshotsWithoutSlotSwitch[] =
|
||||
"/metadata/ota/snapshot-boot-without-slot-switch";
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue