OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

5.9. Hỗ trợ và khắc phục sự cố


DPDK là một dự án phát triển nhanh chóng. Trong mọi trường hợp tìm kiếm hỗ trợ và hướng dẫn thêm, trước tiên bạn nên kiểm tra xem chúng có áp dụng cho phiên bản hiện tại hay không.

• Danh sách gửi thư DPDK38

• Đối với danh sách gửi thư OpenVswitch-DPDK OpenStack39

• Các sự cố đã biết trong Khu vực bàn di chuột DPDK40

• Tham gia các kênh IRC #DPDK hoặc #openvswitch trên freenode.


Các vấn đề thường do thiếu các chi tiết nhỏ trong thiết lập chung. Sau đó, những chi tiết bị thiếu này gây ra các vấn đề mà khó có thể tìm ra nguyên nhân gốc rễ của chúng. Một trường hợp phổ biến dường như là sự cố "không thể mở thiết bị mạng dpdk0 (Không có thiết bị như vậy)". Điều này xảy ra khá muộn khi thiết lập một cổng trong Open vSwitch với DPDK. Nhưng nguyên nhân gốc rễ hầu hết đều nằm ở quá trình thiết lập và khởi tạo rất sớm. Dưới đây là một ví dụ về cách thức khởi tạo đúng thiết bị - điều này có thể được tìm thấy trong nhật ký hệ thống / tạp chí khi khởi động Mở vSwitch với DPDK được bật.


ovs-ctl [3560]: EAL: Thiết bị PCI 0000: 04: 00.1 trên ổ cắm NUMA 0 ovs-ctl [3560]: EAL: trình điều khiển thăm dò: 8086: 1528 rte_ixgbe_pmd ovs-ctl [3560]: EAL: Bộ nhớ PCI được ánh xạ tại 0x7f2140000000 ovs-ctl [3560]: EAL: Bộ nhớ PCI được ánh xạ ở 0x7f2140200000


hình ảnh

38 http://dpdk.org/ml

39 http://openvswitch.org/mlists

40 https://bugs.launchpad.net/ubuntu/+source/dpdk


Nếu điều này bị thiếu, do thẻ bị bỏ qua, khởi tạo không thành công hoặc các lý do khác, sau này sẽ không có thiết bị DPDK nào để tham khảo. Thật không may, việc ghi nhật ký được lan truyền trên nhật ký hệ thống / tạp chí và nhật ký openvswitch. Để cho phép một số kiểm tra chéo, đây là một ví dụ có thể tìm thấy những gì trong các nhật ký này, liên quan đến lệnh đã nhập.


#Lưu ý: Nhật ký này được lấy bằng dpdk 2.2 và openvswitch 2.5 Chú thích:

CMD: mà bạn nhập

SYSLOG: (Bao gồm các tin nhắn EAL và OVS) OVS-LOG: (Tin nhắn Openvswitch)


#SỰ CHUẨN BỊ

Liên kết giao diện với trình điều khiển DPDK UIO, cung cấp các Trang khổng lồ, bật DPDK trên OVS


CMD: dịch vụ sudo openvswitch-switch khởi động lại


BIỂU TƯỢNG:

2016-01-22T08: 58: 31.372Z | 00003 | daemon_unix (monitor) | INFO | pid 3329 đã chết, bị giết (Đã chấm dứt), đang thoát

2016-01-22T08: 58: 33.377Z | 00002 | vlog | INFO | đã mở tệp nhật ký / var / log / openvswitch / ovs- vswitchd.log

2016-01-22T08: 58: 33.381Z | 00003 | ovs_numa | INFO | Đã phát hiện ra 12 lõi CPU trên nút NUMA 0 2016-01-22T08: 58: 33.381Z | 00004 | ovs_numa | INFO | Đã phát hiện ra 1 nút NUMA và 12 lõi CPU 2016-01-22T08: 58: 33.381Z | 00005 | kết nối lại | INFO | unix: /var/run/openvswitch/db.sock:

Đang kết nối...

2016-01-22T08:58:33.383Z|00006|reconnect|INFO|unix:/var/run/openvswitch/db.sock: connected 2016-01-22T08:58:33.386Z|00007|bridge|INFO|ovs-vswitchd (Open vSwitch) 2.5.0


Nhật ký OVS:

systemd [1]: Đang dừng Mở vSwitch ... systemd [1]: Đã dừng Mở vSwitch.

systemd [1]: Dừng Mở Thiết bị Nội bộ vSwitch ... ovs-ctl [3541]: * Giết ovs-vswitchd (3329)

ovs-ctl [3541]: * Giết ovsdb-server (3318) systemd [1]: Đã dừng Mở vSwitch Nội bộ. systemd [1]: Khởi động Mở vSwitch Internal Unit ... ovs-ctl [3560]: * Khởi động ovsdb-server

ovs-vsctl: ovs | 00001 | vsctl | INFO | Được gọi là ovs-vsctl --no-wait - init - set Open_vSwitch. db-version = 7.12.1

ovs-vsctl: ovs | 00001 | vsctl | INFO | Được gọi là ovs-vsctl --no-wait set Open_vSwitch. ovs- version = 2.5.0 "external-id: system-id = \" e7c5ba80-bb14-45c1-b8eb-628f3ad03903 \ "" "system- type = \" Ubuntu \ "" "system-version = \" 16.04- xenial \ ""

ovs-ctl [3560]: * Định cấu hình ID hệ thống vSwitch Mở

ovs-ctl [3560]: 2016-01-22T08: 58: 31Z | 00001 | dpdk | INFO | Không cung cấp -vhost_sock_dir - mặc định là / var / run / openvswitch

ovs-vswitchd: ovs | 00001 | dpdk | INFO | Không cung cấp -vhost_sock_dir - mặc định là / var / run / openvswitch

ovs-ctl [3560]: EAL: Đã phát hiện lcore 0 là lõi 0 trên ổ cắm 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 1 là lõi 1 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 2 là lõi 2 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 3 là lõi 3 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 4 là lõi 4 trên socket 0



ovs-ctl [3560]: EAL: Đã phát hiện lcore 5 là lõi 5 trên ổ cắm 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 6 là lõi 0 trên ổ cắm 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 7 là lõi 1 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 8 là lõi 2 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 9 là lõi 3 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 10 là lõi 4 trên socket 0 ovs-ctl [3560]: EAL: Đã phát hiện lcore 11 là lõi 5 trên socket 0

ovs-ctl [3560]: EAL: Hỗ trợ tối đa 128 lõi logic theo cấu hình. ovs-ctl [3560]: EAL: Đã phát hiện 12 lcore

ovs-ctl [3560]: EAL: Chưa tải tất cả các mô-đun VFIO, bỏ qua hỗ trợ VFIO ... ovs-ctl [3560]: EAL: Thiết lập bộ nhớ liền kề vật lý ...

ovs-ctl [3560]: EAL: Yêu cầu một vùng ảo 0x100000000 byte

ovs-ctl [3560]: EAL: Khu vực ảo được tìm thấy tại 0x7f2040000000 (size = 0x100000000) ovs-ctl [3560]: EAL: Yêu cầu 4 trang có kích thước 1024MB từ socket 0

ovs-ctl [3560]: EAL: Tần số TSC là ~ 2397202 KHz

ovs-vswitchd [3592]: EAL: Tần số TSC là ~ 2397202 KHz

ovs-vswitchd [3592]: EAL: Điểm chính 0 đã sẵn sàng (tid = fc6cbb00; cpuset = [0]) ovs-vswitchd [3592]: EAL: Thiết bị PCI 0000: 04: 00.0 trên ổ cắm NUMA 0

ovs-vswitchd [3592]: EAL: trình điều khiển thăm dò: 8086: 1528 rte_ixgbe_pmd

ovs-vswitchd [3592]: EAL: Không được quản lý bởi trình điều khiển hạt nhân được hỗ trợ, bỏ qua ovs-vswitchd [3592]: EAL: Thiết bị PCI 0000: 04: 00.1 trên ổ cắm NUMA 0

ovs-vswitchd [3592]: EAL: trình điều khiển thăm dò: 8086: 1528 rte_ixgbe_pmd ovs-vswitchd [3592]: EAL: Bộ nhớ PCI được ánh xạ tại 0x7f2140000000 ovs-vswitchd [3592]: EAL: Bộ nhớ PCI được ánh xạ tại 0x7f2140200000

ovs-ctl [3560]: EAL: Điểm chính 0 đã sẵn sàng (tid = fc6cbb00; cpuset = [0]) ovs-ctl [3560]: EAL: Thiết bị PCI 0000: 04: 00.0 trên ổ cắm NUMA 0

ovs-ctl [3560]: EAL: trình điều khiển thăm dò: 8086: 1528 rte_ixgbe_pmd

ovs-ctl [3560]: EAL: Không được quản lý bởi trình điều khiển hạt nhân được hỗ trợ, bỏ qua ovs-ctl [3560]: EAL: Thiết bị PCI 0000: 04: 00.1 trên ổ cắm NUMA 0

ovs-ctl [3560]: EAL: trình điều khiển thăm dò: 8086: 1528 rte_ixgbe_pmd ovs-ctl [3560]: EAL: Bộ nhớ PCI được ánh xạ tại 0x7f2140000000 ovs-ctl [3560]: EAL: Bộ nhớ PCI được ánh xạ tại 0x7f2140200000

ovs-vswitchd [3592]: PMD: eth_ixgbe_dev_init (): MAC: 4, PHY: 3

ovs-vswitchd [3592]: PMD: eth_ixgbe_dev_init (): port 0 nhà cung cấpID = 0x8086 deviceID = 0x1528 ovs-ctl [3560]: PMD: eth_ixgbe_dev_init (): MAC: 4, PHY: 3

ovs-ctl [3560]: PMD: eth_ixgbe_dev_init (): cổng 0 nhà cung cấpID = 0x8086 deviceID = 0x1528 ovs-ctl [3560]: Vùng 0: tên: , vật lý: 0x83fffdec0, len: 0x2080,

virt:0x7f213fffdec0, socket_id:0, flags:0

ovs-ctl[3560]: Zone 1: name:<MP_log_history>, phys:0x83fd73d40, len:0x28a0c0, virt:0x7f213fd73d40, socket_id:0, flags:0

ovs-ctl [3560]: Vùng 2: tên: , Phys: 0x83fd43380, len: 0x2f700, Virt: 0x7f213fd43380, socket_id: 0, cờ: 0

ovs-ctl [3560]: * Bắt đầu ovs-vswitchd

ovs-ctl [3560]: * Bật trình quản lý OVSDB từ xa systemd [1]: Đã khởi động Mở thiết bị nội bộ vSwitch. systemd [1]: Khởi động Mở vSwitch ... systemd [1]: Đã khởi động Mở vSwitch.


CMD: sudo ovs-vsctl add-br ovsdpdkbr0 - đặt cầu ovsdpdkbr0 datapath_type = netdev


BIỂU TƯỢNG:



2016-01-22T08: 58: 56.344Z | 00008 | bộ nhớ | INFO | 37256 kB kích thước thiết lập thường trú cao nhất sau 24.5 giây

2016-01-22T08:58:56.346Z|00009|ofproto_dpif|INFO|netdev@ovs-netdev: Datapath supports recirculation

2016-01-22T08: 58: 56.346Z | 00010 | ofproto_dpif | INFO | netdev @ ovs-netdev: Độ dài ngăn xếp nhãn MPLS được khảo sát là 3

2016-01-22T08: 58: 56.346Z | 00011 | ofproto_dpif | INFO | netdev @ ovs-netdev: Datapath hỗ trợ id luồng duy nhất

2016-01-22T08: 58: 56.346Z | 00012 | ofproto_dpif | INFO | netdev @ ovs-netdev: Datapath không hỗ trợ ct_state

2016-01-22T08: 58: 56.346Z | 00013 | ofproto_dpif | INFO | netdev @ ovs-netdev: Datapath không hỗ trợ ct_zone

2016-01-22T08: 58: 56.346Z | 00014 | ofproto_dpif | INFO | netdev @ ovs-netdev: Datapath không hỗ trợ ct_mark

2016-01-22T08: 58: 56.346Z | 00015 | ofproto_dpif | INFO | netdev @ ovs-netdev: Datapath không hỗ trợ ct_label

2016-01-22T08: 58: 56.360Z | 00016 | cầu | THÔNG TIN | cầu ovsdpdkbr0: đã thêm giao diện ovsdpdkbr0 trên cổng 65534

2016-01-22T08:58:56.361Z|00017|bridge|INFO|bridge ovsdpdkbr0: using datapath ID 00005a4a1ed0a14d

2016-01-22T08: 58: 56.361Z | 00018 | connmgr | INFO | ovsdpdkbr0: bộ điều khiển dịch vụ đã thêm "punix: / var / run / openvswitch / ovsdpdkbr0.mgmt"


Nhật ký OVS:

ovs-vsctl: ovs | 00001 | vsctl | INFO | Được gọi là ovs-vsctl add-br ovsdpdkbr0 - đặt cầu ovsdpdkbr0 datapath_type = netdev

systemd-udevd [3607]: Không thể tạo địa chỉ MAC liên tục cho ovs-netdev: Không có tệp hoặc thư mục nào như vậy

nhân: [50165.886554] thiết bị ovs-netdev đã vào nhân chế độ lăng nhăng: [50165.901261] thiết bị ovsdpdkbr0 đã vào chế độ lăng nhăng


CMD: sudo ovs-vsctl add-port ovsdpdkbr0 dpdk0 - set Interface dpdk0 type = dpdk


BIỂU TƯỢNG:

2016-01-22T08: 59: 06.369Z | 00019 | memory | INFO | kích thước tập hợp cư dân cao nhất đã tăng 155% trong 10.0 giây qua, từ 37256 kB lên 95008 kB

2016-01-22T08:59:06.369Z|00020|memory|INFO|handlers:4 ports:1 revalidators:2 rules:5 2016-01-22T08:59:30.989Z|00021|dpdk|INFO|Port 0: 8c:dc:d4:b3:6d:e9

2016-01-22T08:59:31.520Z|00022|dpdk|INFO|Port 0: 8c:dc:d4:b3:6d:e9

2016-01-22T08: 59: 31.521Z | 00023 | dpif_netdev | INFO | Đã tạo 1 luồng pmd trên nút numa 0 2016-01-22T08: 59: 31.522Z | 00001 | dpif_netdev (pmd16) | INFO | Cổng xử lý lõi 0 ' dpdk0 '

2016-01-22T08: 59: 31.522Z | 00024 | bridge | INFO | bridge ovsdpdkbr0: thêm giao diện dpdk0 trên cổng 1

2016-01-22T08:59:31.522Z|00025|bridge|INFO|bridge ovsdpdkbr0: using datapath ID 00008cdcd4b36de9

2016-01-22T08:59:31.523Z|00002|dpif_netdev(pmd16)|INFO|Core 0 processing port 'dpdk0'


Nhật ký OVS:

ovs-vsctl: ovs | 00001 | vsctl | INFO | Được gọi là ovs-vsctl add-port ovsdpdkbr0 dpdk0 - set Interface dpdk0 type = dpdk



ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a79ebc0 hw_ring=0x7f211a7a6c00 dma_addr=0x81a7a6c00

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_rx_queue_setup(): sw_ring=0x7f211a78a6c0 sw_sc_ring=0x7f211a786580 hw_ring=0x7f211a78e800 dma_addr=0x81a78e800

ovs-vswitchd [3595]: PMD: ixgbe_set_rx_ Chức năng (): Đã bật vectơ rx, hãy đảm bảo kích thước cụm RX không nhỏ hơn 4 (cổng = 0).

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a79ebc0 hw_ring=0x7f211a7a6c00 dma_addr=0x81a7a6c00

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a76e4c0 hw_ring=0x7f211a776500 dma_addr=0x81a776500

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a756440 hw_ring=0x7f211a75e480 dma_addr=0x81a75e480

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a73e3c0 hw_ring=0x7f211a746400 dma_addr=0x81a746400

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a726340 hw_ring=0x7f211a72e380 dma_addr=0x81a72e380

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a70e2c0 hw_ring=0x7f211a716300 dma_addr=0x81a716300

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a6f6240 hw_ring=0x7f211a6fe280 dma_addr=0x81a6fe280

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a6de1c0 hw_ring=0x7f211a6e6200 dma_addr=0x81a6e6200

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a6c6140 hw_ring=0x7f211a6ce180 dma_addr=0x81a6ce180

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a6ae0c0 hw_ring=0x7f211a6b6100 dma_addr=0x81a6b6100

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a696040 hw_ring=0x7f211a69e080 dma_addr=0x81a69e080

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.



ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a67dfc0 hw_ring=0x7f211a686000 dma_addr=0x81a686000

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_tx_queue_setup(): sw_ring=0x7f211a665e40 hw_ring=0x7f211a66de80 dma_addr=0x81a66de80

ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Sử dụng đường dẫn mã tx đơn giản ovs-vswitchd [3595]: PMD: ixgbe_set_tx_ Chức năng (): Đã bật vectơ tx.

ovs-vswitchd[3595]: PMD: ixgbe_dev_rx_queue_setup(): sw_ring=0x7f211a78a6c0 sw_sc_ring=0x7f211a786580 hw_ring=0x7f211a78e800 dma_addr=0x81a78e800

ovs-vswitchd [3595]: PMD: ixgbe_set_rx_ Chức năng (): Đã bật vectơ rx, hãy đảm bảo kích thước cụm RX không nhỏ hơn 4 (cổng = 0).


CMD: sudo ovs-vsctl add-port ovsdpdkbr0 vhost-user-1 - set Interface vhost-user-1 type = dpdkvhostuser


Nhật ký OVS:

2016-01-22T09: 00: 35.145Z | 00026 | dpdk | INFO | Socket / var / run / openvswitch / vhost-user-1 được tạo cho vhost-user port vhost-user-1

2016-01-22T09:00:35.145Z|00003|dpif_netdev(pmd16)|INFO|Core 0 processing port 'dpdk0'

2016-01-22T09:00:35.145Z|00004|dpif_netdev(pmd16)|INFO|Core 0 processing port 'vhost-user-1' 2016-01-22T09:00:35.145Z|00027|bridge|INFO|bridge ovsdpdkbr0: added interface vhost-user-1

trên cổng 2


BIỂU TƯỢNG:

ovs-vsctl: ovs | 00001 | vsctl | INFO | Được gọi là ovs-vsctl add-port ovsdpdkbr0 vhost-user-1 - set Interface vhost-user-1 type = dpdkvhostuser

ovs-vswitchd [3595]: VHOST_CONFIG: socket được tạo, fd: 46

ovs-vswitchd [3595]: VHOST_CONFIG: liên kết với / var / run / openvswitch / vhost-user-1


Cuối cùng, chúng tôi có thể thấy chuỗi cuộc thăm dò ở trên cùng

PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND

3595 gốc 10 -10 4975344 103936 9916 S 100.0 0.3 33: 13.56 ovs-vswitchd


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: