|
本帖最后由 9zhmke 于 2024-2-12 16:15 编辑
感谢楼主的探索,今天我又重装了系统,再次重装PrimoCache,虽然之前都在用自制的PrimoCache4.3静默安装版,但只是安装软件而已,并没有设置缓存的功能,搜索到本贴,摸索写了个自己用的批处理来静默安装- cd /d "C:\Program Files\PrimoCache"
- set disk=没找到盘
- for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i
- for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
- echo 二级缓存是%disk%--{A340EFBD-5A9F-444A-B642-A42B5A9CD496}
- rxpcc new -v d -m 4096 -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
- rem D盘,内存4G,二级缓存3%写入,缓存时间20秒,均衡模式,待机刷入缓存,L1满时转L2,-p优先取L2,-s静默
- rxpcc new -v c -m 4096 -w INF -a average,freewritten,flushsleep -p=boot -s
- rem C盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
复制代码
顺便把AI翻译自带的帮助放上来,大家一起进一步摸索(rxpcc ? new)=========================================================
- -v, -volume <volume> - 指定一个或多个要由此新缓存任务缓存的卷。
- 最多可以指定16个卷。
- 示例: -v 2,3,5
- -v c,d,5
- -t, -import <cfgfile> - 从文件<cfgfile>导入缓存配置。
- <cfgfile>指定配置文件的完整路径和名称。
- 注意:当指定此选项时,命令中在此选项之前写入的所有缓存选项都将被忽略。
- 但是您可以在导入的配置之后继续追加选项以修改导入的配置。
- -m, -mm <size> - 指定一级缓存的操作系统管理内存(MM)的大小,以兆字节(MB)为单位。
- -i, -im <size> - 指定一级缓存的操作系统不可见内存(IM)的大小,以兆字节(MB)为单位。
- -k, -c1adv <options> - 指定高级一级缓存选项。
- <options>指定以下一个或多个选项,用逗号分隔:
- freehiber - 在混合睡眠或休眠时释放L1缓存
- keepoff - 在快速关闭时保留L1缓存(MM)
- 注意:选项“keepoff”仅在未指定选项“freehiber”且需要Windows 8或更高版本时有效。
- 示例:-k freehiber
- -l, -l2 <storage>[,<size>] - 指定二级存储和二级缓存大小。
- <storage>指定一个二级存储的标识符。
- <size>指定二级缓存的大小,以兆字节(MB)为单位。
- <size>是可选的,如果未指定,将为二级缓存申请所有可用的二级存储空间。
- -e, -wspeed <speed> - 指定Windows繁忙时将缓存数据定期收集到二级存储的重复间隔,以秒为单位。<speed>的取值范围为0到250。
- 仅当指定了-l选项时才有效。
- 如果未指定-e选项,或者<speed>为0,则程序使用其内部设置。
- 如果希望仅在系统处于空闲状态时收集二级缓存数据,请使用“-e IDLE”。
- 如果希望即时收集二级缓存数据,请使用“-e INSTANT”。
- -j, -c2adv <options> - 指定高级二级缓存选项。
- <options>指定以下一个或多个选项,用逗号分隔:
- volatile - 当系统重新启动时,二级存储中的缓存内容不会被保留。
- 该选项通常用于多启动计算机,另一个操作系统可能会修改缓存的卷。
- ignoresync - 即使缓存内容与源数据可能不同步,也不会重置二级存储中的缓存内容。
- noverify - 当检测到不正常关机时,二级缓存将不尝试验证缓存内容,而只会清除所有缓存内容。
- 注意:“volatile”,“ignoresync”和“noverify”是互斥的。如果同时设置了多个选项,
- 优先级如下:
- volatile > ignoresync > noverify
- 警告:“ignoresync”选项可能为读/写请求提供过时或错误的缓存数据,并可能导致意外错误和破坏目标卷!
- 请勿在正常情况下启用此选项!
- 示例:-j volatile
- -r, -ratio <r1>[,<r2>] - 指定缓存空间的多少比例用于写入缓存。
- <r1>是一级缓存的比例值,<r2>是二级缓存的比例值。
- 可能的值为0到100的数字,或255表示整个缓存空间由读和写共享。
- 一级缓存的默认值为255(共享),二级缓存的默认值为0(只读)。
- 示例:-r 80,60表示80%的L1缓存用于写入,20%用于读取,
- 同时60%的L2缓存用于写入,40%用于读取。
- -b, -block <blocksize> - 指定块大小。 <blocksize>可以是以下值之一:
- 4、8、16、32、64、128、256、512。
- 如果未指定-b选项,命令将自动选择合适的块大小。
- -w, -dw <latency> - 启用延迟写入。 <latency>指定缓存任务从缓存定期刷新延迟写入数据到磁盘的时间间隔,以秒为单位。
- 如果要为延迟设置无限值,请使用“-w INF”。
- -a, -dwadv <options> - 指定高级延迟写入选项。仅当指定-w选项时才有效。
- <options>指定以下一个或多个选项,用逗号分隔:
- native - 写入模式:NATIVE
- intelligent - 写入模式:INTELLIGENT
- idle - 写入模式:IDLE-FLUSH
- buffer - 写入模式:BUFFER
- average - 写入模式:AVERAGE
- ignorebusy - 忽略Windows繁忙状态
- freewritten - 在写入时释放块
- flushsleep - 在睡眠时刷新
- flushtoL2 - 刷新L1缓存到L2缓存
- skipflush - 在关闭时跳过刷新(警告:此选项可能完全破坏整个磁盘分区!)
- 示例:-a intelligent,freewritten,flushsleep
- -p, -prefetch [=<options>] - 启用预取。[options]指定以下一个或多个选项,用逗号分隔:
- boot - 在Windows启动时开始
- lock - 锁定缓存内容
- fromL2 - 从二级缓存中读取
- 示例1:-p
- 示例2:-p=boot,fromL2
- -x,-voladv <spec> - 默认情况下,缓存任务中的所有卷都会遵循任务的缓存设置。此选项可以指定每个卷的个别设置,并关闭一些不需要的功能。 <spec>指定一个卷及其设置。它具有以下格式,其中“v”表示卷索引,每个“x”表示一个设置值,为十进制数。 v-xxxxx “x”代表的设置从左到右依次为策略(Strategy)、二级缓存(L2 Cache)、延迟写入(Defer-Write)、预取(Prefetch)和一级缓存(L1 Cache)。以下表列出了它们的可能值。 策略(Strategy): 0 默认 2 只读 3 只写 一级缓存(L1 Cache)/二级缓存(L2 Cache)/延迟写入(Defer-Write)/预取(Prefetch): 0 默认 2 禁用 (默认 - 遵循缓存任务的设置) 例如,“-x 4-32200”指定了卷 #4 的个别设置,策略(Strategy)为只写(Write-Only),禁用二级缓存(L2 Cache),禁用延迟写入(Defer-Write),而预取(Prefetch)和一级缓存(L1 Cache)未指定,
- 使用缓存任务的设置。在“xxxxx”格式中,尾随的零可以忽略。因此,上述示例等同于“-x 4-322”。两个或多个<spec>之间用逗号分隔。例如,“-x 4-3220,1-02222”为卷 #4 和 #1 设置了设置。 -s,-silent - 以静默模式执行此命令。没有交互提示和运行信息。仍然显示错误或警告信息。
- 示例:
- 以下命令为卷 #1(C:)和 #3(E:)创建一个缓存任务,指定1024MB RAM、20480MB 二级缓存以及8KB 块大小:
- rxpcc new -v c,e -m 1024 -l {13D8F992-8F9C-4000-A5F3-6A6AD2872E81},20480 -b 8
- 以下命令为卷 #2 创建一个缓存任务,指定4096MB RAM、4KB 块大小、10 秒延迟写入延迟和100 的写入缓存:
- rxpcc new -m 4096 -b 4 -w 10 -r 100 -v 2
- 以下命令通过导入文件“c:\configuration.cfg”中存储的配置,并指定与配置文件不同的4096MB RAM 缓存,为卷 #2 创建一个缓存任务:
- rxpcc new -v 2 -t "c:\configuration.cfg" -m 4096
复制代码
现在打算写一个可用于所我周边朋友电脑环境的批处理,目前写了个初稿还没有仔细调试,有兴趣味的同学一起搞搞:
- @echo Off
- rem 要多测试,比如卷标为空时,取分区空间位置是否正确等
- pushd %~DP0
- setlocal enabledelayedexpansion
- set debug=0
- set "MB= "
- set GB=000
- set TB=000000
- echo 查几只硬盘、是否SSD+机械盘、内存大小
- set SSD_NUM=0
- for /f %%i in ('powershell Get-PhysicalDisk^|find "SSD"') do set SSD=%%i && set /a SSD_NUM=!SSD_NUM! + 1
- set HDD_NUM=0
- for /f %%i in ('powershell Get-PhysicalDisk^|find "HDD"') do set HDD=%%i && set /a HDD_NUM=!HDD_NUM! + 1
- wmic os get TotalVisibleMemorySize
- if %SSD_NUM% gtr 1 set msg1=固态硬盘大于一只,程序无法正确判断应该怎么设缓存.
- if %HDD_NUM% gtr 1 set msg2=机械硬盘大于一只,程序无法正确判断应该怎么设缓存.
- for /f "tokens=2*" %%i in ('systeminfo^|find "物理内存总量"') do set memory=%%i %%j
- if not "%memory:~-2%"=="MB" set msg3=内存大小超出认知,程序无法正确判断应该怎么设缓存.
- rem 去除最后两位,去除中间的逗号
- set memory=%memory:~0,-2%
- set /a memory=%memory:,=% /1000
- if %memory% lss 8 set msg3=内存太小,还是不使用缓存程序好些.
- if "%msg1%%msg2%%msg3%" gtr "" goto ERROR
- echo 固态%SSD_NUM%只,排位%SSD%;机械%HDD_NUM%只,排位%HDD%,内存大小:%memory%
- rem =======================================================================================================
- echo 查看系统磁盘环境
- set hd=MBR
- for /f "tokens=2,8" %%i in ('echo list disk ^|diskpart') do (
- set disks=%%i
- if "%%j"=="*" set hd=GPT
- )
- set /a disks=%disks% + 1
- if %debug%==1 echo 磁盘引导方式是:%hd%,共有%disks%只磁盘
- set boot=没找到
- set system=没找到
- for /f "tokens=2,3,6,7,8" %%i in ('echo list vol ^|diskpart^|find "启动"') do (
- set disk_c=%%i
- set system=%%j
- if "%%l"=="TB" set c_size_0=000000
- if "%%l"=="GB" set c_size_0=000
- if "%%l"=="MB" set c_size_0=
- set c_size=%%k%c_size_0%
- if "%%m"=="TB" set c_size_0=000000
- if "%%m"=="GB" set c_size_0=000
- if "%%m"=="MB" set c_size_0=
- if "%%k"=="磁盘分区" set c_size=%%l%c_size_0%
- )
- for /f "tokens=2" %%i in ('echo list vol ^|diskpart^|find "系统"') do set boot=%%i
- if %debug%==1 echo 启动分区号是%boot%,系统安装到了第%disk_c%个分区,即%system%盘,大小是%c_size%兆
- for /f "tokens=2" %%i in ('echo list vol^|diskpart^|find "磁盘分区"') do set vols=%%i
- set /a vols=%vols% + 1
- if %debug%==1 echo 硬盘共有%vols%个分区
- set disk_u=没找到
- for /f "tokens=3" %%i in ('echo list vol^|diskpart^|find "可移动"') do set disk_u=%%i& goto U_NEXT
- :U_NEXT
- if %debug%==1 echo 第一个U盘:%disk_u%
- set udisks=0
- for /f "tokens=3" %%i in ('echo list vol^|diskpart^|find "可移动"') do set /a udisks=!udisks! + 1
- if %debug%==1 echo 共有%udisks%个U盘
- echo 共有%disks%只磁盘,共有%udisks%个U盘,第一只U盘:%disk_u%。硬盘共有%vols%个分区,磁盘引导方式是:%hd%,
- echo 启动分区号是%boot%,系统安装到了第%disk_c%个分区,即%system%盘,大小是%c_size%兆
- rem =======================================================================================================
- echo 是否SSD有空余未分区空间
- set SSD=1
- ( echo.select disk %SSD%
- echo.list partition
- )|diskpart|find "分区 ">%tmp%\diskpart.txt
- set all=0
- set num=0
- for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do (
- set size=%%j!%%k!
- set /a all=!all! + !size!
- set part%%i=!size!
- set /a num=!num! + 1
- echo 分区!num!单位是%%k,size=!size!M,all=!all!
- )
- set /a all=%all% / 1000
- for /f "tokens=4,5" %%i in ('echo list disk^|diskpart^|find "磁盘 %SSD%"') do set /a size=%%i!%%j! /1000
- if not "%all%"=="%size%" set msg=空间未分完
- if "%all%"=="%size%" set msg=已分配完
- del %tmp%\diskpart.txt
- echo 硬盘%SSD%是%size%G大小,!num!个分区共用了%all%G,%msg%
- if "%msg%"=="已分配完" goto PrimoCache
- rem =======================================================================================================
- echo 把SSD剩余空间分配给二级缓存
- set /a SSD_Free=%size% - %all%
- if %SSD_Free% lss 5 set msg1=SSD余空太小,放弃建二级缓存
- if exist "L:\." set msg2=建立SSD新分区时,驱动器号L被占用无法继续分配.& goto ERROR
- ( echo.select disk %SSD%
- echo.create partition primary
- echo.assign letter=L
- echo.list partition
- )|diskpart|find "分区 ">%tmp%\diskpart.txt
- set all=0
- set num_new=0
- for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do (
- set size=%%j!%%k!
- set /a all=!all! + !size!
- set part%%i=!size!
- set /a num_new=!num_new! + 1
- if "%SSD_Free%"=="!size!" set SSD_NEW_Free=%%j%%k&&set SSD_NEW_GB=!size!
- echo 分区!num_new!单位是%%k,size=!size!M,all=!all!
- )
- set /a all=%all% / 1000
- del %tmp%\diskpart.txt
- set /a SSD_NEW_PART = %num_new% - %num%
- if not "%SSD_NEW_PART%"=="1" set msg1=建立SSD新分区出错,请检查.& goto ERROR
- if %SSD_NEW_GB% gtr 300 set msg2=建立SSD新分区有点大
- if %SSD_NEW_GB% lss 3 set msg2=建立SSD新分区有点小
- echo 新建的分区号是%num_new%,大小是%SSD_NEW_GB%GB,即将转换为二级缓存
- set SSD_NEW_VOL=
- for /f "tokens=2,3,7" %%i in ('echo list vol^|diskpart^|find "RAW"') do (
- rem 格式为RAW并且驱动器号是L,大小又相同,肯定就没错了。
- if %%j==L if "%%k"=="%SSD_NEW_GB% GB" set SSD_NEW_VOL=%%i
- )
- rxpcc storage format -v %SSD_NEW_VOL% -s
- rem =======================================================================================================
- :PrimoCache
- set disk=没找到盘
- for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i
- for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
- set Primo=-a average,freewritten,flushsleep
- rem 均衡模式,待机刷入缓存;后面一句:二级缓存3%写入,L1满时转L2,-p优先取L2
- if not "%disk%"=="没找到盘" set Primo=-l %disk% -r 255,3 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2
- echo 二级缓存是%disk%比如{A340EFBD-5A9F-444A-B642-A42B5A9CD496},参数-l %disk% -r 255,3设二级缓存3%写入
- rxpcc new -v d -m 4096 -w 20 -s %Primo%
- rem D盘,内存4G,缓存时间20秒,,-s静默
- :PrimoDisk_D
- rxpcc new -v c -m 4096 -w INF -a average,freewritten,flushsleep -p=boot -s
- rem C盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
- rem =======================================================================================================
- :ERROR
- :END
- echo.%msg1%%msg2%%msg3%
- pause
复制代码
|
|