TP-Linkは安価で結構ちゃんと動くネットワーク機器を売ってるメーカーで、そんなTP-Link製のPCI-Express (x1)接続の無線LANカード Archer T4Eを買って2年が経った。
Archer T4E はRealtek RTL8812AE (PCI id=10ec:8812
)を使っていて、LinuxでもWindowsでも動かすことができる。
どちらのOSで使う場合でも、それぞれちょっとしたコツでより快適に使えることがわかったので、このページでは私がこれまでに「発見」したコツを書いておく。
なお、このカードはRyzen 3500搭載の自作PCで動かしている。
Linuxでは、このチップはrtl8821ae
(8812ではない)というインカーネルのドライバで使うことになる。
Ubuntu Linux 21.04と21.10と、たしか20.04くらいでもそうだったのだが、長い時間アクセスポイントに接続していると、カーネルから以下のメッセージが出て接続が切れてしまうことがある。
このログはUbuntu 21.10のLinux 5.13.0-22-genericから出たもの。
wlp6s0: send auth to 11:22:33:44:55:66 (try 2/3) wlp6s0: send auth to 11:22:33:44:55:66 (try 3/3) wlp6s0: authentication with 11:22:33:44:55:66 timed out wlp6s0: authenticate with 11:22:33:44:55:66 wlp6s0: send auth to 11:22:33:44:55:66 (try 1/3) wlp6s0: send auth to 11:22:33:44:55:66 (try 2/3) wlp6s0: send auth to 11:22:33:44:55:66 (try 3/3) wlp6s0: authentication with 11:22:33:44:55:66 timed out wlp6s0: authenticate with 11:22:33:44:55:66 wlp6s0: send auth to 11:22:33:44:55:66 (try 1/3) wlp6s0: authenticated wlp6s0: associate with 11:22:33:44:55:66 (try 1/3) wlp6s0: RX AssocResp from 11:22:33:44:55:66 (capab=0x411 status=0 aid=3) wlp6s0: associated wlp6s0: Limiting TX power to 30 (30 - 0) dBm as advertised by 11:22:33:44:55:66 wlp6s0: deauthenticated from 11:22:33:44:55:66 (Reason: 15=4WAY_HANDSHAKE_TIMEOUT) ------------[ cut here ]------------ WARNING: CPU: 1 PID: 1116 at drivers/iommu/dma-iommu.c:504 __iommu_dma_unmap_swiotlb+0x85/0xa0 Modules linked in: overlay ccm xt_CHECKSUM xt_MASQUERADE ipt_REJECT nf_reject_ipv4 nft_chain_nat nf_nat bridge stp llc nft_counter xt_tcpudp xt_state xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nft_compat nf_tables nfnetlink binfmt_misc nls_iso8859_1 snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel intel_rapl_msr intel_rapl_common snd_intel_dspcfg snd_intel_sdw_acpi rtl8821ae snd_hda_codec snd_hda_core snd_hwdep btcoexist snd_pcm rtl_pci rtlwifi edac_mce_amd snd_seq_midi snd_seq_midi_event snd_rawmidi kvm_amd snd_seq mac80211 snd_seq_device kvm snd_timer rapl wmi_bmof cfg80211 gigabyte_wmi xpad snd ff_memless joydev input_leds serio_raw ccp soundcore libarc4 k10temp efi_pstore mac_hid nvidia_uvm(PO) sch_fq_codel msr parport_pc ppdev lp parport sunrpc ip_tables x_tables autofs4 xfs libcrc32c hid_logitech_hidpp hid_logitech_dj hid_generic usbhid hid nvidia_drm(PO) nvidia_modeset(PO) nvidia(PO) crct10dif_pclmul crc32_pclmul ghash_clmulni_intel drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops cec aesni_intel crypto_simd cryptd rc_core psmouse r8169 i2c_piix4 drm realtek ahci xhci_pci gpio_amdpt libahci xhci_pci_renesas wmi gpio_generic CPU: 1 PID: 1116 Comm: wpa_supplicant Tainted: P O 5.13.0-22-generic #22-Ubuntu Hardware name: Gigabyte Technology Co., Ltd. B450M S2H/B450M S2H, BIOS F62d 10/13/2021 RIP: 0010:__iommu_dma_unmap_swiotlb+0x85/0xa0 Code: 1a 4c 3b 60 08 73 14 8b 4d d4 49 89 d8 4c 89 ea 4c 89 e6 4c 89 ff e8 0a 9c 99 ff 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d c3 <0f> 0b 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d c3 66 2e 0f 1f 84 RSP: 0018:ffffb838c1a07600 EFLAGS: 00010046 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000015 RDX: 0000000040000000 RSI: 0000000000000000 RDI: ffffb838c1a075b8 RBP: ffffb838c1a07630 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000081 R11: 0000000000000001 R12: ffff9a8ac12ce0c8 R13: 00000000000009d8 R14: 0000000000000000 R15: ffff9a8ac12ce0c8 FS: 00007ff1c962ac40(0000) GS:ffff9a8dee840000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fb43bc55000 CR3: 000000010fa56000 CR4: 0000000000350ee0 Call Trace: iommu_dma_unmap_page+0x4a/0x50 dma_unmap_page_attrs+0x187/0x1c0 rtl_pci_reset_trx_ring+0x18c/0x360 [rtl_pci] rtl_ps_enable_nic+0x2d/0x130 [rtlwifi] _rtl8821ae_phy_set_rf_power_state+0x288/0x2c0 [rtl8821ae] rtl8821ae_phy_set_rf_power_state+0x1a/0x20 [rtl8821ae] rtl_ps_set_rf_state.isra.0+0xb8/0x100 [rtlwifi] _rtl_ps_inactive_ps+0x3b/0xd0 [rtlwifi] rtl_ips_nic_on+0x90/0xd0 [rtlwifi] rtl_op_config+0x256/0x420 [rtlwifi] ieee80211_hw_config+0x7d/0xf0 [mac80211] ieee80211_recalc_idle+0x29/0x30 [mac80211] __ieee80211_start_scan+0x212/0x600 [mac80211] ? __cond_resched+0x1a/0x50 ieee80211_request_scan+0x30/0x50 [mac80211] ieee80211_scan+0x5c/0xa0 [mac80211] cfg80211_scan+0x1a5/0x250 [cfg80211] nl80211_trigger_scan+0x41c/0x6c0 [cfg80211] genl_family_rcv_msg_doit+0xe7/0x150 genl_rcv_msg+0xe2/0x1e0 ? nl80211_send_scan_start+0xa0/0xa0 [cfg80211] ? genl_get_cmd+0xd0/0xd0 netlink_rcv_skb+0x55/0x100 genl_rcv+0x29/0x40 netlink_unicast+0x21d/0x330 netlink_sendmsg+0x246/0x490 sock_sendmsg+0x65/0x70 ____sys_sendmsg+0x24e/0x290 ? import_iovec+0x31/0x40 ? sendmsg_copy_msghdr+0x7b/0xa0 ___sys_sendmsg+0x81/0xc0 ? sock_do_ioctl+0x41/0x140 ? __cond_resched+0x1a/0x50 ? begin_current_label_crit_section+0x2a/0xd0 ? __check_object_size.part.0+0x3a/0x150 ? __cond_resched+0x1a/0x50 ? aa_sk_perm+0x43/0x1b0 ? sock_getsockopt+0x11a/0xce0 ? _copy_from_user+0x2e/0x60 __sys_sendmsg+0x62/0xb0 __x64_sys_sendmsg+0x1d/0x20 do_syscall_64+0x61/0xb0 ? syscall_exit_to_user_mode+0x27/0x50 ? __x64_sys_setsockopt+0x1f/0x30 ? do_syscall_64+0x6e/0xb0 ? __x64_sys_getsockopt+0x1f/0x30 ? do_syscall_64+0x6e/0xb0 ? do_syscall_64+0x6e/0xb0 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x7ff1c9a853c7 Code: 0e 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10 RSP: 002b:00007ffdc3917788 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00005611efc79590 RCX: 00007ff1c9a853c7 RDX: 0000000000000000 RSI: 00007ffdc39177c0 RDI: 0000000000000006 RBP: 00005611efc794a0 R08: 0000000000000004 R09: 00007ff1c9b73c60 R10: 00007ffdc3917890 R11: 0000000000000246 R12: 00005611efcb4260 R13: 00007ffdc39177c0 R14: 00007ffdc3917890 R15: 00005611efcccd30 ---[ end trace b5c34f7f16c98629 ]---
原因はまったくわかっていないのだが、適当に勘で以下の対応をしたところ、最近は起きていない。
GRUB_CMDLINE_LINUX_DEFAULT
の末尾に swiotlb=4096
を追加sudo grub-mkconfig -o /boot/grub/grub.cfg
実行cat /proc/cmdline
でswiotlb=4096
が見えることを確認。options rtl8821ae int_clear=0
sudo update-initramfs -u
実行cat /sys/module/rtl8821ae/parameters/int_clear
がN
になっていることを確認。swiotlb=
は、PCI DMA用のsoftware bounce buffer (SWIOTLB
)の大きさを指定するパラメータで、通常64 MBytesのところ4096×slab (128 KBytes)の512 MBytesに拡大する指定。
本当はこのドライバを作ってる人に相談したりするのが良いのだと思うが、NVIDIAのカーネルモジュール使っていてtaintedである関係で直接言うのが後ろめたい気持ち。
Windows 10とWindows 11では、メーカー配布のArcher T4E(UN)_V1_190108_Wins 公開日: 2019-01-16
を使うことになる。
アクセスポイントとの接続がきれることはないのだが、一秒ほど通信がされない状況が数秒おきに続きことがあった。 これは朝電源を入れてから作業を初めて午後中頃なったくらいに起きることが多かった。 Microsoft Teamsやリモートデスクトップのような、継続的に通信していないといけないソフトで数秒〜10秒ほどに一回データの流れが止まってしまい、音声が一瞬途切れたり、文字入力の反映が遅れたりすることで気づく。 一度この状態になってしまうと、再起動するまで戻らないのが症状の特徴だ。
今は再起動したくない、という場合、以下の操作で必ずデータの流れはスムーズに戻った。
netsh wlan show interfaces
で該当する無線LANカードのインターフェース名を調べる。
netsh wlan set autoconfig enabled=no interface="↑で調べた名前"
を実行。enabled=yes
にしてもとに戻しておく。バッチファイルにしておくと便利かもしれない。
というわけで、今どきめずらしい、ちょっと工夫がいるタイプの自作PCパーツなのであった。 西暦2000年ごろは今よりもっともっとこういう感じのパーツが多くて楽しかったと記憶していて、これからも安くて怪しいパーツを積極的に選んで買っていきたいと思っている。(おわり)