การย้าย swapfiles ไปยังพาร์ติชันเฉพาะใน Snow Leopard


31

ฉันสามารถย้าย swapfiles หน่วยความจำเสมือนของ Apple ไปยังพาร์ติชันเฉพาะบนฮาร์ดไดรฟ์ของฉันได้จนถึงปัจจุบัน เทคนิคที่ฉันใช้อยู่นั้นได้อธิบายไว้ในเธรดบน forums.macosxhints.com

อย่างไรก็ตามด้วยภาพตัวอย่างนักพัฒนาของ Snow Leopard วิธีนี้ใช้งานไม่ได้อีกต่อไป ไม่มีใครรู้ว่ามันสามารถทำได้กับระบบปฏิบัติการใหม่หรือไม่?

อัปเดต:ฉันได้ทำเครื่องหมายคำตอบของ dbluว่าเป็นที่ยอมรับแม้ว่ามันจะไม่ได้ผลเพราะเขาให้คำแนะนำที่ยอดเยี่ยมและมีรายละเอียดและเพราะคำแนะนำของเขาในการใช้plutilชี้ไปที่ฉันในที่สุด โซลูชันที่สมบูรณ์และใช้งานได้โพสต์ที่นี่ในคำถามเนื่องจากฉันไม่มีชื่อเสียงเพียงพอที่จะแก้ไขคำตอบที่ยอมรับได้

อัปเดต # 2:เปลี่ยนขั้นตอนเพื่อแสดงให้เห็นถึงเทคนิคของ eklซึ่งช่วยลดความยุ่งยากทั้งหมดโดยลดความต้องการสคริปต์เชลล์ขั้นกลาง:

โซลูชั่นที่สมบูรณ์:

1. เปิด Terminal และทำสำเนาสำรองของ dynamic_pager.plist ที่เป็นค่าเริ่มต้นของ Apple:

$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. แปลง Plist จากไบนารีเป็น XML ธรรมดา:

$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. เปิดโปรแกรมแปลงข้อความพร้อมตัวแก้ไขข้อความที่คุณเลือก (ฉันใช้picoดูคำตอบของ dblu สำหรับตัวอย่างโดยใช้vim):

$ sudo pico -w com.apple.dynamic_pager.plist

ควรมีลักษณะดังนี้:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>HopefullyExitsLast</key>
    <true/>
    <key>Label</key>
    <string>com.apple.dynamic_pager</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/dynamic_pager</string>
        <string>-F</string>
        <string>/private/var/vm/swapfile</string>
    </array>
</dict>
</plist>

4. ปรับเปลี่ยนอาร์เรย์ ProgramArguments (บรรทัดที่ 13 ถึง 18) เพื่อใช้คำสั่งเชลล์ wait4path (ตามที่ZILjrแนะนำ) ก่อนที่จะเรียกใช้ dynamic_pager ดูหมายเหตุ # 1 สำหรับรายละเอียดเกี่ยวกับสาเหตุที่จำเป็น ในตัวอย่างต่อไปนี้พาร์ทิชันของฉันเรียกว่า 'Swap' และฉันเลือกที่จะใส่ swapfiles ในไดเรกทอรีที่ซ่อนอยู่ในพาร์ติชันที่เรียกว่า '.vm' ให้แน่ใจว่าไดเรกทอรีที่คุณระบุมีอยู่จริง XML ควรมีลักษณะดังนี้:

<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>/bin/wait4path /Volumes/Swap/ &amp;&amp;
/sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
</array>

5. บันทึก Plist และกลับไปที่หน้าจอพร้อมรับ ใช้picoคำสั่งจะเป็น:

<ctrl+o> to save the file
<enter>  to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit

6. แปลง Plist ที่แก้ไขแล้วกลับไปเป็นไบนารี:

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7.รีสตาร์ท Mac ของคุณ หากคุณประสบปัญหาให้เปลี่ยนเป็นโหมดเริ่มต้นอย่างละเอียดโดยกด Command-v ค้างไว้หลังจากเริ่มการทำงาน นี่จะช่วยให้คุณเห็นข้อความเริ่มต้นทั้งหมดที่ปรากฏขึ้นระหว่างการเริ่มต้น หากคุณพบปัญหาที่เลวร้ายยิ่งขึ้น (เช่นคุณไม่เคยเห็นหน้าจอเข้าสู่ระบบ) ให้กด Command-s ค้างไว้แทน สิ่งนี้จะทำการบูตคอมพิวเตอร์ในโหมดผู้ใช้คนเดียว (ไม่มีกราฟิก UI เพียงแค่พร้อมรับคำสั่ง) และให้คุณกู้คืนสำเนาสำรองของ com.apple.dynamic_pager.plist ที่คุณทำไว้ในขั้นตอนที่ 1

8. เมื่อคอมพิวเตอร์บู๊ตแล้วให้เปิด Terminal ขึ้นมาแล้วตรวจสอบว่าได้ทำการย้ายไฟล์ swap แล้ว:

$ cd /Volumes/Swap/.vm
$ ls -l

คุณควรเห็นสิ่งนี้:

-rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. ลบ swapfiles เก่า:

$ cd /private/var/vm
$ sudo rm swapfile*

10. กำไร!

หมายเหตุ 1

การแก้ไขข้อโต้แย้งเป็น dynamic_pager ในการวางแผนโดยไม่ใช้wait4pathไม่ได้ผลเสมอไปและเมื่อมันล้มเหลวมันจะทำอย่างเงียบ ๆ ปัญหาเกิดขึ้นจากการที่ dynamic_pager เปิดตัวเร็วมากในกระบวนการเริ่มต้น หากพาร์ทิชัน swap ของคุณยังไม่ได้เมานท์เมื่อโหลด dynamic_pager เป็นครั้งแรก (จากประสบการณ์ของฉันสิ่งนี้เกิดขึ้นได้ 99% ของเวลา) ระบบจะทำการปลอม มันจะสร้างลิงก์สัญลักษณ์ในไดเรกทอรี / Volumes ของคุณซึ่งมีชื่อเดียวกับพาร์ทิชัน swap ของคุณ แต่จะกลับไปที่ตำแหน่ง swapfile เริ่มต้น (/ private / var / vm) จากนั้นเมื่อ swap พาร์ติชันที่แท้จริงของคุณติดตั้งมันจะได้รับชื่อSwap 1(หรือYourDriveName 1) คุณสามารถเห็นปัญหาได้ด้วยการเปิด Terminal และแสดงรายการเนื้อหาของไดเรกทอรี / Volumes ของคุณ:

$ cd /Volumes
$ ls -l

คุณจะเห็นสิ่งนี้:

drwxrwxrwx  11 yourUser  staff   442 16 Sep 12:13 Swap -> private/var/vm
drwxrwxrwx  14 yourUser  staff     5 16 Sep 12:13 Swap 1 
lrwxr-xr-x   1 root      admin     1 17 Sep 12:01 System -> /

โปรดทราบว่าความล้มเหลวนี้อาจเป็นจุดที่ยากมาก หากคุณต้องตรวจสอบ swapfiles ตามที่ฉันแสดงในขั้นตอนที่ 12 คุณจะยังคงเห็นพวกเขา ! ลิงก์สัญลักษณ์จะทำให้ดูเหมือนว่า swapfiles ของคุณถูกย้ายแล้วแม้ว่าจะถูกเก็บไว้ในตำแหน่งเริ่มต้นจริง ๆ ก็ตาม

โน้ต 2

เดิมทีฉันไม่สามารถทำงานใน Snow Leopard ได้เพราะ com.apple.dynamic_pager.plist ถูกเก็บไว้ในรูปแบบไบนารี ฉันทำสำเนาของไฟล์ต้นฉบับและเปิดด้วยตัวแก้ไขรายการทรัพย์สินของแอปเปิ้ล (พร้อมใช้งานกับ Xcode) เพื่อทำการเปลี่ยนแปลง แต่กระบวนการนี้ได้เพิ่มคุณสมบัติเพิ่มเติมบางอย่างลงในไฟล์ plist ซึ่งทำให้ระบบไม่สนใจและใช้ค่าเริ่มต้น . ดังที่ dblu ชี้ให้เห็นการใช้plutilเพื่อแปลงไฟล์เป็น XML ธรรมดาทำงานได้อย่างมีเสน่ห์

หมายเหตุ 3

คุณสามารถตรวจสอบแอปพลิเคชันคอนโซลเพื่อดูข้อความใด ๆ ที่ dynamic_pager_init echos ไปที่หน้าจอ หากคุณเห็นบรรทัดต่อไปนี้ซ้ำแล้วซ้ำอีกแสดงว่ามีปัญหากับการตั้งค่า ฉันพบข้อความเหล่านี้เพราะฉันลืมสร้างไดเรกทอรี '.vm' ที่ฉันระบุใน dynamic_pager_init

com.apple.launchd[1]  (com.apple.dynamic_pager[176]) Exited with exit code: 1
com.apple.launchd[1]  (com.apple.dynamic_pager) Throttling respawn: Will start in 10 seconds

เมื่อทุกอย่างทำงานอย่างถูกต้องคุณอาจเห็นข้อความด้านบนสองสามครั้งเท่านั้นและไม่มีข้อความ "Throttling respawn" อีกต่อไป นี่หมายความว่าระบบไม่ต้องรอให้พาร์ติชันโหลด แต่ท้ายที่สุดก็ประสบความสำเร็จ


ฉันอยากรู้จริงๆว่าทำไมคุณถึงต้องการทำเช่นนี้?
BinaryMisfit

สำหรับประสิทธิภาพที่เล็กน้อยจะได้รับ ฉันชอบแบ่งพาร์ติชั่นฮาร์ดไดรฟ์ของฉันตามการใช้งาน ฉันมีพาร์ติชันหนึ่งสำหรับระบบปฏิบัติการและแอปพลิเคชันหนึ่งสำหรับโฟลเดอร์ผู้ใช้หนึ่งสำหรับเอกสารหนึ่งสำหรับสื่อ (เพลงภาพยนตร์ ฯลฯ ) และหนึ่งสำหรับ swapfiles จากประสบการณ์ของฉันการเก็บสลับไฟล์แยกจากส่วนที่เหลือของระบบทำให้การกระจายตัวของดิสก์ต่ำ การตั้งค่าของฉันจะมี swap บนไดรฟ์เฉพาะ แต่พาร์ทิชันอื่นมักจะพอเพียง
e.James

4
ยุติธรรมเพียงพอ - อย่างไรก็ตามพาร์ติชันในไดรฟ์เดียวกันจะทำให้การทำงานของไดรฟ์มีประสิทธิภาพมากขึ้น ฮาร์ดไดรฟ์จะต้องทำงานได้มากขึ้นเมื่อกระโดดข้ามพาร์ติชันในไดรฟ์เดียว ฉันถามเพราะฉันยังไม่ได้มีปัญหาเรื่องการแยกส่วนและประสิทธิภาพใน Mac ของฉันหลังจากใช้งานเกือบ 2 ปีและเมื่อฉันเห็นโพสต์เหล่านี้พวกเขาสนใจฉัน
BinaryMisfit

1
ฉันไม่แน่ใจว่าทำไมฉันไม่สามารถโพสต์คำตอบ( 101ตัวแทนซึ่ง - ถ้าฉันจำคณิตศาสตร์ของฉัน - เป็นมากกว่า10ซึ่งรัฐได้รับการป้องกันต้อง)แต่ฉันพบwait4pathวิธีการแก้ปัญหาขอบคุณสิ่งที่ Applicorn Xupport ได้รับการแก้ไขสำหรับฉัน ฉันจะโพสต์คำตอบแบบเต็มเมื่อฉันรู้วิธี แต่สั้น ๆ คือเปลี่ยนอาร์กิวเมนต์โปรแกรมล่าสุดเป็นเพียงเส้นทางใหม่ (เช่น<string>/Volumes/swap/.vm/swapfile</string>) เปลี่ยนOnDemandคีย์เป็น<true/>และเพิ่มStartOnMountคีย์ไปยังจุดสิ้นสุดด้วยค่า <true/>ของ ป.ล. โซลูชั่นนี้ทำงานได้ดีใน Lion (สำหรับฉันอย่างน้อย)
Slipp D. Thompson

1
@Slipp Douglas: ดูดีสำหรับฉัน StartOnMountธงถูกเพิ่มเข้ามาใน 10.5 ตาม: mactech.com/articles/mactech/Vol.25/25.10/...
e.James

คำตอบ:


10

หมายเหตุ : ดู (ยัง) คำตอบที่ถูกต้อง / ปรับปรุงในคำถามของตัวเอง


วิธีแก้ปัญหาต่อไปนี้ทำงานสำหรับฉัน:

เปิดเทอร์มินัลและสำรอง com.apple.dynamic_pager.plist ซึ่งคุณจะเปลี่ยนในไม่ช้า:

$ cd / ระบบ / ห้องสมุด / LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist {, _ bak}

แปลง binary plist เป็น xml:

$ sudo plutil - เปลี่ยน xml1 com.apple.dynamic_pager.plist

และเปิดด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ

$ sudo vim com.apple.dynamic_pager.plist

มันจะมีลักษณะดังนี้:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3 <plist version="1.0">
 4 <dict>
 5     <key>EnableTransactions</key>
 6     <true/>
 7     <key>HopefullyExitsLast</key>
 8     <true/>
 9     <key>Label</key>
10     <string>com.apple.dynamic_pager</string>
11     <key>OnDemand</key>
12     <false/>
13     <key>ProgramArguments</key>
14     <array>
15         <string>/sbin/dynamic_pager</string>
16         <string>-F</string>
17         <string>/private/var/vm/swapfile</string>
18     </array>
19 </dict>
20 </plist>

ในบรรทัดที่ 17 แก้ไข / private / var / vm / swapfile (เช่น / Volumes / partition2 / swapfile) ให้บันทึกและปิดโปรแกรมแก้ไขของคุณ (": x" จะทำทั้งสองอย่างใน vim)

แปลงไฟล์ plist กลับไปเป็นไบนารี:

$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

หลังจากรีบูตเครื่อง Mac ของคุณคุณควรหา swapfiles ในไดเรกทอรีที่คุณระบุ

หากคุณพบปัญหาใด ๆ คุณสามารถคืนค่าสำเนาสำรองที่คุณสร้างในขั้นตอนแรกด้วย:

$ cd / ระบบ / ห้องสมุด / LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist {_bak,}

คุณแน่ใจหรือไม่ว่า swapfile กำลังถูกย้ายไปยังพาร์ติชันด้วยการตั้งค่านี้จริง ๆ ? เมื่อฉันลองวิธีนี้ แต่เดิม Dynamic_pager จะโหลดก่อนที่พาร์ติชั่นรองจะถูกเมานท์ ระบบจะลอกเลียนแบบโดยการสร้างลิงก์สัญลักษณ์ไปยัง partition2 ในไดเรกทอรี / เล่มที่ชี้ไปที่ / private / var / vm คุณสามารถระบุความล้มเหลวได้โดยทำ ls -al ในไดเรกทอรี / Volumes โดยที่คุณจะเห็นทั้ง "partition2" (ลิงก์สัญลักษณ์) และ "partition2 1" (พาร์ติชันที่แท้จริงของคุณ)
e.James

ทั้งสองวิธี +1 สำหรับเทคนิคในการแปลงไฟล์ plist เป็น & จากรูปแบบไบนารี com.apple.dynamic_pager.plist อยู่ในรูปแบบข้อความล้วนใน 10.5.x แต่ในรูปแบบไบนารีตั้งแต่ 10.6 ซึ่งเป็นส่วนหนึ่งของปัญหาของฉัน ฉันแก้ไขไฟล์ plist โดยใช้แอพ Property List Editor ที่มาพร้อมกับ Xcode และนั่นอาจเป็นสาเหตุที่ทำให้สิ่งต่าง ๆ ไม่ทำงาน ฉันจะลอง plutil และดูว่ามันทำให้ฉันเพิ่มเติมอีกหรือไม่
e.James

ฉันไม่สามารถทดสอบกับพาร์ติชันอื่นได้ในขณะนี้อย่างไรก็ตามในระหว่างการทดสอบของฉันฉันสร้าง dynamic_pager สร้าง swapfiles บน thumbdrive โดยใช้เทคนิคด้านบน
dblu

ฉันสามารถทำให้เทคนิคดั้งเดิมทำงานได้ขอบคุณคำแนะนำของคุณที่ใช้plutilสำหรับการแปลง ฉันโพสต์โซลูชันที่สมบูรณ์ในคำถาม (เนื่องจากฉันมีตัวแทนไม่เพียงพอที่จะเพิ่มลงในคำตอบของคุณ) ดูบันทึกย่อของฉัน # 1 สำหรับคำอธิบายโดยละเอียดเกี่ยวกับปัญหาที่ฉันพบโดยเพียงแค่ปรับเปลี่ยนเพลท
e.James

อย่างไรก็ตามขอขอบคุณสำหรับคำตอบ คุณรวบรวมชุดคำสั่งที่ยอดเยี่ยมมาด้วยกันและคุณชี้ให้ฉันในทิศทางที่ถูกต้องดังนั้นฉันจึงทำเครื่องหมายว่าเป็นที่ยอมรับ ไชโย! :)
e.James

3

ฉันได้นำแนวคิดนี้ไปใช้และนำไปใช้ต่อไปเล็กน้อยโดยกล่าวถึงกลยุทธ์การเติบโตและการบุกเบิก

รายละเอียดที่http://www.crypticide.com/dropsafe/article/3848 ; ฉันจะโพสต์ลิงก์ไปยังหน้าโครงการ GoogleCode "dynamicpagerwrapper" แต่บล็อกบอกว่าฉันมีคะแนนชื่อเสียงไม่พอ ...


1
+1 สิ่งที่ยอดเยี่ยม! ฉันลองตอนนี้ นี่คือลิงก์ไปยังโครงการ GoogleCode: code.google.com/p/dynamicpagerwrapper
e.James

ตรวจสอบให้แน่ใจว่าคุณใช้การแก้ไขอย่างน้อย 8 ของสคริปต์: code.google.com/p/dynamicpagerwrapper/source/browse/trunk/ ......

3

แค่คำถาม: ทำไมไม่เพียงแค่แก้ไขการเพิ่มไฟล์. plist wait4pathแทนที่จะใช้สื่อกลางdynamic_pager_init?

บางสิ่งเช่นนี้

แก้ไข: ตามที่อธิบายไว้ในความคิดเห็นโดย e.James และความคิดเห็นต่อไปนี้ของฉันบล็อก XML ต่อไปนี้ทันทีไม่ดีทั้งคู่เนื่องจากมีข้อผิดพลาด (ขาดหายไป &&) และเนื่องจากอาร์กิวเมนต์แรกของอาร์เรย์ที่ ProgramArguments แยกวิเคราะห์เป็นโปรแกรมที่เรียกใช้ !

แต่ .. (เลื่อนลง)

 ...
13     <key>ProgramArguments</key>
14     <array>
15         <string>/bin/wait4path</string>
16         <string>/Volumes/Swap/</string>
17         <string>/sbin/dynamic_pager</string>
18         <string>-F</string>
19         <string>/Volumes/Swap/.vm/swapfile</string>
20     </array>
 ...

จุดสิ้นสุดของบล็อก xml ที่ไม่ถูกต้อง


บล็อก XML นี้ควรใช้งานได้แทน:

   ...
    13     <key>ProgramArguments</key>
    14     <array>
    15         <string>/bin/bash</string>
    16         <string>-c</string>
    17         <string>/bin/wait4path /Volumes/Swap/ &amp;&amp; /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
    18     </array>
     ...

โปรดจำไว้ว่าฉันยังมีเวลาไม่พอที่จะลองใช้การตั้งค่านี้อย่างปลอดภัย แต่ฉันพยายามเรียกใช้คำสั่งเชลล์อื่น ๆ ที่เปิดตัวในลักษณะเดียวกันและทุกอย่างจะทำงานได้อย่างที่คาดไว้

มันทำงานอย่างไร:

base:การดำเนินการwait4path /path && commandหมายถึงการcommandทำงานเฉพาะเมื่อwait4pathสิ้นสุดและออกโดยไม่มีข้อผิดพลาดและสิ่งนี้จะเกิดขึ้นเฉพาะเมื่อ/pathเป็นเส้นทางที่มีอยู่ดังนั้นเราจึงสามารถบอกได้อย่างปลอดภัยว่าdynamic_pagerจะใช้ระดับเสียงนั้นสำหรับ swapfiles

1)ตามที่เขียนในlaunchd.plistmanpage ปุ่มProgramและProgramArgumentsแมปไปยังการexecvpโทรซึ่งหมายความว่าทุกอย่างยกเว้นสตริงแรกในอาร์เรย์จะถือว่าเป็นอาร์กิวเมนต์สำหรับสตริงแรกในอาร์เรย์โปรแกรมที่จะเรียกใช้

2)ตามที่เขียนในbashmanpage มีbash -c <string>ตัวเลือกในการเรียกใช้สตริงที่ส่งผ่านเป็นคำสั่ง

1 + 2 = 3)จะเกิดอะไรขึ้นเมื่อใช้บรรทัดคำสั่งนี้ในโปรแกรมเรียกใช้งานที่เรียกใช้

/bin/bash -c "wait4path /Volumes/Swap/ && /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile"

/bin/bashเป็นโปรแกรมที่จะรัน-cเป็นอาร์กิวเมนต์แรกและสตริงที่ยกมาสองเท่าเป็นอาร์กิวเมนต์ที่สอง

ฉันเดาว่ามันควรจะทำงานได้ดีเหมือนโซลูชันของคุณโดยไม่มีสคริปต์กลาง: launchdจะเริ่มบริการซึ่งจะรอเส้นทางที่กำหนดแล้วเปิดตัวdynamic_pager..

โปรดทราบว่า:
* สตริงที่คุณต้องการเรียกใช้งานควรถูกยกมาสองเท่าหากคุณเรียกใช้bash -cใน Terminal แต่ไม่ใช่การเสนอราคาสองครั้งในไฟล์ plist! (ฉันเดาเพราะมันประกาศแล้วว่าเป็นสตริงที่มีแท็กที่เหมาะสม)
* ทั้งสอง&ในสตริงจะต้องเปลี่ยนเป็น&amp;ในไฟล์ plist

PS: เช่นเคยดำเนินการตามความเสี่ยงของคุณเองฉันจะไม่รับผิดชอบสำหรับปัญหาที่คุณอาจใช้การตั้งค่านี้!

ขอบคุณที่แบ่งปันงานของคุณกับเรา


นั่นเป็นความคิดที่น่าสนใจ ฉันไม่แน่ใจว่ามันเป็น "ถูกกฎหมาย" หรือไม่ที่จะใส่มากกว่าหนึ่งโปรแกรมในProgramArgumentsอาร์เรย์ แต่มันก็คุ้มค่ากับการถ่ายทำแน่นอน คุณลองมันแล้วหรือยัง?
e.James

ขออภัยมีข้อผิดพลาดในโพสต์ก่อนหน้าของฉันความคิดของฉันคือการเรียกใช้บรรทัดคำสั่งต่อไปนี้ (หมายเหตุ && ที่หายไป): wait4path / Volumes / Swap / && / sbin / dynamic_pager -F /Volumes/Swap/.vm/swapfile หากมีคนหาวิธี "จัดรูปแบบ" บรรทัดนั้นเพื่อที่ launchd จะชอบฉันคิดว่ามันควรจะทำงาน (ฉันกำลังคิดเกี่ยวกับมันอาจจะเรียก / bin / bash ผ่านส่วนที่เหลือเป็นอาร์กิวเมนต์?); คำอธิบายเพิ่มเติมเกี่ยวกับฟิลด์โปรแกรมและ ProgramArguments มีอยู่ใน launchd.plist manpage ซึ่งจะนำไปสู่ ​​execvp (3) manpage ฉันอ่านและคิดว่าถ้ามีคนโพสต์โปรดได้เร็วขึ้น :)
EKL

ฉันแก้ไขโพสต์ก่อนหน้านี้ด้วยวิธีแก้ปัญหาที่ควรใช้งานได้โปรดแสดงความคิดเห็นหากคุณเห็นข้อผิดพลาดชนิดใดหรือสิ่งใดที่อาจทำงานไม่ถูกต้องขอบคุณ!
ekl

ฉันลองใช้แล็ปท็อปของฉันและดูเหมือนว่าจะใช้งานได้ ฉันจะจับตาดูมันสักสองสามวันเพื่อให้แน่ใจ แต่ดูเหมือนว่าคุณทำให้กระบวนการทั้งหมดง่ายขึ้นอย่างมาก! การทำงานที่ดี:)
e.James

วิธีการที่เรียบง่ายของคุณทำงานได้อย่างมีเสน่ห์บนแลปท็อป ขอขอบคุณ! ฉันจะอัปเดตคำถามหลักเพื่อรวมโซลูชันของคุณ
e.James

2

ฉันรู้ว่าไม่นานหลังจากบทความนี้ถูกเขียนขึ้น แต่ฉันคิดว่าฉันจะเพิ่มรายการเล็ก ๆ ของฉันลงที่นี่สำหรับผู้ที่ต้องการทำเช่นนี้ ...

ฉันได้ใช้เคล็ดลับข้างต้นเพื่อย้ายไฟล์ swap ของฉันออกไปยังไดรฟ์ภายในอื่น (ไดรฟ์บูตของฉันคือ SSD ที่มีชิป MLC ดังนั้นการย้าย vm off สามารถประหยัดอายุขัยได้) อย่างไรก็ตามหลังจากสร้างโวลุ่มใหม่แล้วฉันมีวอลลุ่มสลับใน Finder ที่ฉันจะไม่ใช้ใน Finder เองดังนั้นฉันจึงตัดสินใจทำให้วอลลุ่มมองไม่เห็น Finder คุณต้องติดตั้ง Developer Toolkit ของ Apple จากนั้นพิมพ์:

/Developer/Tools/SetFile -a V /Volumes/Swap/

…และแทนที่ / Volumes / Swap ด้วยสิ่งที่คุณตั้งชื่อเสียงของคุณ รีสตาร์ท Finder และ presto ไม่ต้องเพิ่มวอลลุ่มใน Finder!


1

คุณสามารถใช้ wait4path เพื่อรอปรับระดับเสียง มิฉะนั้น launchd จะรีสตาร์ทสคริปต์ dynamic_pager_init ของคุณซ้ำแล้วซ้ำอีกจนกว่าจะมี ...


ยอดเยี่ยม! ฉันใช้wait4pathแทนชุดค่าผสมif/ grepและสิ่งนี้ทำความสะอาดได้ค่อนข้างดี ขอบคุณสำหรับเคล็ดลับ
e.James

1

บางทีเราสามารถใช้ Xupport เพื่อทำสิ่งสกปรกให้เรา :) http://www.applicorn.com/

เครื่องมือเพิ่มประสิทธิภาพหน่วยความจำเสมือน:

เปลี่ยนตำแหน่งไฟล์สลับใน Mac OS X ข้อมูลหน่วยความจำเสมือนจะถูกเก็บไว้ใน "Swapfiles" เนื่องจาก swapfiles เป็นไฟล์ระบบที่มีการโต้ตอบกันมากที่สุดจึงควรใส่ไว้ในพาร์ติชันแยกต่างหาก แนะนำให้เก็บไฟล์ swap ไว้ในพาร์ติชั่นแรกของฮาร์ดดิสก์ภายในที่เร็วที่สุด ขนาดพาร์ติชั่นขั้นต่ำที่แนะนำควรมีขนาดประมาณ 3 หรือ 4 เท่าของเบียร์มากกว่าขนาดหน่วยความจำภายใน (เช่นหน่วยความจำกายภาพ 1 GB = 4 GB สลับพาร์ติชั่น) คำแนะนำและคำแนะนำสำหรับประสิทธิภาพของระบบที่ดีที่สุด:

1. แบ่งพาร์ติชันฮาร์ดดิสก์ของคุณใหม่ด้วยโวลุ่มการสลับเป็นพาร์ติชันแรก (โดยใช้ DVD ติดตั้ง Mac OS X) คำเตือน: การแบ่งพาร์ติชั่นซ้ำอีกครั้งจะเพิ่มข้อมูลที่มีอยู่ทั้งหมด!

2. กู้คืนข้อมูลระบบของคุณหรือติดตั้งระบบใหม่บนพาร์ติชันระบบ

3. บูตจากพาร์ติชันระบบ

4. หากคุณต้องการให้ปริมาณการแลกเปลี่ยนของคุณไม่ปรากฏใน Finder: •เรียกใช้ Xupport และเลือก "การตั้งค่า" •เปิดใช้งาน "แสดงไฟล์และโฟลเดอร์ที่ซ่อนอยู่" แล้วรีสตาร์ท Finder •เปลี่ยนชื่อปริมาณการแลกเปลี่ยนจาก "swap" เป็น ".swap" (จุดทำให้มองไม่เห็นใน Finder) •ปิดการใช้งาน "แสดงไฟล์และโฟลเดอร์ที่ซ่อนอยู่" และรีสตาร์ท Finder อีกครั้ง

5. เลือกพาร์ติชัน swap ใหม่ภายใต้ "Swap Storage Volume" จากนั้นกดปุ่ม "ตั้งค่า" เพื่อใช้การตั้งค่าตำแหน่งไฟล์สลับใหม่ (จำเป็นต้องรีสตาร์ท)

BTW มันใช้งานได้สำหรับฉัน Snow Leopard 10.6.2 @ Macbook Pro 2.4GHz, 4GB Ram, 500GB HD


ดูมีแนวโน้ม ขอบคุณสำหรับลิงค์และคำแนะนำโดยละเอียด!
e.James


1

นี่น่าจะเป็นคำตอบที่ไม่ต้องการมากที่สุด (เนื่องจากฉันไม่สามารถแสดงความคิดเห็นได้หลังจาก Diago) แต่ทำไมคุณถึงยืนยันอย่างแท้จริงว่าสิ่งนี้จะเพิ่มประสิทธิภาพการทำงานเล็กน้อย ฉันได้ผ่านการอภิปรายในฟอรัมของ Appleและข้อสรุปคือว่านี่ไม่ใช่ความคิดที่ดีเลย และฉันก็ทนต่อการละทิ้งมันได้มาก คุณช่วยหาข้อมูลที่พิสูจน์ได้ว่าอย่างน้อยที่สุดสำหรับตัวคุณเองหรือเป็นเพียง "ความรู้สึก"?

ทุกครั้งที่ฉันใช้ swap แม้กระทั่งบน linux ย้อนกลับไปเมื่อ 10 ปีที่แล้วและทุกวันนี้บน Ubuntu ฉันไม่เคยเห็นการปรับปรุงประสิทธิภาพเลย เหตุผลของฉันที่ต้องการคือเพื่อป้องกันปัญหาเกี่ยวกับพื้นที่ว่างบน OSX และบน linux สำหรับความสามารถในการจำศีล นั่นคือการแลกเปลี่ยนทั้งหมดสำหรับฉัน

แต่ฉันไม่เคยทำการวิจัยเชิงลึกมากขึ้นไม่ว่าจะด้วยตัวเองหรือในการทำ interwebs


นั่นเป็นการวิจารณ์ที่ถูกต้อง ฉันไม่มีข้อมูลที่จะสนับสนุนคำกล่าวอ้างของฉัน :)
e.James

เย็น. ดังนั้นในที่สุดคุณอาจยอมแพ้ต่อปัญหาทั้งหมดนี้เช่นกัน! : P
cregox

1

นี่ไม่ใช่คำตอบ แต่อาจเป็นอาหารเสริมที่มีประโยชน์มาก แอปเปิ้ลให้แก้ไข plist ฟรีที่นี่PlistEdit Pro ช่วยให้คุณสามารถแก้ไขไฟล์เหล่านี้ได้อย่างปลอดภัย ดูเหมือนว่าคุณสามารถเปลี่ยนอาร์กิวเมนต์ด้วยค่า/ private / var / vm / swapfileเป็นอย่างเช่น/ Volumes / OtherDrive / vm / myswapfilenameเพื่อย้ายไฟล์ swap ที่อื่น ...

อีกครั้งฉันยังไม่ได้ทดสอบสิ่งนี้ ...


มันเป็นความคิดที่ดีและสิ่งแรกที่ฉันเริ่มเมื่อฉันลงเส้นทางนี้ ปัญหาคือว่าพาร์ติชัน swap ไม่ได้ติดตั้ง ณ จุดเวลาเสมอเมื่อมีการเปิดตัวเพจเจอร์แบบไดนามิก ดูหมายเหตุ # 1 ในคำถามสำหรับรายละเอียดเกี่ยวกับสิ่งที่ฉันหมายถึง
e.James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.