Bekerja dengan Onload
Halaman ini menjelaskan cara menggunakan Onload dengan instance Compute Engine U4.
Tentang Onload
Onload adalah stack jaringan berperforma tinggi untuk aplikasi yang sensitif terhadap latensi dan memerlukan latensi ultra-rendah, jitter minimal, dan performa yang konsisten. Onload menyediakan penerapan TCP/IP yang mengabaikan kernel sistem operasi dan berjalan langsung di ruang pengguna sekaligus memungkinkan aplikasi menggunakan API soket BSD standar.
Penggunaan Onload dengan Solusi ULL mencakup dukungan untuk hal berikut:
- Pengarahan alur: Anda dapat melewati hashing Receive Side Scaling (RSS) default dengan mengarahkan alur traffic tertentu langsung ke Receive Queue (RX) yang ditentukan. Pengarahan aliran 3 tuple didukung (protokol, alamat IP tujuan, port tujuan).
Sebelum memulai
Sebelum menggunakan Onload di instance Compute Engine U4, Anda harus memenuhi persyaratan berikut.
Buat instance U4
Jika belum, buat instance Compute Engine U4 menggunakan salah satu prosedur berikut yang mencakup konfigurasi yang diperlukan untuk Onload:
- Untuk membuat instance bare metal U4P atau U4C, lihat Membuat instance Compute Engine ULL.
- Untuk membuat instance virtual machine (VM) U4S, lihat Membuat instance Compute Engine non-ULL untuk workload tambahan.
Menghubungkan ke instance menggunakan SSH
Jika belum, hubungkan ke instance Anda menggunakan SSH.
Beralih ke pengguna root
Perintah dan skrip dalam prosedur berikut mengubah setelan tingkat sistem, parameter kernel, dan antarmuka jaringan. Agar berhasil menjalankannya,
Anda harus menjalankannya sebagai pengguna root. Anda dapat beralih ke shell root dengan menjalankan sudo su, atau menambahkan sudo sebelum menjalankan perintah sesuai kebutuhan.
Menyiapkan Onload
Bagian ini menjelaskan langkah-langkah yang diperlukan untuk menyiapkan Onload di instance U4.
Menginstal dependensi
Jika Anda menggunakan Rocky Linux, aktifkan repositori CodeReady Builder (CRB). Jika Anda menggunakan Red Hat Enterprise Linux (RHEL), lewati langkah ini.
dnf -y config-manager --enable crb
Instal dependensi yang diperlukan untuk Onload:
dnf -y install git clang \ python3-setuptools \ linuxptp \ libcap-devel libbpf-devel libxdp-devel
Menarik sumber Onload
Untuk menarik repositori onload
dengan perubahan yang diperlukan, jalankan perintah berikut:
umask 0022 mkdir -p /usr/src/ git clone https://github.com/Xilinx-CNS/onload /usr/src/onload # 9.2.0.43 / 9.2.1, origin/v9_2 as of May 18, 2026 git -C /usr/src/onload checkout origin/v9_2 # Pull Google-specific Onload changes not yet merged as of v9_2 curl -L https://github.com/Xilinx-CNS/onload/pull/279.patch | git -C /usr/src/onload am curl -L https://github.com/Xilinx-CNS/onload/pull/282.patch | git -C /usr/src/onload am curl -L https://github.com/Xilinx-CNS/onload/pull/325.patch | git -C /usr/src/onload am curl -L https://github.com/Xilinx-CNS/onload/pull/327.patch | git -C /usr/src/onload am
Build Onload
Untuk membangun Onload, jalankan perintah berikut:
cd /usr/src/onload USEONLOADEXT=1 ./scripts/onload_install --no-sfc pushd ./src/tools/bpf_link_helper clang xdp_onload_prepare.c -lbpf -o xdp_onload_prepare clang -target bpf -O2 -g -c xdp_tstamp.c -o ./xdp_tstamp.o popd
Menonaktifkan Pelacakan Cabang Tidak Langsung (IBT)
IBT harus dinonaktifkan untuk menggunakan Onload seperti yang dijelaskan dalam Ketidakcocokan Pelacakan Cabang Tidak Langsung (IBT) .
Untuk menonaktifkan IBT, jalankan perintah berikut:
grubby --args="ibt=off" --update-kernel=ALL reboot
Memuat dan Menurunkan Muatan
Bagian ini menjelaskan cara memuat Onload di instance Anda.
Memuat Onload di instance U4P atau U4C
Untuk memuat Onload di instance bare metal U4P atau U4C, gunakan skrip berikut.
IFNAMES=($( find /sys/class/net -type l -not -lname '*virtual*' -printf '%l %f\n' | sort | awk '{print $2}')) for IFNAME in "${IFNAMES[@]}"; do ethtool -L "${IFNAME}" rx 16 tx 16 ethtool -G "${IFNAME}" rx 1024 rx-buf-len 2048 ethtool -K "${IFNAME}" ntuple on echo 0 > "/sys/class/net/${IFNAME}/threaded" /usr/src/onload/src/tools/bpf_link_helper/xdp_onload_prepare \ "${IFNAME}" /usr/src/onload/src/tools/bpf_link_helper/xdp_tstamp.o done setenforce 0 numactl --cpunodebind=0,2 onload_tool reload --onload-only for IFNAME in "${IFNAMES[@]}"; do echo "${IFNAME}" 16 > /sys/module/sfc_resource/afxdp/register until [[ $(cat "/sys/class/net/${IFNAME}/carrier") == 1 ]]; do sleep 1 done hwstamp_ctl -i "${IFNAME}" -r 1 done echo 1 > /sys/module/sfc_resource/parameters/enable_af_xdp_flow_filters echo 256 > /sys/module/onload/parameters/xdp_headroom echo -1 > /sys/module/onload/parameters/inject_kernel_gid
Memuat Onload di instance U4S
Untuk memuat Onload di instance VM U4S, gunakan skrip berikut.
IFNAME=NIC_NAME ALLOCATED_QUEUES=ALLOCATED_QUEUES ethtool -L "$IFNAME" rx "${ALLOCATED_QUEUES}" tx "${ALLOCATED_QUEUES}" ethtool -G "$IFNAME" rx 1024 rx-buf-len 2048 ethtool -K "$IFNAME" ntuple on echo 0 > "/sys/class/net/${IFNAME}/threaded" /usr/src/onload/src/tools/bpf_link_helper/xdp_onload_prepare "$IFNAME" \ /usr/src/onload/src/tools/bpf_link_helper/xdp_tstamp.o setenforce 0 numactl --cpunodebind=0 onload_tool reload --onload-only echo "${IFNAME} ${ALLOCATED_QUEUES}" | tee /sys/module/sfc_resource/afxdp/register until [[ $(cat "/sys/class/net/${IFNAME}/carrier") == 1 ]]; do sleep 1 done hwstamp_ctl -i "$IFNAME" -r 1 echo 1 > /sys/module/sfc_resource/parameters/enable_af_xdp_flow_filters echo 256 > /sys/module/onload/parameters/xdp_headroom echo -1 > /sys/module/onload/parameters/inject_kernel_gid
Ganti kode berikut:
NIC_NAME: nama OS antarmuka jaringan, sepertienp22s0f0.ALLOCATED_QUEUES: jumlah antrean penerimaan (RX) dan pengiriman (TX) yang akan dialokasikan untuk Onload di antarmuka jaringan. Tetapkan nilai ini ke setengah dari total jumlah antrean RX atau TX yang ditetapkan ke vNIC.Untuk instance U4S, jumlah total antrean (untuk antrean RX atau TX) sama dengan
num_vcpus / num_vnics, hingga maksimum16antrean per vNIC. Misalnya, jika vNIC memiliki total4antrean TX, tetapkan nilai ini ke2. Jika vNIC memiliki total16antrean TX, tetapkan nilai ini ke8.Untuk mengetahui informasi selengkapnya tentang alokasi antrean default, lihat Antrean penerimaan dan transmisi.
Mengonfigurasi tanda Onload
Untuk mengoptimalkan performa dan membantu mengurangi latensi, Anda dapat menggunakan serangkaian variabel lingkungan dan tanda berikut saat menjalankan aplikasi dengan Onload. Bagian ini mencakup setelan yang direkomendasikan yang dapat Anda sesuaikan sesuai kebutuhan untuk aplikasi Anda.
Anda harus menentukan parameter ini sebelum perintah aplikasi Anda. Misalnya, untuk menjalankan aplikasi dengan setelan ini, gunakan format berikut:
env EF_NO_FAIL=0 \ EF_POLL_USEC=100000 \ EF_RX_TIMESTAMPING=3 \ EF_MAX_ENDPOINTS=1048576 \ EF_WODA_SINGLE_INTERFACE=1 \ EF_UL_EPOLL=3 \ EF_USE_HUGE_PAGES=0 \ EF_EPOLL_CTL_HANDOFF=0 \ EF_FDS_MT_SAFE=0 \ EF_NONAGLE_INFLIGHT_MAX=-1 \ EF_RXQ_SIZE=4096 \ EF_TCP_RCVBUF_ESTABLISHED_DEFAULT=65536 \ EF_MAX_PACKETS=65536 \ EF_PREFAULT_PACKETS=65536 \ EF_EVS_PER_POLL=256 \ onload -v --profile=latency APPLICATION_COMMAND
Hapus muatan, Muat
Untuk membatalkan pemuatan Onload, gunakan skrip berikut.
IFNAMES=($( find /sys/class/net -type l -not -lname '*virtual*' -printf '%l %f\n' | sort | awk '{print $2}')) for IFNAME in "${IFNAMES[@]}"; do rm -f "/sys/fs/bpf/onload_xdp_xsk_${IFNAME}" done onload_tool unload --onload-only for IFNAME in "${IFNAMES[@]}"; do # (optional) Disable threaded busypolling in case it's up. See busypolling # section echo 0 > "/sys/class/net/${IFNAME}/threaded" ip link set dev "${IFNAME}" xdp off done
Mengonfigurasi layanan systemd yang otomatis dimulai saat Onload
Untuk memulai Onload secara otomatis saat instance melakukan booting, Anda dapat mendaftarkannya sebagai
layanan systemd. Buat file layanan menggunakan template berikut:
[Unit] Description=ULL Solution -- Loading & instance tuning for Onload After=network-online.target After=google-guest-agent-manager.service google-guest-agent.service Before=multi-user.target Before=sshd.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=START_SCRIPT_PATH ExecStartPost=OPTIMIZATION_SCRIPT_PATH ExecStop=STOP_SCRIPT_PATH [Install] WantedBy=multi-user.target
Ganti kode berikut:
START_SCRIPT_PATH: jalur ke skrip yang memulai Onload, seperti salah satu skrip di Load Onload.OPTIMIZATION_SCRIPT_PATH: jalur ke skrip opsional yang menerapkan konfigurasi pengoptimalan. Jika diinginkan, Anda dapat membuat skrip yang mencakup pengoptimalan performa dan menyertakannya di sini. Jika tidak, Anda dapat menghapus baris yang menyertakan variabel ini.STOP_SCRIPT_PATH: jalur ke skrip yang menghentikan Onload, seperti skrip di Unload Onload.
Mengonfigurasi polling sibuk
Bagian ini memberikan contoh cara mengonfigurasi polling sibuk di instance Anda.
Polling sibuk terus memeriksa paket jaringan baru, bukan menunggu interupsi perangkat, yang membantu mengurangi latensi dan jitter. Untuk mengetahui informasi selengkapnya tentang polling sibuk, lihat Polling sibuk dalam dokumentasi Kernel Linux.
Mendapatkan antrean RX yang digunakan oleh stack Onload
Untuk mendapatkan antrean RX yang digunakan oleh stack Onload, lakukan hal berikut:
Dapatkan ID stack Onload dengan menjalankan
onload_stackdump:onload_stackdump
Karena ID stack Onload dan ID antrean NAPI mungkin tidak selalu cocok, gunakan skrip berikut untuk mendapatkan nama antarmuka, indeks, dan ID antrean yang sesuai dari ID stack.
ONLOAD_STACK=ONLOAD_STACK_ID INTF_HWPORT_MAP=($(onload_stackdump "${ONLOAD_STACK}" netif_extra | grep -oP "intf_i_to_hwport=\K.*$" | tr ',' '\n')) HWPORT_IFINDEX_MAP=($(onload_stackdump "${ONLOAD_STACK}" hwport_to_base_ifindex | grep -oP "\d+$")) while read -r INTF_ID QUEUE_ID; do HW_PORT="${INTF_HWPORT_MAP[INTF_ID]}" IFINDEX="${HWPORT_IFINDEX_MAP[HW_PORT]}" IFNAME=$(ip -j link | jq -r ".[] | select(.ifindex == ${IFINDEX}) | .ifname") echo "ifname=${IFNAME} ifindex=${IFINDEX} queue_id=${QUEUE_ID}" done < <(onload_stackdump "${ONLOAD_STACK}" netif | grep -oP "((intf|vi)=)\K\d+" | xargs -n 2)
Ganti
ONLOAD_STACK_IDdengan ID stack yang ingin Anda aktifkan atau nonaktifkan polling sibuknya.Catat nilai yang akan digunakan saat Anda mengaktifkan atau menonaktifkan polling sibuk di bagian berikut.
Mengaktifkan polling sibuk di antrean RX
Bagian ini memberikan contoh cara mengaktifkan polling sibuk pada antrean RX tertentu yang digunakan oleh stack Onload.
Jalankan skrip bash berikut di terminal Anda. Fungsi
enable_single_queuemelakukan hal berikut:- Mendapatkan
napi_idyang sesuai dengan antrean RX menggunakan netlink (ynl) - Menetapkan properti
threaded: busy-pollpadanapi_id - Mendapatkan
kthread_pidthread yang sibuk melakukan pollingnapi_id - Menggunakan
tasksetuntuk mengikatkthread_pidke CPU tertentu
readonly NETDEV_YAML=${NETDEV_YAML:-"/usr/share/ynl/specs/netdev.yaml"} call_ynl() { ynl --spec "${NETDEV_YAML}" "$@" } enable_single_queue() { local -r interface="$1" local -r ifindex=$(cat "/sys/class/net/${interface}/ifindex") local -r q_id="$2" local -r cpu="$3" local napi_id napi_id=$(call_ynl --output-json --do queue-get \ --json "{\"ifindex\": ${ifindex}, \"id\": ${q_id}, \"type\": \"rx\"}" | \ jq -r '."napi-id"') if [[ -z "${napi_id}" || "${napi_id}" == "null" ]]; then echo "Error: No napi_id found for queue ${q_id} on interface ${interface}" >&2 exit 1 fi echo "Enabling busypolling for queue ${q_id} (NAPI ${napi_id}) on CPU ${cpu}" call_ynl --do napi-set --json "{\"id\": \"${napi_id}\", \"threaded\": \"busy-poll\"}" >/dev/null local napi_kthread_pid napi_kthread_pid=$(call_ynl --do napi-get --output-json \ --json "{\"id\": \"${napi_id}\"}" | jq -r '."pid" // empty') if [[ -z "${napi_kthread_pid}" ]]; then echo "Error: Could not get PID for NAPI ${napi_id}" >&2 exit 1 fi taskset -pc "${cpu}" "${napi_kthread_pid}" >/dev/null }
- Mendapatkan
Jalankan perintah berikut untuk memanggil fungsi
enable_single_queue:enable_single_queue NIC_NAME QUEUE_ID CPU_ID
Ganti kode berikut:
NIC_NAME: nama OS antarmuka jaringan, sepertiens8f0.QUEUE_ID: ID antrean yang Anda dapatkan sebelumnya.CPU_ID: ID CPU tempat menjalankan thread polling sibuk, seperti5.
Pastikan Anda merencanakan peristiwa pembuatan ulang thread yang dapat memengaruhi konfigurasi polling sibuk Anda.
Merencanakan peristiwa pembuatan ulang thread
Saat kernel membuat ulang thread, konfigurasi thread terkait tidak dipertahankan, seperti mask afinitas CPU dan kebijakan penjadwalannya. Peristiwa seperti berikut menyebabkan kernel membuat ulang thread yang sedang melakukan polling NAPI:
- Flapping/reset link
- Lampiran program XDP (misalnya, saat menjalankan skrip untuk memuat Onload atau melampirkan program XDP kustom)
- Perubahan parameter dering (
ethtool -G) - Perubahan jumlah antrean (
ethtool -L)
Untuk membantu mencegah masalah, sebaiknya hindari tugas yang menyebabkan peristiwa pembuatan ulang thread selama operasi normal.
Untuk mempertahankan konfigurasi polling sibuk setelah thread dibuat ulang,
Anda harus mendapatkan ID Proses (PID) thread yang baru dan mengikatnya kembali ke
CPU. Anda dapat melakukannya dengan menjalankan fungsi enable_single_queue
lagi.
Menonaktifkan polling sibuk di antrean RX
Bagian ini memberikan contoh cara menonaktifkan polling sibuk pada antrean RX tertentu yang digunakan oleh stack Onload.
Dapatkan antrean RX yang digunakan oleh stack Onload dengan menjalankan
onload_stackdump:onload_stackdump
Jalankan skrip bash berikut di terminal Anda. Fungsi
disable_single_queuemelakukan hal berikut:- Mendapatkan
napi_idyang sesuai dengan antrean RX menggunakan netlink (ynl) - Menetapkan properti berulir
napi_idkedisabled
disable_single_queue() { local -r interface="$1" local -r ifindex=$(cat "/sys/class/net/${interface}/ifindex") local -r q_id="$2" local napi_id napi_id=$(call_ynl --output-json --do queue-get \ --json "{\"ifindex\": ${ifindex}, \"id\": ${q_id}, \"type\": \"rx\"}" | \ jq -r '."napi-id"') if [[ -z "${napi_id}" || "${napi_id}" == "null" ]]; then echo "Error: No napi_id found for queue ${q_id} on interface ${interface}" >&2 exit 1 fi echo "Disabling busypolling for queue ${q_id} (NAPI ${napi_id})" call_ynl --do napi-set --json "{\"id\": \"${napi_id}\", \"threaded\": \"disabled\"}" >/dev/null }
- Mendapatkan
Jalankan perintah berikut untuk memanggil fungsi
disable_single_queue:disable_single_queue NIC_NAME QUEUE_ID
Ganti kode berikut:
NIC_NAME: nama OS antarmuka jaringan, sepertiens8f0.QUEUE_ID: ID antrean yang Anda dapatkan sebelumnya.
Mendapatkan status polling sibuk antrean
Untuk memeriksa status NAPI antrean guna melihat apakah antrean sedang melakukan polling, Anda dapat menggunakan perintah berikut:
IFNAME=NIC_NAME QUEUE_ID=QUEUE_ID QUEUE_TYPE=QUEUE_TYPE IFINDEX=$(cat "/sys/class/net/${IFNAME}/ifindex") NAPI_ID=$(ynl --spec /usr/share/ynl/specs/netdev.yaml \ --output-json --do queue-get \ --json '{"ifindex": '${IFINDEX}', "id": '${QUEUE_ID}', "type": "'${QUEUE_TYPE}'"}' | \ jq '."napi-id"') ynl --spec /usr/share/ynl/specs/netdev.yaml \ --output-json --do napi-get \ --json '{"id": '${NAPI_ID}'}' | jq -r '"status: \(.threaded)"'
Ganti kode berikut:
NIC_NAME: nama OS antarmuka jaringan, sepertiens8f0.QUEUE_ID: ID antrean yang ingin Anda periksa.QUEUE_TYPE:rxatautx.
Optimalkan performa
Bagian ini memberikan panduan umum untuk mengoptimalkan performa instance bare metal U4 (U4P dan U4C). Sesuaikan contoh dalam panduan ini sesuai kebutuhan workload Anda.
Meninjau topologi NUMA untuk instance bare metal U4
Tabel berikut menjelaskan antarmuka jaringan mana yang menggunakan node NUMA mana untuk instance bare metal U4:
| NIC (Google Cloud name) | NIC (nama OS) | Node NUMA | BDF PCIE |
|---|---|---|---|
nic0 |
enp22s0f0 |
0 | 0000:16:00.0 |
nic1 |
ens8f0 |
0 | 0000:27:00.0 |
nic2 |
ens48f0 |
2 | 0000:b8:00.0 |
Tabel sebelumnya mencakup nama antarmuka jaringan yang ditetapkan OS umum untuk RHEL. Nama sebenarnya mungkin berbeda.
Menentukan skema isolasi CPU
Untuk performa terbaik, sebaiknya Anda mengisolasi hal berikut:
- CPU yang digunakan oleh aplikasi Anda
- CPU yang digunakan untuk melakukan polling sibuk pada antrean RX Onload
- CPU yang digunakan untuk interupsi kernel dan driver
Tabel berikut memberikan contoh cara mengisolasi CPU pada instance bare metal U4. Sesuaikan pemetaan sesuai kebutuhan workload Anda, misalnya, Anda mungkin menginginkan lebih banyak CPU aplikasi.
| Tujuan | CPU |
|---|---|
| Interupsi kernel umum | 0,1,30,31,60,61,90,91 |
Interupsi pengemudi nic0 untuk antrean 0-11 |
2 |
Interupsi pengemudi nic1 untuk antrean 0-11 |
3 |
Interupsi driver nic0 dan nic1 untuk antrean 12-15 |
4 |
nic1 polling sibuk |
5-16 |
nic1 thread aplikasi (Onload) |
17-29 |
nic0 polling sibuk |
32-43 |
nic0 thread aplikasi (Onload) |
44-59 |
Interupsi pengemudi nic2 untuk antrean 0-11 |
62 |
Interupsi driver nic2 untuk antrean 12-15 |
63 |
nic2 polling sibuk |
64-75 |
nic2 thread aplikasi (Onload) |
76-89 |
Menginstal dependensi untuk pengoptimalan performa
Untuk menginstal dependensi yang diperlukan untuk pengoptimalan performa, jalankan perintah berikut:
dnf -y install numactl tuna jq
Mengonfigurasi parameter booting kernel
Untuk mengisolasi CPU dari penjadwalan kernel, jalankan perintah berikut. Tindakan ini juga menonaktifkan Intel QuickAssist Technology (QAT) agar tidak mengganggu core terisolasi Anda.
Contoh perintah berikut mengisolasi CPU 2-29, 32-59, dan 62-89 serta
menetapkan 0,1,30,31,60,61,90,91 untuk interupsi kernel umum. Nilai ini sesuai dengan skema isolasi CPU contoh. Ganti
nilai sesuai kebutuhan, bergantung pada skema isolasi CPU Anda.
grubby --args="isolcpus=domain,managed_irq,2-29,32-59,62-89 nohz=on nohz_full=2-29,32-59,62-89 rcu_nocbs=2-29,32-59,62-89 irqaffinity=0,1,30,31,60,61,90,91 rcu_nocb_poll modprobe.blacklist=intel_qat,qat_4xxx" --update-kernel=ALL reboot
Mengonfigurasi isolasi CPU setelah booting
Untuk mengisolasi CPU setelah booting, jalankan perintah berikut. Nilai sesuai dengan contoh skema isolasi CPU. Ganti nilai sesuai kebutuhan, bergantung pada skema isolasi CPU kita.
tuna isolate -c 2-29,32-59,62-89
Menetapkan interupsi antrean ke CPU tertentu
Bagian ini menjelaskan cara memindahkan permintaan interupsi (IRQ) antrean gve ke CPU tertentu. Driver gve digunakan oleh jenis antarmuka jaringan GVNIC di Google Cloud.
Tentukan IRQ untuk antarmuka jaringan dan rentang antrean tertentu. Lihat contoh bash berikut, yang menentukan fungsi
irq_list.irq_list() { local ifname=$1 local queue_begin=$2 local queue_end=$3 pci_name=$(basename $(readlink /sys/class/net/${ifname}/device)) rx_ntfy_blk_start=$(ethtool -l "${ifname}" | awk ' /Pre-set maximums:/ { in_preset = 1 } /Current hardware settings:/ { in_preset = 0 } in_preset && $1 == "RX:" { rx = $2 } in_preset && $1 == "TX:" { tx = $2 } END { print int((rx + tx) / 2) } ') for i in $(seq "${queue_begin}" "${queue_end}"); do irq_tx="gve-ntfy-blk${i}@pci:${pci_name}" irq_rx="gve-ntfy-blk$(($i + rx_ntfy_blk_start))@pci:${pci_name}" # gve IRQ names are stored in a char[IFNAMSIZ + 16] so capped to 31 characters. echo "${irq_tx:0:31}" echo "${irq_rx:0:31}" done | paste -sd ',' }
Tetapkan IRQ ke CPU yang sesuai berdasarkan skema isolasi CPU Anda. Contoh skrip berikut menggunakan
tunadan fungsiirq_listdari langkah sebelumnya:tuna move -c 2 -q "$(irq_list enp22s0f0 0 11)" tuna move -c 4 -q "$(irq_list enp22s0f0 12 15)" tuna move -c 3 -q "$(irq_list ens8f0 0 11)" tuna move -c 4 -q "$(irq_list ens8f0 12 15)" tuna move -c 62 -q "$(irq_list ens48f0 0 11)" tuna move -c 63 -q "$(irq_list ens48f0 12 15)"
Mengonfigurasi setelan OS dan perangkat
Jalankan skrip berikut untuk mengonfigurasi setelan yang membantu meminimalkan latensi dan mencegah perilaku OS default mengganggu konfigurasi Onload Anda.
echo 0 > /proc/sys/net/core/busy_poll echo 0 > /proc/sys/net/core/busy_read echo 0 > /proc/sys/kernel/timer_migration echo 0 > /proc/sys/net/core/rps_sock_flow_entries echo -1 > /proc/sys/kernel/sched_rt_runtime_us for IFNAME in "${IFNAMES[@]}"; do ethtool -C "${IFNAME}" rx-usecs 0 tx-usecs 0 echo 0 > "/sys/class/net/${IFNAME}/napi_defer_hard_irqs" echo 15000 > "/sys/class/net/${IFNAME}/gro_flush_timeout" done
Untuk mengalihkan traffic dari antrean yang dikhususkan untuk workload Onload, gunakan RSS (
ethtool -X). Contoh skrip berikut didasarkan pada nilai dalam contoh skema isolasi CPU. Karena Onload menggunakan antrean0-11, skrip mengarahkan semua traffic lainnya ke antrean12-15.for IFNAME in "${IFNAMES[@]}"; do ethtool -X "${IFNAME}" weight 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 done
Langkah berikutnya
- Untuk menyinkronkan jam sistem instance Anda dengan jam NIC fisik server host-nya, lihat Mengonfigurasi waktu yang akurat.