Tech Knowledge

วิธีปรับ MTU 8900 ให้เหมาะสมกับ Machine Type Dedicated และได้ Bitrate ถึง 10 Gbits/s

Published : April 26, 2024Time : 10 min read

MTU คืออะไร?

MTU หรือ Maximum Transmission Unit คือการกำหนดปริมาณข้อมูลที่ใหญ่ที่สุดที่สามารถส่งได้ในแ package เดียวบนเครือข่าย หาก package มีขนาดใหญ่กว่า MTU จะถูกแยกส่วนเป็น package ขนาดเล็กเพื่อส่งผ่านเครือข่าย จากนั้นจะประกอบกลับที่ฝั่งปลายทาง

โดยปกติแล้ว MTU จะถูกกำหนดให้เป็นค่าเริ่มต้นที่เหมาะสมสำหรับระบบเครือข่าย โดยระบุขนาดเป็น 1500 byte แต่ในบางเทคโนโลยีสามารถใช้ขนาด MTU ถึง 8900 byte


MTU มีประโยชน์อย่างไร?

การส่งข้อมูลที่มีขนาดใหญ่ใน package ขนาดเล็ก จำเป็นจะต้องกระจายข้อมูลหลาย package ส่งผลให้เกิดความล่าช้า และประสิทธิภาพของการส่งข้อมูลลดลง ดังนั้นขนาดของ package ที่ใหญ่ขึ้น ส่งผลให้สามารถรับส่งข้อมูลมากขึ้นในการเชื่อมต่อเพียงครั้งเดียว ซึ่งสามารถลดความล่าช้า, ลดค่าใช้จ่ายจากการลดการประมวลผล package จำนวนมากของอุปกรณ์ และยังเพิ่มประสิทธิภาพของการส่งข้อมูล


ตั้งค่า MTU ให้เหมาะสมอย่างไร?

การปรับแต่งขนาดของ Maximum Transmission Unit (MTU) จำเป็นต้องตรวจสอบการกระจาย package ตลอดเส้นทางของเครือข่าย ซึ่งการส่งข้อมูลระหว่างต้นทางไปยังปลายทางอาจจะผ่านหลายอุปกรณ์เช่น switch, router หากข้อมูลมีขนาดใหญ่กว่า MTU ของอุปกรณ์ ก็จะเกิดการกระจายข้อมูล (fragmentation) ลง package เราจึงควรทราบค่า MTU ตลอดของเส้นทางในเครือข่าย และปรับการตั้งค่าของ MTU ให้เหมาะสมที่สุด เพื่อหลีกเลี่ยงการกระจายตัวของ package ให้น้อยที่สุด


วิธีตรวจสอบค่า MTU

ในบทความนี้ จะอธิบายการทดสอบหาค่า MTU ระหว่างต้นทางถึงปลายทางด้วยการใช้ command ping ดังนี้

ping -4 -M do -c 1 -s <mtu value> <destination-ip>

ตัวอย่างผลการทดสอบ

ตัวอย่างข้างต้น คือการทดสอบระหว่าง instance ไปยัง google.com พบว่าค่า MTU 1500 สูงเกินไป เราจึงปรับลดลงและทดสอบใหม่อีกครั้ง

จากภาพด้านบนพบว่าสามารถส่ง package ขนาด 1470 byte ได้ เราจึงประมาณได้ว่าค่า MTU ที่เหมาะสมอยู่ระหว่าง MTU 1470-1500

หากต้องการตรวจสอบอย่างรวดเร็วสามารถใช้ script ทดสอบหาค่า MTU ที่เหมาะสมได้

cat > /root/check-mtu.sh << EOF
#!/bin/bash
#!/bin/bash
destination_ip="\$1"
# Set ค่า mtu เริ่มต้นในการทดสอบ
packet_size=1200
# วนซ้ำเพื่อหาขนาด MTU สูงสุด
while true; do
  ping -4 -M do -c 1 -s \$packet_size \$destination_ip &> /dev/null
  if [ \$? -ne 0 ]; then
    echo "Maximum MTU size: \$((packet_size + 28 - 2))"
    break
  fi
  packet_size=\$((packet_size + 2))
done
EOF

chmod +x /root/check-mtu.sh

#reference : https://www.baeldung.com/linux/maximum-transmission-unit-mtu-ip#using-the-ping-command

ตัวอย่างการใช้งาน script

จากภาพด้านบนแสดง Maximum MTU size: 1500 ที่สามารถใช้งานได้ ดังนั้ นเราจะตั้งค่า MTU บน netplan ในหัวข้อถัดไป


การตั้งค่า MTU บน Ubuntu OS

การปรับการตั้งค่า MTU ควรปรับบน netplan หรือไฟล์ config เนื่องจากหากเกิดการ reboot ค่า MTU ที่ปรับไว้จะถูกโหลดกลับมาใช้งานเหมือนเดิม

ต่อไปจะอธิบายการปรับ MTU ให้เหมาะสมกับสภาพแวดล้อม Machine Type Dedicated ของ NIPA Cloud Space จะเหมาะสำหรับใช้งาน MTU 8900

  1. SSH ไปยัง instance และตรวจสอบ MTU ปัจจุบัน
ip addr 

จากภาพตัวอย่างแสดงค่า MTU ปัจจุบัน 1500


  1. Config MTU บน Netplan สำหรับ Ubuntu (แนะนำให้ใช้งาน MTU 8900 ในสภาพแวดล้อมของ Machine Type Dedicated บน NIPA Cloud Space)

vim /etc/netplan/50-cloud-init.yaml


network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
            mtu: 8900 #เพิ่ม config mtu 8900
            match:
                macaddress: 02:71:5d:36:a2:cb
            set-name: eth0

# และ save config โดย :wq 
# เพื่อให้ config ใช้งานได้ให้ run command
netplan apply

  1. ตรวจสอบโดยใช้ command "ip addr"

จะพบว่า interface eth0 ค่า MTU เปลี่ยนเป็น 8900 เรียบร้อยแล้ว


ตรวจสอบ Bandwidth โดยสามารถใช้ iperf3 เพื่อทดสอบ

การทดสอบ bandwidth จำเป็นต้องเตรียม 2 instance ที่ set ค่า MTU เรียบร้อยแล้วทั้ง Server - Client และ allow security group 5201/tcp


เตรียม Instance สำหรับทดสอบ

  1. สร้าง Instance Ubuntu OS, Machine Type: coa.xlarge.v2 (CPU 4core/ Memory 8GB)

  2. Install iperf3

sudo apt update 

sudo apt -y install iperf3 
  1. ก่อนทดสอบให้ปรับค่า MTU เป็น 1500 (เป็นค่า Default ของ instance) และปรับเป็น 8900 ให้ทดสอบใหม่อีกครั้งจึงจะพบความแตกต่าง

ขั้นตอนการทดสอบ

Instance เครื่องที่ 1 จะมีไว้สำหรับ Server

# iperf3 server (instance #1)
iperf3 -s
iperf3 -s

Instance เครื่องที่ 2 จะไว้สำหรับ Client เพื่อทดสอบ

# iperf3 client (instance #2)
iperf3 -c <ip-address-iperf3-server> -p 5201 -M 8900 -t 300
iperf3 -c <ip-address-iperf3-server> -p 5201 -M 8900 -t 300

# <ip-address-iperf3-server> : ip address ของ instance #1
# -p 5201                    : default port สำหรับทดสอบ iperf3
# -M 8900                    : ค่า mtu ที่ใช้ทดสอบ
# -t 300                     : time สำหรับทดสอบ 300s

ผลการทดสอบ iperf3

ทดสอบก่อนปรับค่า MTU ได้ผลดังนี้ (MTU 1500)

จากรูปทดสอบได้ Bitrate 6.28 Gbits/sec


ทดสอบหลังปรับค่า MTU ได้ผลดังนี้ (MTU 8900)

จากรูปทดสอบได้ Bitrate 9.36 Gbits/sec


สรุป

จากผลการทดสอบนี้ การปรับค่า MTU ส่งผลให้ประสิทธิภาพของการส่งข้อมูลดีขึ้น จะเห็นได้ว่ามี Bitrate ที่เพิ่มสูงขึ้น เนื่องจาก package มีขนาดใหญ่ และลดจำนวน package อีกทั้งยังลดการประมวลผลของอุปกรณ์ภายในเครือข่ายระหว่างต้นทางไปยังปลายทาง

การทดสอบข้างต้นเป็นเพียงการทดสอบระหว่าง instance ภายใน VPC เดียวกัน ซึ่งอาจมีผลต่างออกไป ขึ้นอยู่กับจำนวนของ CPU (แนะนำให้ใช้ CPU 4 core หรือมากกว่า) และอุปกรณ์ network แต่ละประเภท

ทีมงาน NIPA Cloud จึงขอแนะนำให้ลูกค้าที่ใช้งาน Dedicated Machine Type บน NIPA Cloud Space ปรับค่า MTU เป็น 8900 เพื่อประสิทธิภาพของการส่งข้อมูลที่ดีขึ้น


Reference: ข้อมูลสำหรับศึกษาเพิ่มเติมเกี่ยวกับ MTU (Maximum Transmission Unit)

What's is MTU : https://www.cloudflare.com/learning/network-layer/what-is-mtu/

Finding MTU Between Localhost and Destination IP : https://www.baeldung.com/linux/maximum-transmission-unit-mtu-ip#using-the-ping-command


AUTHOR
Author
Watanyu Chuaysri
System Engineer