来自 网络 2021-12-14 07:12 的文章

ddos盾_美国高防vps_精准

ddos盾_美国高防vps_精准

2012年,我们在并行化CodeSonar的分析上做了大量工作,最终在codesonar3.8发布时达到了顶峰。并行分析获得了可观的性能收益:这些图表只检查端到端运行的分析阶段的时间安排,不包括一些(较短的)初步阶段。我不打算详细解释为什么2核的超线性加速是可能的,或者为什么我们在8核机器上看到了接近10倍的加速,但是我向你保证有许多合理的解释。结果是,通过允许CodeSonar运行更多进程,我们大大减少了运行分析所需的时间。此外,多进程(消息传递)体系结构提供了故障隔离:如果一个进程崩溃,防御CC香港服务器,分析仍然可以进行。所以我们可以把这个发给用户,他们会喜欢的,对吧?别这么快。事实证明,确定要运行多少进程是一个棘手的问题。最简单的方法是让用户自己决定。任何熟悉"make"构建系统的人都可能会运行类似"make–j4"的命令来告诉"make"它应该同时运行多达四个作业。这是一种灵活的方法,但是在实践中,大多数用户会忘记指定参数,或者根本不会在第一时间发现它。我们需要更简单的东西。我们可以运行N个进程,其中N是机器上逻辑处理器的数量。这不是个坏主意,尤其是对于每个进程都有适度内存需求的作业。此外,这似乎是一个共同的用户期望。然而,在我们的例子中,每个进程可能需要数百兆内存。如果我们启动过多的进程,事情可能会开始混乱,这很容易使性能比串行分析开始时更糟糕。为了解决内存问题,我们可以测量机器上有多少物理内存。如果机器有4G的物理内存,并且每个进程需要400mb的RAM,那么就有足够的内存来运行10个进程。使用这种方法,多ip自动ddos防御系统,我们可以启动P流程,其中:P=min(处理器,物理内存/400mb)这种方法更安全,因为我们无法在一台拥有1G物理内存和8个内核的机器上启动8个进程,从而导致系统崩溃。但是这里仍然有一个相当严重的问题-我们不是这台计算机上唯一运行的作业。还有其他作业(包括操作系统内核)正在吞噬可用的周期和物理内存。作为一个好公民,我们不应该启动太多的程序,以至于我们最终会从其他表现良好的工作中窃取资源,而这又以打击告终。我们真正应该利用的是没有其他用途的任何备用容量。操作系统通常在共享时钟周期方面比在共享物理内存方面更好。在一个单处理器系统上,在100个进程之间共享周期是很容易的;假设每个进程都是cpu限制的,那么每个进程的运行速度可能都接近1%。很难在100个需要1mb RAM的进程之间共享1mb的RAM—假设通常的抢占式调度程序,性能将明显低于实时速度的1%。所以让我们来关注更糟糕的问题——记忆。颠簸真的很糟糕,需要不惜一切代价加以避免。我们可以询问操作系统有多少可用的物理内存,并使用P:P=min(处理器,可用物理内存/400mb)我们尝试了这个方法,高防cdn举报会死吗,结果还不错;然而,即使在表面上没有做任何事情的机器上,操作系统报告的空闲内存也很少。这并不是完全出乎意料的——现代内核对文件系统缓存的要求很高——它们也可以将机器上的空闲内存用于某些事情,而文件系统缓存可以带来很大的不同。下一步是假设文件系统缓存使用的所有内存都是可供使用的。在CodeSonar的例子中,这并不疯狂,因为它拥有一个userland I/O缓存,但是相对于系统上的其他作业来说,它是反社会的。所以P的新定义是:P=min(处理器,(可用物理内存+缓存内存)/400mb)大多数平台都可以通过适当的诱饵来提供这些信息,但是macosx的"统一"内存管理器却成了一个麻烦。它不区分文件系统缓存页和其他页,而是有"活动"和"非活动"页。因此,我们假设有25%的"非活动"页面可供选择:Pmacosx=min(处理器,(空闲内存+(非活动内存/4))/400mb)这基本上就是CodeSonar决定默认使用多少进程的方式。还有改进的余地吗?当然。如果用户同时启动两个CodeSonar分析会发生什么?他们中的每一个都将决定吞噬所有可用的资源,而不留给另一个。如果文件系统缓存对系统性能很重要呢?性能将受到影响,因为我们将开始打击磁盘。如果机器上的工作负载随着时间的推移而变化呢?我们不会适当地调整进程的数量,导致系统容量不足或过剩。目前,我们对所有这些问题的解决方案是建议用户手动指定分析过程的数量,如果自动调整不能减少分析过程的数量。如果用户希望对不断变化的负载条件做出动态响应,他们可以根据自己选择的方案安排手动启动/停止分析过程。不过,在实践中,用户很少指定进程计数,我敢打赌,他们从来没有费心对不断变化的条件做出动态反应。从这里到哪里去?那么,如何创建具有社会意识的应用程序来消耗可用容量而不会对其他应用程序产生负面影响呢?此外,如何在多个应用程序之间公平地并行运行?我相信操作系统内核处于促进解决方案的最佳位置。它已经协调了计算机上进程的资源需求,而且第三方解决方案似乎不太可能从应用程序开发人员那里获得足够的采纳而获得成功。新功能的接口不需要太复杂。应用程序可能会问另一个进程,比如"这个进程有没有这个?"相反,问一句"您是否建议结束这组流程中的一个流程"是很重要的更具表现力的接口当然是可能的,但这对于当前的用例来说已经足够了。一个缺点是,如果一个类似的过程还不存在,那么就无法询问是否有一个进程的容量,该进程将具有资源需求X、Y、Z。也没有足够的信息提供给操作系统来实现某种近似的公平性。相关技术目前已有一些相关技术。第一个是POSIX"nice"函数/命令。一个声称是"好"的进程建议操作系统在发生争用时将资源让给更重要的进程。这对于时间共享非常有效,但是对于内存争用不是一个好的解决方案,下列无法防御ddos,而且在并行计算的上下文中,可能会决定减慢或暂停正在工作单元中的进程。如果算法对该单元有后续的数据依赖关系,这可能是不需要的,ddos防御中心,因为相关单元将被阻塞。第二个相关的概念是配额(另请参见:Windows作业对象)。这不是我们想要的,因为我们想要的是可用的容量,而不是一些固定的配额。负载平衡显然是相关联的,但通常涉及跨多个系统的负载平衡,而且显然是一个第三方解决方案,具有显著的复杂性包袱和许多相互竞争的实现。随着现代计算机应用程序的资源限制问题变得越来越普遍。我希望这篇文章能促进对这个话题的思考和讨论。由于这是一个资源分配的问题,我们将经常在这个问题上与声纳的工作竞争。