当前位置: 首页 > news >正文

wordpress行业模板网站路径优化怎么做

wordpress行业模板,网站路径优化怎么做,网站标题修改,中文网站建设公司排名1 原理说明 这个方案有如下基本需求#xff1a; 构建自定义CPUSET#xff0c;/dev/cpuset中包含一个全新的cpuset分组。且可以通过set_cpuset_policy和set_sched_policy接口可以设置自定义CPUSET。开机启动后可以通过zygote判定来对特定的应用进程设置CPUSET#xff0c;并…1 原理说明 这个方案有如下基本需求 构建自定义CPUSET/dev/cpuset中包含一个全新的cpuset分组。且可以通过set_cpuset_policy和set_sched_policy接口可以设置自定义CPUSET。开机启动后可以通过zygote判定来对特定的应用进程设置CPUSET并一直保持且保证自定义CPUSET不受其他CPUSET影响持续独立。 原理上因为修改代码涉及部分较多因此共分3个部分 framework修改添加SCHED GROUP和THREAD GROUPTHREAD_GROUP_对应SP_的支持且支持开机启动后直接设置。applyOomAdjLSP的判定保持不变。system修改添加SP_CUSTOM的支持及set_cpuset_policy和set_sched_policy接口等支持同时修改task_profiles.json添加SP_CUSTOM CPUSET的支持。init.rc修改及编译部分调整对自定义cpuset节点进行操作vndk部分编译需要重新调整方案以及不修改VNDK如何保证编译通过。 由于修改中涉及代码量过大这里拆分成两节进行展示。本章节主要针对第1部分修改进行说明。下一篇文章 Android Framework 常见解决方案25-2定制CPUSET解决方案-system修改及编译部分调整 主要对第2和第3部分修改进行说明。 2 修改方案-framework部分Android S 这里需要添加THREAD_GROUP_CUSTOM与system中修改的SP_CUSTOM同步数值需一致需要在$AOSP/frameworks/base/core/java/android/os/Process.java文件中修改 public class Process {private static final String LOG_TAG Process;/*** An invalid UID value.*/public static final int INVALID_UID -1;//.../*** Thread group for RT app.* hide**/public static final int THREAD_GROUP_RT_APP 6;/*** Thread group for bound foreground services that should* have additional CPU restrictions during screen off* hide**/public static final int THREAD_GROUP_RESTRICTED 7;/*** Thread Group for CUSTOM* hide**/public static final int THREAD_GROUP_CUSTOM 8;//... } 接下来需要添加SCHED_GROUP_CUSTOM相关配置。在$AOSP/frameworks/base/services/core/java/com/android/server/am/ProcessList.java文件中修改 public final class ProcessList {//...// Activity managers version of Process.THREAD_GROUP_BACKGROUNDstatic final int SCHED_GROUP_BACKGROUND 0;// Activity managers version of Process.THREAD_GROUP_RESTRICTEDstatic final int SCHED_GROUP_RESTRICTED 1;// Activity managers version of Process.THREAD_GROUP_DEFAULTstatic final int SCHED_GROUP_DEFAULT 2;// Activity managers version of Process.THREAD_GROUP_TOP_APPpublic static final int SCHED_GROUP_TOP_APP 3;// Activity managers version of Process.THREAD_GROUP_TOP_APP// Disambiguate between actual top app and processes bound to the top appstatic final int SCHED_GROUP_TOP_APP_BOUND 4;//add custom schedule groupstatic final int SCHED_GROUP_CUSTOM 10;//...private static boolean writeProcessOomListToProto(ProtoOutputStream proto, long fieldId,ActivityManagerService service, ListProcessRecord origList,boolean inclDetails, String dumpPackage) {//...switch (state.getSetSchedGroup()) {case SCHED_GROUP_BACKGROUND:schedGroup ProcessOomProto.SCHED_GROUP_BACKGROUND;break;case SCHED_GROUP_DEFAULT:schedGroup ProcessOomProto.SCHED_GROUP_DEFAULT;break;case SCHED_GROUP_TOP_APP:schedGroup ProcessOomProto.SCHED_GROUP_TOP_APP;break;case SCHED_GROUP_TOP_APP_BOUND:schedGroup ProcessOomProto.SCHED_GROUP_TOP_APP_BOUND;case SCHED_GROUP_CUSTOM:schedGroup ProcessOomProto.SCHED_GROUP_CUSTOM;break;}//...}//...private static boolean dumpProcessOomList(PrintWriter pw,ActivityManagerService service, ListProcessRecord origList,String prefix, String normalLabel, String persistentLabel,boolean inclDetails, String dumpPackage) {//... for (int i list.size() - 1; i 0; i--) {//...switch (state.getSetSchedGroup()) {case SCHED_GROUP_BACKGROUND:schedGroup b;break;case SCHED_GROUP_DEFAULT:schedGroup F;break;case SCHED_GROUP_TOP_APP:schedGroup T;break;case SCHED_GROUP_RESTRICTED:schedGroup R;break;case SCHED_GROUP_TOP_APP_BOUND:schedGroup B;break;case SCHED_GROUP_CUSTOM:schedGroup C;break;default:schedGroup ?;break;}} 添加SCHED_GROUP_CUSTOM与ProcessList.java中同步。在$AOSP/frameworks/base/core/proto/android/server/activitymanagerservice.proto文件中修改 //... message ProcessOomProto {//...enum SchedGroup {SCHED_GROUP_UNKNOWN -1;SCHED_GROUP_BACKGROUND 0;SCHED_GROUP_DEFAULT 1;SCHED_GROUP_TOP_APP 2;SCHED_GROUP_TOP_APP_BOUND 3;SCHED_GROUP_CUSTOM 10;}为适配之前的适配SP_CUSTOM同时契合之前1中修改的task_profile.json文件中的配置在AOSP/frameworks/base/core/jni/android_util_Process.cpp文件中修改 //修改android_os_Process_setProcessGroup适配SP_CUSTOM void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp) {ALOGV(%s pid%d grp% PRId32, __func__, pid, grp);//...while ((de readdir(d))) {//...// grp ! SP_BACKGROUND. Only change the cpuset cgroup for low priority thread, so it could// preserve it sched policy profile setting.if (t_pri ANDROID_PRIORITY_BACKGROUND) {switch (grp) {case SP_SYSTEM:taskprofile ServiceCapacityLow;break;case SP_RESTRICTED:taskprofile ServiceCapacityRestricted;break;case SP_FOREGROUND:case SP_AUDIO_APP:case SP_AUDIO_SYS:taskprofile ProcessCapacityHigh;break;case SP_TOP_APP:taskprofile ProcessCapacityMax;break;case SP_CUSTOM:taskprofile CustomPerformance;break;default:taskprofile ProcessCapacityNormal;break;}if (!SetTaskProfiles(t_pid, {taskprofile}, true)) {signalExceptionForGroupError(env, errno ? errno : EPERM, t_pid);break;}// Change the cpuset policy profile for non-low priority thread according to the grp} else {if (!SetTaskProfiles(t_pid, {get_cpuset_policy_profile_name((SchedPolicy)grp)}, true)) {signalExceptionForGroupError(env, errno ? errno : EPERM, t_pid);break;}}}closedir(d); }//修改get_cpuset_cores_for_policy适配SP_CUSTOM static void get_cpuset_cores_for_policy(SchedPolicy policy, cpu_set_t *cpu_set) {FILE *file;std::string filename;CPU_ZERO(cpu_set);switch (policy) {case SP_BACKGROUND:if (!CgroupGetAttributePath(LowCapacityCPUs, filename)) {return;}break;case SP_FOREGROUND:if (!CgroupGetAttributePath(HighCapacityCPUs, filename)) {return;}break;case SP_AUDIO_APP:case SP_AUDIO_SYS:if (!CgroupGetAttributePath(AudioAppCapacityCPUs, filename)) {return;}if (access(filename.c_str(), F_OK) ! 0) {if (!CgroupGetAttributePath(HighCapacityCPUs, filename)) {return;}}break;case SP_RT_APP:if (!CgroupGetAttributePath(HighCapacityCPUs, filename)) {return;}break;case SP_TOP_APP:if (!CgroupGetAttributePath(MaxCapacityCPUs, filename)) {return;}break;case SP_CUSTOM:if (!CgroupGetAttributePath(CustomCPUs, filename)) {return;}break;default:return;}file fopen(filename.c_str(), re);if (file ! NULL) {// Parse cpus stringchar *line NULL;size_t len 0;ssize_t num_read getline(line, len, file);fclose (file);if (num_read 0) {parse_cpuset_cpus(line, cpu_set);} else {ALOGE(Failed to read %s, filename.c_str());}free(line);}return; } 在这里使用com.ags.test应用demo进行测试后验证。根据自己需要调整即可。主要保证该应用始终在SCHED_GROUP_CUSTOM中不切换到其它schedule group中同时建立SCHED_GROUP_CUSTOM和THREAD_GROUP_CUSTOM之间的联系。在$AOSP/frameworks/base/services/core/java/com/android/server/am/OomAdjuster.java文件中修改 //... import static android.os.Process.THREAD_GROUP_CUSTOM; //... public class OomAdjuster {//...private boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now,long nowElapsed) {boolean success true;final ProcessStateRecord state app.mState;if (state.getCurRawAdj() ! state.getSetRawAdj()) {state.setSetRawAdj(state.getCurRawAdj());}//...int processGroup;switch (curSchedGroup) {case ProcessList.SCHED_GROUP_BACKGROUND:processGroup THREAD_GROUP_BACKGROUND;break;case ProcessList.SCHED_GROUP_TOP_APP:case ProcessList.SCHED_GROUP_TOP_APP_BOUND:processGroup THREAD_GROUP_TOP_APP;break;case ProcessList.SCHED_GROUP_RESTRICTED:processGroup THREAD_GROUP_RESTRICTED;break;case ProcessList.SCHED_GROUP_CUSTOM:processGroup THREAD_GROUP_CUSTOM;break;default:processGroup THREAD_GROUP_DEFAULT;break;}//...}//...private boolean computeOomAdjLSP(ProcessRecord app, int cachedAdj,ProcessRecord topApp, boolean doingAll, long now, boolean cycleReEval,boolean computeClients) {//...if(app.processName.equals(com.ags.test)){schedGroup ProcessList.SCHED_GROUP_CUSTOM;}// Do final modification to adj. Everything we do between here and applying// the final setAdj must be done in this function, because we will also use// it when computing the final cached adj later. Note that we dont need to// worry about this for max adj above, since max adj will always be used to// keep it out of the cached vaues.state.setCurAdj(psr.modifyRawOomAdj(adj));state.setCurCapability(capability);state.setCurrentSchedulingGroup(schedGroup);state.setCurProcState(procState);state.setCurRawProcState(procState);state.updateLastInvisibleTime(hasVisibleActivities);state.setHasForegroundActivities(foregroundActivities);state.setCompletedAdjSeq(mAdjSeq);// if curAdj or curProcState improved, then this process was promotedreturn state.getCurAdj() prevAppAdj || state.getCurProcState() prevProcState|| state.getCurCapability() ! prevCapability;}//... } 修改SpecializeCommon主要是在创建进程时直接设置cpuset在$AOSP/frameworks/base/core/jni/android_util_Process.cpp文件中修改 static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids, jint runtime_flags,jobjectArray rlimits, jlong permitted_capabilities,jlong effective_capabilities, jint mount_external,jstring managed_se_info, jstring managed_nice_name,bool is_system_server, bool is_child_zygote,jstring managed_instruction_set, jstring managed_app_data_dir,bool is_top_app, jobjectArray pkg_data_info_list,jobjectArray allowlisted_data_info_list, bool mount_data_dirs,bool mount_storage_dirs) {const char* process_name is_system_server ? system_server : zygote;auto fail_fn std::bind(ZygoteFailure, env, process_name, managed_nice_name, _1);auto extract_fn std::bind(ExtractJString, env, process_name, managed_nice_name, _1);//...if (setresgid(gid, gid, gid) -1) {fail_fn(CREATE_ERROR(setresgid(%d) failed: %s, gid, strerror(errno)));}// Must be called when the new process still has CAP_SYS_ADMIN, in this case,// before changing uid from 0, which clears capabilities. The other// alternative is to call prctl(PR_SET_NO_NEW_PRIVS, 1) afterward, but that// breaks SELinux domain transition (see b/71859146). As the result,// privileged syscalls used below still need to be accessible in app process.SetUpSeccompFilter(uid, is_child_zygote);// Must be called before losing the permission to set scheduler policy.SetSchedulerPolicy(fail_fn, is_top_app); if (nice_name.has_value()) {if(strncmp(nice_name.value().c_str(),com.ags.test,sizeof(com.ags.test))0){ #if 1 //set_cpuset_policy方案int ret set_cpuset_policy(0, SP_CUSTOM);if (ret ! 0) {ALOGE(set_cpuset_policy call default failure,ret:%d,(%s), ret,nice_name.value().c_str());}else{ALOGD(set_cpuset_policy call default success,ret0,(%s), nice_name.value().c_str());} #else //set_sched_policy兼容方案int ret set_sched_policy(0, SP_CUSTOM);if (ret ! 0) {ALOGE(set_sched_policy call default failure,ret:%d,(%s), ret,nice_name.value().c_str());}else{ALOGD(set_sched_policy call default success,ret0,(%s), nice_name.value().c_str());} #endif}}//...}至此framework层相关修改就结束了。主要添加SCHED_GROUP_CUSTOM、THREAD_GROUP_CUSTOMTHREAD_GROUP_对应SP_即以和对应SP_CUSTOM之间的联系建立且支持开机启动后直接过滤包进行CPUSET的设置。同时applyOomAdjLSP的判定保持不变不受其他CPUSET的影响。
http://www.w-s-a.com/news/352024/

相关文章:

  • 服务二级公司网站建设平台销售模式有哪些
  • 南昌县建设局网站微信分销小程序开发
  • 网站设计师需要什么知识与技能wordpress个性
  • 做茶叶网站的目的和规划有什么做照片书的网站
  • 开福区城乡建设局门户网站关键词挖掘查询工具爱站网
  • 网站建设全国排名沈阳seo按天计费
  • 成都公司网站设计无锡seo网站推广费用
  • 建网站平台要多少钱购物网站界面设计策划
  • 学完js了可以做哪些网站长沙建站官网
  • 怎么样做问卷网站多少钱英语
  • 房产网站建设方案建筑公司是干什么的
  • wordpress建的大型网站柳州市网站建设
  • 石家庄做网站的公司有哪些微信自媒体网站建设
  • 池州哪里有做网站注册公司有哪些风险
  • 做古代风格头像的网站对网站政务建设的建议
  • 网站搜索栏怎么做设计个网站要多少钱
  • 阿里巴巴网站建设目标wamp wordpress
  • 自己做的网站怎么挂网上金蝶erp
  • 网站的页面由什么组成淘宝网网站建设的需求分析
  • 软文网站推广法dede5.7内核qq个性门户网站源码
  • 个人备案网站名称校园网站建设特色
  • vr超市门户网站建设班级网站怎么做ppt模板
  • 网站建设一般是用哪个软件刚开始做写手上什么网站
  • 用jsp做的网站源代码下载有哪些做红色旅游景点的网站
  • 网站开发的技术选型黄石市网站建设
  • 做直播网站需要证书吗专做宝宝的用品网站
  • 网站标题用什么符号网站制作交易流程
  • dede模板网站教程jsp网站搭建
  • 上海网站开发外包公司鲜花导购网页制作
  • 宿州外贸网站建设公司个人注册网站一般做什么