Το προφίλ μας στο Google Plus
1

Μετρήσεις δικτυακής ταχύτητας και τα οφέλη του VirtIO

Τις προάλλες παίξαμε λίγο με το iperf3, ένα εργαλείο για την ακριβή μέτρηση της ταχύτητας δικτυακής επικοινωνίας μεταξύ διαφορετικών hosts. Επιπρόσθετα, διαπιστώσαμε πόσο πολύ βελτιώνονται οι δικτυακές επιδόσεις των KVM VMs, όταν για τις εικονικές κάρτες Ethernet χρησιμοποιείται ο οδηγός VirtIO.

Το iperf δημιουργεί TCP ή UDP data streams μεταξύ δύο hosts κι έτσι μετρά τη ροή δεδομένων που είναι δυνατόν να υφίσταται μεταξύ τους. Το δε iperf3 αποτελεί νεότερη εκδοχή του κλασικού iperf κι έχει γραφτεί από την αρχή, ώστε ο κώδικάς του να είναι πιο καθαρός κι απλός σε σύγκριση μ’ εκείνον του iperf. Ο πηγαίος κώδικας του iperf3 καλύπτεται από την three-clause BSD license, ενώ binaries διατίθενται σχεδόν για κάθε λειτουργικό σύστημα. Αν χρησιμοποιείτε Linux, το πιθανότερο είναι να υπάρχει αντίστοιχο πακέτο στα repositories της διανομής σας.

Προκειμένου να μετρήσουμε την ταχύτητα που υφίσταται μεταξύ δύο hosts, στον έναν τρέχουμε το iperf3 ως server και στον άλλον το τρέχουμε ως client. Εμείς, π.χ., επιθυμώντας να μετρήσουμε την ταχύτητα μεταξύ ενός PC με openSUSE Leap 42.1 κι ενός MacBook Pro με OS X El Capitan, ξεκινήσαμε από το PC εγκαθιστώντας το iperf3 ως ακολούθως:

<br />
cvar@thehost:~&gt; sudo zypper ref<br />
cvar@thehost:~&gt; sudo zypper in iperf<br />

(Στο openSUSE, το πακέτο ονόματι iperf περιλαμβάνει το iperf3.) Αμέσως μετά, δώσαμε:

<br />
cvar@thehost:~&gt; iperf3 -s -p 14925<br />

Εξ ορισμού το iperf3 δουλεύει με TCP streams. Με την παράμετρο -s του είπαμε να λειτουργήσει ως server και με την παράμετρο -p να ακούει για συνδέσεις από το port 14925/TCP. Εννοείται πως το port δεν πρέπει να εμποδίζεται από κάποιο firewall. Το openSUSE έχει ενεργοποιημένο το firewall, οπότε για να μην πολυσκοτιζόμαστε το απενεργοποιήσαμε προσωρινά:

<br />
cvar@thehost:~&gt; sudo SuSEfirewall2 stop<br />
SuSEfirewall2: Firewall rules unloaded.<br />

Στο MacBook κατεβάσαμε το iperf3 από το https://iperf.fr/iperf-download.php#macos. Αναλυτικότερα, πήραμε ένα ZIP κι αφού το αποσυμπιέσαμε βρεθήκαμε με το αρχείο iperf301. Το καταστήσαμε εκτελέσιμο από ένα παράθυρο του Terminal, πληκτρολογώντας:

<br />
mbpr15:Downloads cvar$ chmod +x iperf301<br />

Στη συνέχεια προχωρήσαμε στη μέτρηση:

<br />
mbpr15:Downloads cvar$ ./iperf301 -t20 -p 14925 -c 192.168.10.245<br />

Με την παράμετρο -t θέσαμε το χρόνο της μέτρησης στα 20 δευτερόλεπτα, με την -p είπαμε στο iperf3 να χρησιμοποιήσει το port 14925/TCP, ενώ με την -c του ζητήσαμε να συμπεριφερθεί ως client. Στο τέλος της γραμμής παραθέσαμε και την αριθμητική διεύθυνση IP του server, μ’ άλλα λόγια το IP του PC με το openSUSE. Δείτε στα screenshots που ακολουθούν τα αποτελέσματα της μέτρησης (διαβάστε και τις αντίστοιχες περιγραφές).

Το iperf3 στο PC με το openSUSE λειτουργεί ως server (παράμετρος -s) και περιμένει για συνδέσεις πελατών από το port 14925/TCP (παράμετρος -p).

Το iperf3 στο PC με το openSUSE λειτουργεί ως server (παράμετρος -s) και περιμένει για συνδέσεις πελατών από το port 14925/TCP (παράμετρος -p).

Από ένα τερματικό στο MacBook Pro τρέχουμε το iperf3 ως client (παράμετρος -c)

Από ένα τερματικό στο MacBook Pro τρέχουμε το iperf3 ως client (παράμετρος -c). Η σύνδεση γίνεται στο port 14925/TCP (παράμετρος -p) του απομακρυσμένου μηχανήματος με IP το 192.168.10.245 (αυτό είναι το PC με το openSUSE). Η ανταλλαγή πακέτων διαρκεί για 20 δευτερόλεπτα (παράμετρος -t). Μετά το πέρας αυτού του χρόνου, η μέση ταχύτητα που μετρήθηκε ήταν τα 329Mbps. Σημειώστε ότι το MacBook Pro συνδεόταν ασύρματα και κατά 802.11ac σε ένα AirPort Extreme access point, το οποίο με τη σειρά του ήταν συνδεδεμένο ενσύρματα σε ένα box με το pfSense. Στο ίδιο box ήταν συνδεδεμένο –επίσης ενσύρματα– και το PC με το openSUSE.

Η ταχύτητα που μετρήσαμε επαληθεύεται κι από το τερματικό του openSUSE PC.

Η ταχύτητα που μετρήσαμε επαληθεύεται κι από το τερματικό του openSUSE PC.

Τα πραγματικά οφέλη του VirtIO driver
Οι συνδρομητές του περιοδικού θα έχετε παρατηρήσει ότι τον τελευταίο καιρό ασχολούμαστε με το virtualization στην πλατφόρμα του KVM (και με host OS το openSUSE). Για την εικονική κάρτα Ethernet των VMs, όποτε μπορούμε προτείνεται να επιλέγουμε τον VirtIO driver. Χάρη στο συγκεκριμένο οδηγό, ο οποίος πρέπει να υποστηρίζεται από το guest OS της εικονικής μηχανής, αντί να εξομοιώνεται μια κάρτα Ethernet, το λειτουργικό του VM αποκτά γρήγορη πρόσβαση στη φυσική κάρτα Ethernet του host computer. Θελήσαμε να ελέγξουμε τη θεωρία στην πράξη, με χρήση του iperf3. Τα αποτελέσματα μας εξέπληξαν — και μας εξέπληξαν ευχάριστα. Δείτε τα screenshots που ακολουθούν και διαβάστε τις αντίστοιχες περιγραφές.

Για την πρώτη μέτρηση που κάναμε είχαμε επιλέξει εξομοίωση κάρτας Ethernet Intel PRO/1000 (e1000).

Στις μετρήσεις μας εμπλέξαμε δύο KVM VMs: ένα που το έχουμε σε ρόλο Dropbox node κι άλλο ένα που εκτελεί χρέη Plex media server. Καθένα από τα VMs τρέχει το Ubuntu Server 14.04 και για τη συγκεκριμένη διανομή παρέχεται υποστήριξη VirtIO. Αντί για τον ομώνυμο οδηγό, όμως, ξεκινήσαμε επιλέγοντας –και για τις δύο εικονικές μηχανές– εξομοίωση της κάρτας δικτύου Intel PRO/1000 (e1000).

Με εξομοίωση της Intel PRO/1000, το iperf3 μάς έδωσε 1,23Gbps. Αναμφισβήτητα, πρόκειται για εντυπωσιακό throughput.

Με εξομοίωση της Intel PRO/1000, το iperf3 μάς έδωσε 1,23Gbps. Αναμφισβήτητα, πρόκειται για εντυπωσιακό throughput.

Αφού κλείσουμε (shutdown) και τις δύο εικονικές μηχανές, τροποποιούμε τη δικτύωση καθεμιάς επιλέγοντας τον οδηγό VirtIO.

Αφού κλείσουμε (shutdown) και τις δύο εικονικές μηχανές, τροποποιούμε τη δικτύωση καθεμιάς επιλέγοντας τον οδηγό VirtIO.

Αυτή τη φορά, με τον οδηγό VirtIO, η ίδια ακριβώς δοκιμή μάς δίνει throughput στα 14,6Gbps. Μ' άλλα λόγια, η επιλογή του VirtIO ενδεκαπλασιάζει το throughput! Συμπέρασμα: Αν για το guest OS του VM παρέχονται οδηγοί VirtIO, τότε διπλοελέγχουμε ώστε η δικτύωση της μηχανής να επιτυγχάνεται μέσω του ομώνυμου driver.

Αυτή τη φορά, με τον οδηγό VirtIO, η ίδια ακριβώς δοκιμή μάς δίνει throughput στα 14,6Gbps. Μ’ άλλα λόγια, η επιλογή του VirtIO ενδεκαπλασιάζει το throughput! Συμπέρασμα: Αν για το guest OS του VM παρέχονται οδηγοί VirtIO, τότε διπλοελέγχουμε ώστε η δικτύωση της μηχανής να επιτυγχάνεται μέσω του ομώνυμου driver.

One Response to “Μετρήσεις δικτυακής ταχύτητας και τα οφέλη του VirtIO”

  1. Neroubas | 04/02/2016 at 17:31

    Είναι ορθότερο νομίζω για την μέτρηση του throughput να χρησιμοποιείται σύνδεση UDP και όχι TCP καθώς έχει καλύτερο bandwith allocation από το TCP λόγο μικρότερων header.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων