阿里大规模业务混部下的全链路资源隔离技术演进

简介: 本文作为混部实践系列开篇,本篇文章将介绍资源隔离技术在混部中的重要性、其落地挑战及我们的应对思路。

作者:钱君、南异

混部顾名思义,就是将不同类型的业务在同一台机器上混合部署起来,让它们共享机器上的 CPU、内存、IO 等资源,目的就是最大限度地提高资源利用率,从而降低采购和运营等成本。

2014 年,阿里开始了第一次探索混部,经过七年磨练,这把将资源利用率大幅提升的利剑正式开始商用。

通过计算资源、内存资源、存储资源、网络资源等全链路的隔离以及毫秒级的自适应调度能力,阿里可以在双十一的流量下进行全时混部,通过智能化的决策与运维能力,支撑着内部百万级的 Pod 混部,不管是 CPU 与 GPU 资源,普通容器与安全容器,包括国产化环境各种异构基础设施,都能实现高效混部,这让阿里核心电商业务生产集群成本下降了 50% 以上,同时让核心业务受到的干扰小于 5%。

针对云原生时代的资源效能提升问题,我们将基于大规模场景下的混部实践推出系列文章,详细介绍并分享关于混部技术的细节,及大规模生产中碰到的种种落地的实际问题。作为系列开篇,本篇文章将介绍资源隔离技术在混部中的重要性、其落地挑战及我们的应对思路。

混部和资源隔离之间的关系:资源隔离是混部的基石

混部通常是将不同优先级的任务混合在一起,例如高优先级的实时任务(对时延敏感,资源消耗低;称为在线)和低优先级的批处理任务(对时延不敏感,资源消耗高;称为离线),当高优先级业务需要资源时,低优先级任务需要立即归还,并且低优先级任务的运行不能对高优先级任务造成明显干扰。

为了满足混部的需求,在单机维度的内核资源隔离技术是最为关键的一项技术,阿里云在内核资源隔离技术上深耕多年,积累了许多业界领先的经验,我们将这些内核资源隔离技术主要涉及的范围概括为内核中的调度、内存和 IO 这三大子系统,并且在各个子系统领域根据云原生的混部场景进行了深入的改造和优化,包括 CPU Group Identity、SMT expeller、基于 Cgroup 的内存异步回收等。这些关键的技术使客户有能力在云原生混部场景中根据业务特点给出最优解决方案,有效提高用户的资源使用率并降低用户资源的使用成本,非常适用于容器云混部场景,同时也是大规模化混合部署方案所强依赖的关键技术。

下图是资源隔离能力在整个混部方案中的位置:

图片 1.png

为什么需要资源隔离,资源隔离会遇到哪些拦路虎

假设我们现在有一台服务器,上面运行了高优的在线业务以及离线任务。在线任务对响应时间 (Response Time, RT) 的需求是很明确的,要求尽可能低的 RT,故被称之为延迟敏感型 (Latency-Sensitive, LS) 负载;离线任务永远是有多少资源吃多少资源的,故此类负载被称之为 Best Effort (BE)。如果我们对在线和离线任务不加干涉,那么离线任务很有可能会频繁、长期占用各种资源,从而让在线任务没有机会调度,或者调度不及时,或者获取不到带宽等等,从而出现在线业务 RT 急剧升高的情况。所以在这种场景下我们需要必要的手段来对在线和离线容器进行资源使用上的隔离,来确保在线高优容器在使用资源时可以及时地获取,最终能够在提升整体资源使用率的情况下保障高优容器的 QoS。

下面让我们一起看看在线和离线混跑时可能出现的情况:

  • 首先,CPU 是最有可能面对在离线竞争的,因为 CPU 调度是核心,在线和离线任务可能分别会调度到一个核上,相互抢执行时间;
  • 当然任务也可能会分别跑到相互对应的一对 HT 上,相互竞争指令发射带宽和其他流水线资源;
  • 接下来 CPU 的各级缓存必然是会被消耗掉的,而缓存资源是有限的,所以这里涉及到了缓存资源划分的问题;
  • 即使我们已经完美解决了各级缓存的资源划分,问题仍然存在。首先内存是 CPU 缓存的下一级,内存本身也类似,会发生争抢,不论在线或离线任务,都是需要像 CPU 缓存一样进行内存资源划分的;
  • 另外当 CPU 最后一级缓存 (Last Level Cache, LLC) 没有命中的时候,内存的带宽(我们称之为运行时容量,以有别于内存大小划分这种静态容量)会变高,所以内存和 CPU 缓存之间的资源消耗,是相互影响的;
  • 假设 CPU 和内存资源都没问题,对于本机来说现在隔离已经做得很好了,但是在线高优的业务和离线任务的运行过程中都是和网络有密切的关系,那么很容易理解,网络也可能是需要隔离的;
  • 最后,线上部分机型对 IO 的使用可能会发生抢占,我们需要有效的 IO 隔离策略。

以上就是一个很简单的资源隔离流程的思路,可以看到每一环都有可能会出现干扰或者竞争。

隔离技术方案介绍:独有的隔离技术方案,各显神通

内核资源隔离技术主要涉及内核中的调度、内存和 IO 这三大子系统,这些技术基于 Linux Cgroup V1 提供资源的基本隔离划分以及 QoS 保障,适用于容器云场景,同时也是大规模化混合部署方案所强依赖的关键技术。

除了基本的 CPU、内存和 IO 资源隔离技术外,我们也研发了资源隔离视图、资源监控指标 SLI (Service Level Indicator) 以及资源竞争分析等配套工具,提供包括监控、告警、运维、诊断等在内的整套资源隔离和混部解决方案,如下图所示:

图片 2.png

弹性容器场景的调度器优化

如何保证计算服务质量的同时尽可能提高计算资源利用率,是容器调度的经典问题。随着 CPU 利用率不断提升,CPU 带宽控制器暴露出弹性不足的问题日趋严重,面对容器的短时间 CPU 突发需求,带宽控制器需要对容器的 CPU 使用进行限流,避免影响负载延迟和吞吐。

CPU Burst 技术最初由阿里云操作系统团队提出并贡献到Linux社区和龙蜥社区,分别在 Linux 5.14 和龙蜥ANCK 4.19 版本被收录。它是一种弹性容器带宽控制技术,在满足平均 CPU 使用率低于一定限制的条件下,CPU Burst 允许短时间的 CPU 突发使用,实现服务质量提升和容器负载加速。

在容器场景中使用 CPU Burst 之后,测试容器的服务质量显著提升,如下图所示,在实测中可以发现使用该特性技术以后,RT长尾问题几乎消失。

图片 3.png

Group Identity 技术

为了满足业务方在 CPU 资源隔离上的需求,需要在满足 CPU 资源利用最大化的情况下,保证高优业务的服务质量不受影响,或将影响范围控制在一定范围内。此时内核调度器需要赋予高优先级的任务更多的调度机会来最小化其调度延迟,并把低优先级任务对其带来的影响降到最低,这是行业中通用的需求。

在这样的背景下,我们引入了 Group Identity 的概念,即每个 CPU Cgroup 会有一个身份识别,以 CPU Cgroup 组为单位实现调度特殊优先级,提升高优先级组的及时抢占能力确保了高优先级任务的性能,适用于在线和离线混跑的业务场景。当在离线混部时,可以最大程度降低由于离线业务引入的在线业务调度不及时的问题,增加高优先业务的 CPU 抢占时机等底层等核心技术保障在线业务在 CPU 调度延迟上不受离线业务的影响。

SMT expeller 技术

在某些线上业务场景中,使用超线程情况下的 QPS 比未使用超线程时下降明显,并且相应 RT 也增加了不少。根本原因跟超线程的物理性质有关,超线程技术在一个物理核上模拟两个逻辑核,两个逻辑核具有各自独立的寄存器(eax、ebx、ecx、msr 等等)和 APIC,但会共享使用物理核的执行资源,包括执行引擎、L1/L2 缓存、TLB 和系统总线等等。这就意味着,如果一对 HT 的一个核上跑了在线任务,与此同时它对应的 HT 核上跑了一个离线任务,那么它们之间是会发生竞争的,这就是我们需要解决的问题。

为了尽可能减轻这种竞争的影响,我们想要让一个核上的在线任务执行的时候,它对应的 HT 上不再运行离线任务;或者当一个核上有离线任务运行的时候,在线任务调度到了其对应的 HT 上时,离线任务会被驱赶走。听起来离线混得很惨对不对?但是这就是我们保证 HT 资源不被争抢的机制。

SMT expeller 特性是基于 Group Identity 框架进一步实现了超线程 (HT) 隔离调度,保障高优先级业务不会受到来自 HT 的低优先级任务干扰。通过 Group Identity 框架进一步实现的超线程调度隔离,可以很好保障高优先级业务不会受到来自对应 HT 上的低优先级任务的干扰。

处理器硬件资源管理技术

我们的内核架构支持 Intel®Resource Director Technology(Intel®RDT),它是一种处理器支持的硬件资源管理技术。包括监控 Cache 资源的 Cache Monitoring Technology (CMT) ,监控内存带宽的 Memory Bandwidth Monitoring (MBM),负责 Cache 资源分配的 Cache Allocation Technology(CAT) 和监控内存带宽的 Memory Bandwidth Allocation(MBA)。

其中,CAT 使得 LLC(Last Level Cache) 变成了一种支持 QualityofService(QoS) 的资源。在混部环境里面,如果没有 LLC 的隔离,离线应用不停的读写数据导致大量的 LLC 占用,会导致在线的 LLC 被不断污染,影响数据访问甚至硬件中断延迟升高、性能下降。

MBA 用于内存带宽分配。对于内存带宽敏感的业务来说,内存带宽比 LLC 控制更能影响性能和时延。在混部环境里面,离线通常是资源消耗型的,特别是一些 AI 类型的作业对内存带宽资源的消耗非常大,内存占用带宽一旦达到瓶颈,可能使得在线业务的性能和时延成倍的下降,并表现出 CPU 水位上升。

Memcg 后台回收

在原生的内核系统中,当容器的内存使用量达到上限时,如果再申请使用内存,则当前的进程上下文中就会进行直接内存回收的动作,这无疑会影响当前进程的执行效率,引发性能问题。那我们是否有方法当容器的内存达到一定水线的时候让其提前进行内存的异步回收?这样就有比较大的概率避免容器内的进程在申请使用内存时由于内存使用达到上限而进入直接内存回收。

我们知道在内核中有一个 kswapd 的后台内核线程,用来当系统的内存使用量达到一定水位以后来进行异步的内存回收。但是这里有一种情况,比如当前高优业务容器的内存使用已经达到一个比较紧张的状态,但是宿主机总体的空闲内存还有很多,这样内核的 kswapd 的线程就不会被唤醒进行内存回收,导致这些内存使用压力大的高优容器的内存没有机会被回收。这是个比较大的矛盾。由于目前原生内核中没有 memory Cgroup 级别的内存异步回收机制,也就是说容器的内存回收严重依赖宿主机层面的 kswapd 的回收或者只能依靠自己的同步回收,这会严重影响一些高优容器的业务性能。

基于以上背景,阿里云操作系统团队提供了一个类似宿主机层面的 kswapd 的基于 Memcg 的异步回收策略,可以根据用户需求提前进行容器级别的内存回收机制,做到提前内存释压。

具体的异步回收过程可以通过下面这幅图进行描述:

图片 4.png

Memcg 全局水位线分级

通常资源消耗型的离线任务时常会瞬间申请大量的内存,使得系统的空闲内存触及全局 min 水线,引发系统所有任务进入直接内存回收的慢速流程,这时时延敏感型的在线业务很容易发生性能抖动。此场景下,无论是全局 kswapd 后台回收还是 Memcg 级别的后台回收机制,都是无能为力的。

我们基于 "内存消耗型的离线任务通常对时延不敏感" 这样一个事实,设计了 "Memcg的全局 min 水线分级功能" 来解决上述抖动难题。在标准 upstream 全局共享 min 水线的基础上,将离线任务的全局 min 水线上移让其提前进入直接内存回收,同时将时延敏感的在线任务的全局 min 水线下移,在一定程度上实现了离线任务和在线任务的 min 水线隔离。这样当离线任务瞬间大量内存申请的时候,会将离线任务抑制在其上移的 min 水线,避免了在线任务发生直接内存回收,随后当全局 kswapd 回收一定量的内存后,离线任务的短时间抑制得以解除。

核心思想是通过为在离线容器设置不同标准的全局水位线来分别控制其申请内存的动作,这样能让离线容器的任务在申请内存时先与在线业务进入直接内存回收,解决离线容器瞬间申请大量内存引发的问题。

对 Linux 内存管理有一定基础的同学也可以查阅下面这幅图,详细记录了在离线容器混部过程中多种水位线作用下的走势:

图片 5.png

Memcg OOM 优先级

在真实的业务场景中,特别是内存超卖环境,当发生 Global OOM 的时候,有理由去选择杀掉那些优先级比较低的离线业务,而保护高优先级在线业务;当发生离线 Memcg OOM 的时候,有理由去选择杀掉那些优先级比较低的作业,而保高优先级离线作业。这其实是云原生场景中一个比较通用的需求,但是目前的标准 Linux 内核并不具备这个能力。在选择杀进程的时候,内核会有一个算法去选择 victim,但通常是找一个 OOM score 最大的进程杀,这个被杀的进程有可能是在线高优业务进程,这并不是我们想看到的。

基于以上原因,阿里云操作系统团队提供了一个 Memcg OOM 优先级的特性,通过该特性我们可以保障在系统由于内存紧张而发生 OOM 时通过选择低优的业务进程进行 Kill,从而避免高优业务进程被杀的可能,可以大幅降低由于在线业务进程退出而给客户业务带来的影响。

CgroupV1 Writeback 限流

Block IO Cgroup 自合入内核之后,一直存在一个问题,就是只能对 Direct IO 进行限流 (buffer IO 之后短期内执行 fsync 也可以限流),因为这些 IO 到达 Block Throttle 层时,当前进程就是真正发起 IO 的进程,根据进程可以获取到相应的 Cgroup 从而正确记账,如果超过了用户设置的带宽 /IOPS 上限,则进行限制。对于那些 buffer 写,且最终由 kworker 线程下发的 IO,Block Throttle 层无法通过当前进程获取 IO 所属的 Cgroup,也就无法对这些 IO 进行限流。

基于以上背景,目前在 Cgroup V2 版本中已经支持异步 IO 限流,但是在 Cgroup V1 中并不支持,由于目前在云原生环境下主要还是使用 Cgroup V1 版本,阿里云操作系统团队通过建立 Page <-> Memcg <-> blkcg 这三者的关系实现了在 Cgroup V1 中对 IO 异步限流的功能,限流的主要算法基本上和 Cgroup V2 保持一致。

blk-iocost 权重控制

正常情况下,为了避免一个 IO 饥饿型作业轻易耗尽整个系统 IO 资源,我们会设置每个 Cgroup 的 IO 带宽上限,其最大缺点是即使设备空闲,配置上限的 Cgroup 在其已发送 IO 超过上限时不能继续发送 IO,引起存储资源浪费。

基于以上需求,出现了一种 IO 控制器 - IOCOST,该控制器是基于 blkcg 的权重来分配磁盘的资源,可以做到在满足业务 IO QOS 的前提下,尽最大程度利用磁盘的 IO 资源,一旦出现磁盘 IO 能力达到上限导致触及 QOS 设置的目标时,此时 iocost 控制器会通过权重来控制各个 group 的 IO 使用,在此基础上,blk-iocost 又拥有一定的自适应能力,尽可能的避免磁盘能力被浪费。

展望与期待

以上所有这些的资源隔离能力目前已经完全贡献给了龙蜥社区,相关源码可以参考ANCK(Anolis Cloud Kernel),有兴趣的同学可以关注龙蜥社区:OpenAnolis 龙蜥操作系统开源社区  

同时,阿里云容器服务团队也正在与操作系统团队合作,通过阿里云容器服务 ACK 敏捷版及 CNStack(CloudNative Stack) 产品家族对外输出,持续落地 ACK Anywhere,为更多企业赋能。在商用化版本里,我们将完全基于云原生社区标准,以插件化的方式无缝的安装在 K8s 集群为输出形态线下交付客户。其中核心的 OS 层隔离能力,已经发布到支持多架构的开源、中立、开放的 Linux 操作系统发行版-龙蜥(Anolis OS)中。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索PCIe 3.0峰值性能,长江存储推新消费级固态硬盘致态TiPlus5000

2022年4月8日&#xff0c;长江存储推出新款消费级固态硬盘产品致态TiPlus5000。该产品采用基于晶栈 2.0&#xff08;Xtacking 2.0&#xff09;架构的长江存储第三代三维闪存芯片&#xff0c;支持PCIe Gen3x4接口、NVMe 1.3协议&#xff0c;顺序读取速度高达3500 MB/s&#xff0…

“敏捷版”全链路压测

简介&#xff1a; PTS 结合 10 多年来阿里的全链路压测的经验&#xff0c;让阿里云的用户可以如同享用满汉全席般的享用全套标准的全链路压测&#xff0c;也可以根据自己的需求&#xff0c;选择最适合自己的方式。 作者&#xff1a;子矜 客户的故事 全链路压测被誉为大促备战…

linux传输tcp命令,Linux tcpdump命令帮助和示例

Tcpdump是用于网络数据包分析的基本命令行实用工具。它显示网络上的TCP/IP和其他传输的网络数据包&#xff0c;tcpdump 适用于大多数的类Unix系统操作系统(如Linux,BSD等)。类Unix系统的 tcpdump 需要使用libpcap这个捕捉数据的库就像 Windows下的WinPcap。Tcpdump使用libpcap库…

离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进

简介&#xff1a; 阿里云智能研究员 林伟 &#xff1a;阿里巴巴从湖到仓的演进给我们带来了湖仓一体的思考&#xff0c;使得湖的灵活性、数据种类丰富与仓的可成长性和企业级管理得到有机融合&#xff0c;这是阿里巴巴最佳实践的宝贵资产&#xff0c;是大数据的新一代架构。 林…

Kubernetes 入门教程

简介&#xff1a;本文是一篇 kubernetes&#xff08;下文用 k8s 代替&#xff09;的入门文章&#xff0c;将会涉及 k8s 的架构、集群搭建、一个 Redis 的例子&#xff0c;以及如何使用 operator-sdk 开发 operator 的教程。在文章过程中&#xff0c;会穿插引出 Pod、Deployment…

linux格式化usb设备,如何在 usb linux下格式化磁盘

慕田峪7331174以格式化 /dev/sda1 分区为例&#xff1a;$ sudo umount /dev/sda1# 必须先卸载该分区# 格式化为 FAT 分区$ sudo mkfs.vfat -F 32 /dev/sda1# -F 参数必须大写&#xff0c;参数有 12&#xff0c;16 和 32&#xff0c;分别对应 FAT12&#xff0c;FAT16&#xff0c…

通过浪潮AIStation实现细粒度高性能的GPU资源共享

作者 | 张荣国 供稿 | 浪潮 GPU&#xff08;Graphics Processing Unit&#xff09;&#xff0c;即图形处理器&#xff0c;是一种由大量核心组成的大规模并行计算架构&#xff0c;专为同时处理多重任务而设计。GPU在大规模并行运算上具有巨大优势&#xff0c;为大数据、人工智能…

阿里云发布云原生加速器,携手生态企业拥抱数字时代

简介&#xff1a; 继去年推出云原生合作伙伴计划之后&#xff0c;阿里云正式发布云原生加速器&#xff0c;携手生态企业拥抱数字时代。 今天&#xff0c;千行百业都在拥抱云计算、拥抱云原生&#xff0c;进行数字化创新升级。作为国内最早实践云原生的企业&#xff0c;阿里巴巴…

网不好怎么办?TLS握手带宽直降80%,BabaSSL是怎么做到的?| 龙蜥技术

简介&#xff1a; 为了保障数据的安全性&#xff0c;客户端会先和服务器进行 TLS 握手&#xff0c;有什么办法可以减少 TLS 握手的带宽消耗呢&#xff1f; 编者按&#xff1a;BabaSSL 是一款开源的密码库产品&#xff0c;在 GitHub 和龙蜥社区开源&#xff0c;并加入到龙蜥社区…

企业级数据湖实践

简介&#xff1a;2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能高级解决方案架构师周皓为我们带来《企业级数据湖最佳实践》的分享。 本文主要分享了数据湖的核心能力及几个最佳实践案例。 以下是精彩视频内容整理 一、统一数据存储&#xff0c;多引擎对接&…

浅述 Docker 的容器编排

作者 | 天元浪子来源 | CSDN博客概述作为容器引擎&#xff0c;Docker为容器化的应用程序提供了开放标准&#xff0c;使得开发者可以用管理应用程序的方式来管理基础架构&#xff0c;实现快速交付、测试和部署代码。随着容器的大量使用&#xff0c;又产生了如何协调、调度和管理…

Cloudera CDP 企业数据云测试开通指导

简介&#xff1a; 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段&#xff0c;本文详细介绍了相关试用/试用流程。 基于阿里云部署的 Cloudera CDP 企业数据云平台已经进入公测阶段&#xff0c;如对该平台感兴趣&#xff0c;可以使用下面的流程进行试用。 如需…

重装linux之后gcc等下载不了,Redhat linux下安装gcc

一、安装步骤1、使用whichgcc命令发现gcc没有安装2、拷贝gcc-3.2.2-5.i386.rpm 尝试安装说明在这之前还需要先装binutils、cpp、glibc-devel这三个包3、拷贝binutils-2.13.90.0.18-9.i386.rpmcpp-3.2.2-5.i386.rpmglibc-devel-2.3.2-11.9.i386.rpm 到install目录分别安装rpm -i…

解决 Serverless 落地困难的关键,是给开发者足够的“安全感”

简介&#xff1a;越来越多的云产品都会向全托管、Serverless 形态演进。当云的产品体系 Serverless 化达到一个临界值&#xff0c;通过函数计算这样的 Serverless 计算服务结合其他 Serverless 形态的云服务&#xff0c;能够完整的实现整个应用时&#xff0c;Serverless 就会变…

如何通过任务调度实现百万规则报警

简介&#xff1a;报警是一个公司的日常需求&#xff0c;常见的形态除了满足运维过程中的基础设施监控报警&#xff08;CPU/内存/磁盘等&#xff09;之外&#xff0c;部分公司也会在应用指标&#xff08;如 QPS、RT 等&#xff09;及业务指标&#xff08;如 GMV/日活 等&#xf…

linux无法关机 grub2,Ubuntu关机卡住无法关机如何解决?

电脑无法关机是最让人头疼的事&#xff0c;在Ubuntu系统中&#xff0c;有时会遇到关机卡住的情况&#xff0c;导致关不了机&#xff0c;遇到这种情况千万不要强制关机&#xff0c;下面小编就教你如何解决这个问题。解决方案&#xff1a;在终端用sudo vi打开/boot/grub/grub.cfg…

不用跑项目,组件效果所见即所得,绝了!

作者 | 零一来源 | 前端印象大家好&#xff0c;看到一个好东西&#xff0c;忍不住来分享一下。我们在写需求时都会封装一些组件&#xff0c;然后会为该组件定义一些 props &#xff0c;使其跟业务分离&#xff0c;变得更通用。写完组件后需要验证一下组件的效果&#xff0c;也就…

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

简介&#xff1a;本文将介绍如何在 Kubernetes 上构建新的应用管理平台&#xff0c;提供一层抽象以封装底层逻辑&#xff0c;只呈现用户关心的接口&#xff0c;使用户可以只关注自己的业务逻辑&#xff0c;管理应用更快更安全。 作者&#xff1a;司徒放 导语&#xff1a;云原生…

我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?

简介&#xff1a;在今年的天猫双 11 中&#xff0c;中间件支撑了 5403 亿的交易量&#xff0c;并全面升级到了公共云架构。 此次的架构升级&#xff0c;是以开源为内核、以公共云为基础、以 OpenAPI 进行解偶扩展&#xff0c;在架构上&#xff0c;对开源、自研、商业化进行统一…

两台电脑usb直连 linux,两台电脑怎么传文件没有网线(两台电脑usb直连)

对于两台电脑的数据传输而言&#xff0c;当下可通过各类社交(QQ&#xff0c;陌陌、微信.....)、传输(飞鸽传书、360快传......)软件都可以实现但由于各类软件需要下载安装以及相关软件学习使用成本&#xff0c;迫使很多用户都放弃了这种想法那么&#xff0c;今天我们对两台需要…