Make minimum gc sleep time tunnable

Test: check smart idle maint log of StorageManagerService
Signed-off-by: Daeho Jeong <daehojeong@google.com>
Change-Id: I5a70e4ec2ca895551b6446a9dfd4bb5003a3fbd0
This commit is contained in:
Daeho Jeong 2022-06-23 16:19:58 -07:00
parent d99898496f
commit 3fd33ece35
5 changed files with 10 additions and 9 deletions

View file

@ -86,7 +86,6 @@ static const int DIRTY_SEGMENTS_THRESHOLD = 100;
static const int GC_TIMEOUT_SEC = 420; static const int GC_TIMEOUT_SEC = 420;
static const int DEVGC_TIMEOUT_SEC = 120; static const int DEVGC_TIMEOUT_SEC = 120;
static const int KBYTES_IN_SEGMENT = 2048; static const int KBYTES_IN_SEGMENT = 2048;
static const int MIN_GC_URGENT_SLEEP_TIME = 500;
static const int ONE_MINUTE_IN_MS = 60000; static const int ONE_MINUTE_IN_MS = 60000;
static const int GC_NORMAL_MODE = 0; static const int GC_NORMAL_MODE = 0;
static const int GC_URGENT_MID_MODE = 3; static const int GC_URGENT_MID_MODE = 3;
@ -531,7 +530,7 @@ int32_t GetStorageLifeTime() {
} }
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate, void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
float reclaimWeight, int32_t gcPeriod) { float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime) {
std::list<std::string> paths; std::list<std::string> paths;
bool needGC = true; bool needGC = true;
int32_t sleepTime; int32_t sleepTime;
@ -593,8 +592,8 @@ void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float
needGC = false; needGC = false;
} else { } else {
sleepTime = gcPeriod * ONE_MINUTE_IN_MS / neededSegments; sleepTime = gcPeriod * ONE_MINUTE_IN_MS / neededSegments;
if (sleepTime < MIN_GC_URGENT_SLEEP_TIME) { if (sleepTime < minGCSleepTime) {
sleepTime = MIN_GC_URGENT_SLEEP_TIME; sleepTime = minGCSleepTime;
} }
} }
} }

View file

@ -27,7 +27,7 @@ int RunIdleMaint(bool needGC, const android::sp<android::os::IVoldTaskListener>&
int AbortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener); int AbortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
int32_t GetStorageLifeTime(); int32_t GetStorageLifeTime();
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate, void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
float reclaimWeight, int32_t gcPeriod); float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime);
void RefreshLatestWrite(); void RefreshLatestWrite();
int32_t GetWriteAmount(); int32_t GetWriteAmount();

View file

@ -495,11 +495,12 @@ binder::Status VoldNativeService::getStorageLifeTime(int32_t* _aidl_return) {
binder::Status VoldNativeService::setGCUrgentPace(int32_t neededSegments, binder::Status VoldNativeService::setGCUrgentPace(int32_t neededSegments,
int32_t minSegmentThreshold, int32_t minSegmentThreshold,
float dirtyReclaimRate, float reclaimWeight, float dirtyReclaimRate, float reclaimWeight,
int32_t gcPeriod) { int32_t gcPeriod, int32_t minGCSleepTime) {
ENFORCE_SYSTEM_OR_ROOT; ENFORCE_SYSTEM_OR_ROOT;
ACQUIRE_LOCK; ACQUIRE_LOCK;
SetGCUrgentPace(neededSegments, minSegmentThreshold, dirtyReclaimRate, reclaimWeight, gcPeriod); SetGCUrgentPace(neededSegments, minSegmentThreshold, dirtyReclaimRate, reclaimWeight, gcPeriod,
minGCSleepTime);
return Ok(); return Ok();
} }

View file

@ -90,7 +90,8 @@ class VoldNativeService : public BinderService<VoldNativeService>, public os::Bn
binder::Status abortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener); binder::Status abortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
binder::Status getStorageLifeTime(int32_t* _aidl_return); binder::Status getStorageLifeTime(int32_t* _aidl_return);
binder::Status setGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, binder::Status setGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold,
float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod); float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod,
int32_t minGCSleepTime);
binder::Status refreshLatestWrite(); binder::Status refreshLatestWrite();
binder::Status getWriteAmount(int32_t* _aidl_return); binder::Status getWriteAmount(int32_t* _aidl_return);

View file

@ -69,7 +69,7 @@ interface IVold {
int getStorageLifeTime(); int getStorageLifeTime();
void setGCUrgentPace(int neededSegments, int minSegmentThreshold, void setGCUrgentPace(int neededSegments, int minSegmentThreshold,
float dirtyReclaimRate, float reclaimWeight, float dirtyReclaimRate, float reclaimWeight,
int gcPeriod); int gcPeriod, int minGCSleepTime);
void refreshLatestWrite(); void refreshLatestWrite();
int getWriteAmount(); int getWriteAmount();