Tips: จัดการแรมบน OS X

mac-pro-ram

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

คนที่เคยใช้ Windows มาก่อน อาจจะชอบที่ได้เห็นพื้นที่แรมเหลือเยอะๆ ซึ่งเมื่อมาใช้ OS X ซึ่งเป็น UNIX ก็ต้องปรับตัวกันใหม่ทั้งหมด เพราะว่าวิธีจัดการแรมจะต่างกับ Windows โดยสิ้นเชิง

ส่วนนี้ จะเป็นเนื้อหาทางด้านเทคนิคจัดๆ นะครับ ถ้าใครไม่อยากอ่าน scroll ลงไปตรงสรุปได้เลย

หน่วยความจำของ OS X นั้นแบ่งได้ดังนี้

  • Main (Real Memory) – แรมนั่นเอง ซึ่งจะอยู่บนเมนบอร์ด และเมื่อพูดถึงหน่วยความจำทุกคนก็จะนึกถึงแรม
  • File System – ที่เก็บข้อมูลที่เข้าถึงได้ด้วยเส้นทางที่บอกไปยังแฟ้มเก็บข้อมูล (pathname) ซึ่งตรงนี้จะไม่รวม raw device, tape drive, swap space หรือที่เก็บข้อมูลอื่นที่ไม่สามารถเข้าถึงได้ด้วย pathname
  • Swap Space – ส่วนที่เก็บข้อมูลที่ไม่ได้อยู่ใน Real Memory และ File System ซึ่ง Swap Space จะมีประสิทธิภาพมากถ้าอยู่ในพาร์ทิชั่นอื่นหรือดิสก์อื่น

การใช้งานหน่วยความจำของ OS X แบ่งได้ดังนี้

  • Kernel – เป็นส่วนของ OS เต็มๆ โดยส่วนนี้จะอยู่ใน real memory
  • Cache – real memory ที่เก็บส่วนประกอบของ File System และการจัดการเข้าออกข้อมูลอื่นๆ ซึ่งตรงนี้ไม่ใช่ CPU cache หรือ disk drive cache นะครับ พวกนั้นจะไม่ได้อยู่ใน real memory
  • Virtual – ส่วนหน่วยความจำว่างที่อนุญาตให้ทุก process ที่รันบนเครื่องนั้นเข้าถึงได้​ แบ่งออกเป็น 3 แบบ
    • Data – หน่วยความจำที่ถูกจองและใช้โดยโปรแกรมต่างๆ ผ่าน malloc, new ซึ่งส่วนนี้เรียกอีกอย่างว่า heap
    • Stack – เป็นส่วน stack ที่ไว้รันงานของโปรแกรม ควบคุมโดย OS
    • Mapped – คอนเทนต์ของไฟล์ที่สามารถเข้าถึงได้ด้วย process ในส่วน memory space

Virtual Memory นั้นจะถูกแบ่งออกเป็นส่วนๆ เรียกว่า page มีได้หลายขนาดตามระบบปฏิบัติการ แต่ส่วนมากมักแบ่ง 4096 หรือ 8192 ไบต์ ตัวจัดการแรมจะมอง page เป็นส่วนที่แยกออกไม่ได้ เพื่อประสิทธิภาพที่ดี page ที่ใช้งานต้องอยู่บน real memory แต่เมื่อ page ไม่ได้ถูกใช้แล้วก็ไม่จำเป็นที่เราจะต้องรู้ว่า page นั้นอยู่ที่ไหน

การย้าย page บางส่วนออกจาก real memory และเอา page อื่นเข้ามา เรียกว่า swapping ส่วน page fault จะเกิดขึ้นเมื่อ CPU จะเข้าถึง page ที่ไม่ได้อยู่ใน real memory ซึ่งทำให้ CPU ต้องรอจนกว่า page จะ swap เข้ามา ซึ่งกระบวนการตรงนี้จะเสียเวลานาน (เพราะเราไม่รู้ว่า page อยู่ตรงไหน โดยเฉพาะถ้า page อยู่ในดิสก์จะยิ่งนาน เพราะการเขียนอ่านข้อมูลจากดิสก์ใช้เวลานานมาก) ทำให้ประสิทธิภาพของเครื่องลดลงมาก ดังนั้นจุดประสงค์ของการจัดการหน่วยความจำคือต้องทำให้ page fault น้อยที่สุด

หากมี process รันเยอะและใช้แรมมากเกินไปจนแรมหมด จะมีการ thrashing หรือการเขียนข้อมูลจากแรมลงดิสก์ แต่หากแรมเหลือจาก virtual memory ที่จองไว้ OS X จะเก็บไว้ส่วนที่เหลือเอาไว้แคชไฟล์เก่าๆ ที่เพิ่งปิดไป ทำให้ไม่มีความจำเป็นที่จะต้องเรียกไฟล์จากดิสก์อีกที

ข้อมูลจาก UNIX Tips

สรุป

แรมของ OS X ที่เห็นเต็มๆ ไม่มีค่อยจะมีพื้นที่ว่าง เกิดจากเมื่อเราปิดโปรแกรมแล้ว OS X จะแคชไฟล์ทิ้งไว้ในแรมก่อน ยังไม่ลบทิ้ง (รวมถึง OS X สมัยใหม่จะยิ่งจัดการส่วนนี้ได้ดีขึ้น คือบีบอัดข้อมูลที่ถูกแคชไว้ในแรมเพื่อให้มีพื้นที่เพิ่มขึ้นได้ด้วย) จึงสามารถเปิดโปรแกรมที่เพิ่งปิดได้อย่างรวดเร็ว แต่หากพื้นที่ส่วนนี้ไม่ถูกเรียกใช้อีก และมีโปรแกรมอื่นเข้ามาก็จะถูกลบทิ้งทันที

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

โปรแกรมจัดการแรมทั้งหลายไม่มีส่วนสำคัญทำให้เครื่องเร็วขึ้นอย่างเห็นได้ชัด (แถมการลบข้อมูลที่จำเป็นต้องใช้ในอนาคตออกจากแรม มีแต่จะทำให้เครื่องช้าลงด้วยซ้ำ) สิ่งจำเป็นอย่างเดียวคือ Activity Monitor ซึ่งเป็นโปรแกรมที่ติดมากับ Mac ทุกเครื่อง สำหรับการดูและสั่งปิด process ที่ผิดปกติและกินแรมเกินไป

เพิ่มเติม

  • การเช็คว่าแรมที่มีปัจจุบันพอใช้หรือยัง เปิด Finder กด Command + Shift + G และพิมพ์ /var/vm กด Enter หากมีไฟล์มากกว่า swapfile0 แสดงว่าแรมหมดตั้งแต่การรีบู๊ตครั้งล่าสุด หากพบเหตุการณ์แบบนี้บ่อยๆ หมายความว่าถึงเวลาเพิ่มแรมแล้ว
  • kernel_task เป็น process หลักของระบบ หากกินแรมมากถือเป็นเรื่องปกติ เพราะ kernel_task จะกินแรมเพิ่มขึ้นเรื่อยๆ ตามจำนวน process ที่เพิ่มขึ้น
  • การเพิ่มแรม ถึงแม้ระบบ OS X จะเป็น 64-bit ที่รองรับแรมมากถึง 2^64 ไบต์ ตามทฤษฎีที่ระบบปฏิบัติการจะรองรับได้ แต่ในทางปฏิบัติ แรมจะต้องผ่าน controller ของเมนบอร์ดก่อน โดยจะมีความแตกต่างกันในแต่ละรุ่น ฉะนั้นก่อนเพิ่มแรมต้องศึกษาข้อมูลก่อนว่า Mac ของเรารองรับแรมสูงสุดเท่าไร

เรียบเรียงโดย
ทีมงาน​ MacThai