Monday, February 13, 2012

vSphere 5 Memory Management Fundamental

สวัสดีครับ
       ห่างหายกันไปนานมากกนะคับ  พอดีผมติดธุระโน่นนี่  จนลืมกลับมาเขียน  blog
      วันนี้ผมอยากจะมาพูดเกี่ยวกับ การบริหารจัดการ memory ของvSphere 5  เนื่องจากยังมีหลายคนที่เข้าใจผิด และสับสนอยู่ 

       ในเวอชั่น 5 นั้น   ESXi จะใช้ทั้งหมด 5 วิธีด้วยกันในการจัดการและบริหาร Memory
        1. TPS (Transparent Page Sharing)
        2.Ballooning
        3.Memory Compression
        4.Hyperisor Swapping
        5.Swap to SSD  ( New in vSphere 5)
       แต่ก่อนที่ผมจะเริ่มอธิบายแต่ละอันนั้น  ผมขอปูพื้นนิดนึงเกี่ยวกับ Layer ของ memory ในโลก virtualize  นิดนึงครับ
       Virtualization นั้นจะแบ่ง memory เป็น 3 Layer ด้วยกันคือ
       Virtual memory     ,Physical Memory  และ Machine Memory 
       หรือ ถ้าจะมองให้ง่ายขึ้นตามการใช้งาน

       หลายๆคนคงรู้จัก Virtual และ Physical memory เป็นอย่างดี  แต่ อะไรคือ  Machine memory ละ
       Machine memory คือ  memory ที่เครื่องใช้จริงๆ (Hardware)  หรือ Memory  ที่  ESXi  บริหารจัดการนั้นเอง เนื่องจาก  OS /VM  นั้นไม่มีสิทธิ์ในการจัดการ Memory  ดังนั้นการ allocate memory ให้กับ VM จึงเป็นหน้าที่ของ Hypervisor
            VM ที่รันอยู่บน Hypervisor (ESXi) นั้นก็เปรียบเสมือน Application ที่รันอยู่บน OS  นั่นเอง เพียง  แต่สำหรับ  VM นั้น จะเข้าใจว่าตัวเองนั้นถือครอง memory ทั้งหมดที่เห็น  (ที่เราconfigure ไว้ตอนที่สร้าง VM) โดยไม่รู้ตัวเลยว่า ตัวเองนั้น รันอยู่บน ESXi อีกทีหนึ่ง
         
            ดังนั้นปัญหาแรกที่เจอเลยคือ  ถ้าผมจะรัน VM  5 เครื่อง  โดยมี memory เครื่องละ 4 GB  ก็ต้องใช้ ESXi ที่มี memory ขั้นต่ำ 20 GB ซึ่งการจัดสรร memory แบบนี้นั้น ดูไม่ค่อยมีประสิทธิภาพเท่าไหร่  เนื่องจาก บาง VM อาจจะใช้จริงๆแค่ 2 GB เท่านั้น  แต่เราต้อง allocate ไปให้ทั้ง 4 GB
             ปัญหาที่สองต่อมาก็คือ  เวลาที่ OS  บน VM  มีการ free memory ขึ้นมา  อาทิเช่น  App ถูกปิดการใช้งานเป็นต้น   Hypervisor นั้นจะไม่รู้เลยว่า OS ได้ free memory  ในส่วนนั้นไปแล้ว  เนื่องจากในมุมมองของ Hypervisor   ไม่ได้รู้ว่า  App ไหนถูก close ไปบ้าง    ทำให้Hypervisorไม่สามารถเรียก memory ที่ free นั้นกลับมาใช้งานใหม่ได้   (memory ในส่วนที่ free  ก็ยังคงถูก OS จองไว้ )
            เพื่อจัดการกับปัญหาทั้งสองข้อข้างต้น     TPS  และ  Ballooning จึงถูกนำมาใช้งานเพื่อแก้ไขปัญหา ตามลำดับ
           
            TPS (Transparent page sharing) คือ การแชร์ memory ครับ   memory ในส่วนไหนซ้ำกัน แทนที่จะเก็บไว้ทั้งสองค่า  ก็จะยุบเหลือค่าเดียวเพื่อประหยัด memory    วิธีนี้จะทำให้เราสามารถใช้ memory ได้มากกว่าที่ควรจะเป็นได้ ดังนั้น จากเดิม  ESXi เรามี memory 20 GB รันได้ 5 VM  (VM ละ 4GB) เราอาจจะรันได้ 5-8 VM เลยทีเดียว  โดยทั้งนี้ขึ้นอยูกับว่า VM นั้นเป็น OS เดียวกันหรือไม่  ยิ่งถ้า patch ใกล้กันเท่าไหร่  ก็จะมีส่วนที่ซ้ำ ซึ่งสามารถนำมาแชร์ได้มากเท่านั้น
             เพิ่มเติมได้ที่นี่ Transparent Page Sharing
      
            Ballooning  คือวิธีการดึงmemory ในส่วนที่  OS จองไว้  แต่ไม่ได้มีการใช้งาน(Free)  นำกลับมาใช้งาน    
             
            โดยปกติแล้ว  Guest OS  นั้นจะไม่รู้สึกเลยว่าตัวเองนั้น โดน virtualize อยู่ ดังนั้นเมื่อเราทำการ Power On Guest OS  นั้นขึ้นมา   OS จะทำการกิน memory ไปเท่ากับที่เราคอนฟิกไว้  เนื่องจากคิดว่าตัวเองนั้นถือครอง  Hw ทั้งหมดเสมือน ว่ารันเป็นแบบ Physical machine  แต่ในความเป็นจริงแล้ว  Guest OS  นั้น ไม่ได้ใช้ memory ทั้งหมดเท่าที่ตัวเองกินไป  อาจจะใช้  memory ไปแค่ครึ่งเดียวเท่านั้น    
           หน้าที่ของ Ballooning  ก็คือการนำเอา memory ที่ Guest OS ไม่ได้ใช้นั้น ไปให้กับ  Guest OS ตัวอื่นๆที่ต้องการใช้  
           Q:แล้วเราจะสามารถนำ free memory ในส่วนนี้ไปใช้ได้อย่างไร  เนื่องจาก Guest OS  นั้นครองครองอยู่   ????
          VMware  ใช้หลักการง่ายๆครับ  โดยไปบีบให้ Guest OS นั้นคาย memory ที่ free นั้นออกมาเอง อาศัยหลักการของบอลลูน   คือตอนที่เราลง VMware tools   จะมี   balloon driver  ตัวนึงที่ติดลงไปด้วย
        Ballooning ---   Hypervisor(ESXi) จะสั่งให้ balloon driver  เริ่มกิน memory บน Guest ไปขนาดหนึ่ง ส่งผลให้ Guest นั้นต้องทำการ  allocate memory ให้กับ balloon driver   (ไม่ต้องห่วงครับ จะกินไม่เกิน 65% ของ Guest memory) หลังจากนั้น balloon driver  จะรายงานไปยัง ESXi  ถึง memory page ที่ตัวเองได้ครองครองไว้    ซึ่ง ESXi  จะนำmemory ในส่วนนี้  นำไปให้กับ  Guest อื่นๆ ต่อไป 
        Inflating    ---    จะตรงกันข้ามกับกระบวนการแรก  กล่าวคือ   balloon driver จะทำการคาย memory ออกไป เป็นการคืน memory กลับไปให้ Guest
        
      Note: 1. เนื่องจาก  memory ที่ balloon driver นั้นถือครองไปนั้น  Guest  จะไม่สามารถนำไปใช้งานอย่างอื่นได้  (โดน lock)  เราจึงสามารถนำ memory ในส่วนนี้ไปให้กับ Guest เครื่องอื่นๆได้
                2.  Ballooning นั้นไม่ได้ทำให้ Guest  เกิดการ  swapping เสมอไปนะครับ  หลายคนเข้าใจผิดในส่วนนี้   ผมขอยกตัวอย่างดังนี้   สมมติ Guest นั้นมี  free memory 2 GB  , balloon driver  กินmemory ไปเพียง 1 GB   Guest จะไม่ทำการ swap นะครับ  เนื่องจาก ยังมี memory เหลือใช้งานอีก 1 GB
แต่ถ้า balloon กินไป 2 GB  Guest จะเริ่มทำการ swap memory ในส่วนที่ไม่ active หรือไม่จำเป็นออกไปเก็บไว้บน disk   ซึ่ง balloon driver จะกิน memory มากหรือ น้อยนั้น ขึ้นอยู่กับว่า physical memory นั้นมีเหลือเพียงพอสำหรับ รัน VM หรือไม่   Balloon จะเป็นตัวบ่งบอกว่า Host ของคุณนั้น เริ่มมีการขาดแคลน memory   อาทิเช่น  รัน VM มากเกินไปกว่าที่ เครื่องจะรองรับได้


        Memory Compression  จะเกิดขึ้นหลังจากที่ ESXi  ได้ทำ  TPS และ Ballooning แล้ว แต่ระบบนั้นต้องการใช้ memory มากขึ้น  แต่ ESXi นั้นไม่มี memory เหลือพอให้ใช้แล้ว  ESXi จะเริ่มทำการ compress  memory page  เพื่อทำการ free memory   
หลักการคือ   ถ้าคำนวนแล้ว สามารถที่จะบีบอัดข้อมูลชุดนั้นๆได้ มากกว่าหรือเท่ากับ 50%  ระบบจะทำการบีบอัด memory page นั้นๆ   แต่ถ้าไม่ถึง  จะไม่ทำการบีบอัดครับ  ดังนั้นสำหรับ  memory page ขนาด 4KB   ถ้าบีบอัดแล้วลดลงได้เหลือ 2KB ระบบจะทำการบีบอัดทันที   
ดังนั้น 4KB   สองอัน ก็จะเหลือแค่ หนึ่งอัน  เราก็จะได้ memory free กลับมา 4KB
       Note:  การทำแบบนี้ส่งผลกระทบต่อ  performance แน่นอนครับ เพราะระบบจะต้องเสียเวลาในการ   compress / decompress memory   แต่ performance    ก็ยังดีกว่า การ swap ลง disk  อยู่ค่อนข้างมาก

       Hypervisor(Host) Swapping    อันนี้ตรงไปตรงมาครับ คือการ  swap memory  ลงไปยัง disk  หรือลงไปบน Datastore  นั่นเอง  ซึ่งจะได้ performance ที่ค่อนข้างแย่ 
      Note:  ถ้าลอง  Browse Datastore ดู จะเห็นไฟล์นามสกุล  .vswp  (swap ไฟล์ สำหรับแต่ละ VM )  ซึ่งจะมีขนาดเท่ากับ memory ที่เราคอนฟิกไว้ให้กับ Guest    แต่ ไฟล์นี้จะปรากฏขึ้นมาต่อเมื่อ  VM  power on   และจะหายไปเมื่อเรา power off เครื่อง  หลายคนลืมคิดถึงตรงนี้ส่งผลให้  Datastore ที่เก็บ VM นั้นเต็ม  คิดดูดีๆนะคับ  ถ้าเราคอนฟิก memory VM ไว้ 16 GB  swap ไฟล์ก็จะกินพื้นที่บน Datastore  ไป 16GB นะครับ  แล้วถ้าเกิดพื้นที่ไม่พอขึ้นมา  เราจะไม่สามารถเปิด VM  ขึ้นมาได้ เนื่องจากไม่มีพื้นที่พอที่จะสร้าง swap file ครับ  
     ในกรณีที่ มีการ reserve memory ไว้ให้กับ VM   ขนาดของ swap file = configure mem -mem reserve
      
      Swap to SSD (vSphere 5)  เป็นลูกเล่นใหม่ ที่นำมาใช้แก้ปัญหาของการ Swap to disk (Host swap)  โดยทำการ  swap ไปยัง SSD แทน ซึ่งมี speed , response time ที่ดีกว่า diskแบบหมุนมาก
       
        
   หวังว่าคงเข้าใจเรื่อง memory  มากขึ้นนะครับ  แล้วพบกันครับ
   
      
      


   

2 comments:

  1. ต้องการติดตั้ง FreeBSD & Authen ผมติดตั้งเสร็จแล้ว ทำงานได้

    ปัญหา คือ เครื่องลูกข่าย ต่อสายแลนใบที่ 2 ของ VMWARE Esxi5.1
    แล้วไม่ได้รับไอพี
    เข้าใจว่า ผมยังไม่ได้ตั้งค่า การเชื่อมต่อ Network Card
    พยายามหาจากเน็ต ก้ยังไม่ได้คำตอบ

    จึงค้นเจอเว็บไวต์ท่านครับ จึงใคร่ ขอความช่วยเหลือ ขั้นตอนการตั้งค่า
    Network อนุญาตให้ลูกข่ายรับ IP จาก Server VM Esxi5.1 โดยให้รับจาก LAN
    ใบที่ 2 ครับ (ใบแรกต่อจากเราเตอร์ ออกเน็ตได้ปกติ)

    ขอเป็นขั้นตอน ได้ไหมครับ ว่าคลิก เมนู อะไร ทำอย่างไร การสร้าง
    vSwicth และการเชื่อมต่อขอขอบพระคุณมากเลยครับ

    ด้วยความนับถืออย่างสูง

    kroonis4@gmail.com

    ReplyDelete
  2. ขออนุญาตฝากลิงค์นะคะ
    พบกับเกมส์คาสิโนออนไลน์ อาทิ ไพ่บาคาร่า, รูเล็ต, มังกรเสือ, กำถั่ว
    สมัครเปิดบัญชีแรกเข้า ขั้นต่ำ 500 บาท ที่นี่เลยค่ะ
    https://www.111player.com

    ReplyDelete