`
netcome
  • 浏览: 479929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AIX 5L 性能优化,第 1 部分: 监视 CPU

    博客分类:
  • AIX
阅读更多

From DW China

关于本系列

本系列文章由三部分组成,重点介绍中央处理器 (CPU) 性能和监视的各个方面。本系列文章的第一部分概述了有效监视 CPU 的方法,讨论性能优化的方法,并从正反两方面考虑可能影响性能的因素。本系列文章的第一部分虽然详细说明了一些命令,但第二部分将更集中于实际 CPU 系统监视的细节,以及分析趋势和结果。第三部分则专注于通过主动控制线程使用和其他方法在最大程度上优化您的 CPU 性能。在整个系列文章中,我还将详细说明 AIX® CPU 性能优化和监视方面的各种最佳实践。

引言

作为一名 AIX 管理员,您应该已经了解性能优化的一些基础知识。您很可能已经在使用各种命令,如 vmstat 或 topas,并且熟悉识别占用大量 CPU 资源的进程的方法。有一点您可能并不了解,CPU 性能优化不仅仅是关于运行某些命令,它还涉及主动监视您的系统,特别是在不存在性能问题时。本文介绍 CPU 性能优化的方法,并提供经过时间验证的步骤,可以帮助您完成整个优化过程。在本文中,我将介绍您可能希望使用的一些监视工具,概述 POWER 芯片和可能会影响性能的考虑因素。

即使对于大多数资深管理员来说,虚拟化环境中的性能也带来了一种挑战,因此我还会详细说明虚拟化环境中的特定问题,包括同步多线程 (SMT)、虚拟处理器以及 POWER Hypervisor。我还将讨论在调整 CPU 的过程中需要特别关注的领域,包括调整调度程序、平衡系统负载,以及更改调度程序的算法以优化优先级公式。在调查性能问题时,从监视 CPU 使用率的统计数据入手。持续观察系统的性能非常重要,这是因为需要对过载的系统数据与正常使用的数据(作为基准)进行比较。因为 CPU 是系统中最快的组件,因此如果 CPU 使用率使 CPU 保持 100% 忙碌,那么也会影响系统范围的性能。如果发现系统使 CPU 保持 100% 忙碌,则需要调查导致这种情况发生的进程。AIX 提供了许多分别针对系统和进程(或同时针对系统和进程)的跟踪和分析工具。在 CPU 受限的系统中,所有处理器都是 100% 忙碌的,并且一些作业可能正处在运行队列中等待 CPU 时间。通常来说,如果某个系统的 CPU 是 100% 忙碌,并且相对于 CPU 的数目来说拥有大规模的运行队列,以及具有更为频繁的上下文切换,那么该系统很有可能成为 CPU 受限系统。这是快捷但非恰当的判断方法,并且我敢确定您会发现更多的判断方法。

优化方法

在本部分中,我们将了解几种 AIX 优化的方法。

建立基准

在优化乃至启动监视之前,必须先建立一个基准。基准是当系统运行良好时的情况快照。基准不应该仅仅捕获性能类型的统计数据,还应该记录系统的实际配置(内存大小、CPU 数量以及硬盘容量)。如果不记录系统配置,则无法进行同类比较。这在分区系统中尤为重要,您可以在极短时间内进行动态逻辑分区 (DLPAR)。要得到适当的基准,您需要确定监视所使用的工具。有许多可供您在 AIX 5.3 中使用的工具,其中一些工具更适用于分区和虚拟化环境(例如,lparstat 和 mpstat)。一些更通用的工具通常可用于所有版本的 UNIX®,其中包括 vmstat、sar 和 ps。还有一些 AIX 专用的实用工具,包括 topas、procmon,以及一些部分受支持的工具,如 nmon。如果您已经确定了监视工具,就需要开始收集统计数据和性能度量数据。这有助于定义给定系统的可接受性能水平。再次重申,应该在接听可怕的电话之前开始跟踪问题。您需要了解运行良好的系统所表现的特点。还应该与相应的应用和功能团队协作确定运转良好的系统的精确定义。此时,您可以将该定义转换为服务水平协议 (SLA),准备征得客户的正式同意。

压力测试和监视

此方法的第二步是压力测试和监视部分。现在需要监视系统在高峰负载和故障期间的情况。这有助于准确确定系统的问题所在。这确实是 CPU 瓶颈,还是与内存或 I/O 的关系更为密切?在此步骤中,我喜欢使用多种监视工具来帮助验证所发现的问题。我可能使用交互式工具(如 vmstat),然后使用捕获工具(如 nmon)来帮助我跟踪数据历史记录。此监视步骤非常关键,因为如果没有准确记录系统运行(特别是承受压力期间)的历史数据,就无法有效地优化任何功能。此时建立系统的性能策略非常重要。您可以在监视过程中制定相关措施,并根据历史数据对这些措施进行分析,然后在压力测试阶段进一步分析。

识别瓶颈

对系统进行压力测试和监视的目的是为了确定瓶颈。若不作出正确诊断,就无法对症下药。如果系统实际上是 CPU 受限的,就可以运行其他工具(如 trace、curt、splat、tprof 和 ps)来进一步确定导致瓶颈的实际进程。还有可能您的系统实际上是内存或 I/O 受限,而非 CPU 受限。修复某个瓶颈可能会导致 CPU 瓶颈,这是因为系统现在允许 CPU 以最佳化性能运行,而 CPU 本身可能没有能力处理额外增加的资源量。我经常看到这种情况出现,这不一定是一件坏事。恰恰相反,它最终可以帮助您隔离所有的瓶颈。您会发现监视和优化系统是一个极具变化的过程,且并非总是可以预测的。这就是让性能优化变得如此具有挑战性的原因。

优化瓶颈

在您最终确定瓶颈之后,就到了对瓶颈进行调整的时候了。对于 CPU 瓶颈,通常有四种解决方案可供选择:

  • 平衡系统负载——在不同的期间运行进程,从而更有效地利用每天的 24 小时。
  • 使用 nice 或 renice 优化调度程序——可帮助您为运行进程分配不同的优先级,以避免占用大量 CPU 资源。
  • 使用 schedo 调整调度程序算法,从而优化优先级公式——可以使用 schedo 调整 AIX 中的各种参数。例如,schedo 命令可用于更改操作系统在调用调度程序以选择运行其他进程之前允许给定进程运行的时间(时间片)。此时间间隔的默认值为单个指令周期(10 毫秒)。时间片调整参数允许用户指定时间片长度增加的时钟计时数。


    清单 1. 时间片调整参数
                            
    # schedo -a | grep timeslice 
                         timeslice = 1
    

  • 增加资源——添加更多的 CPU,或者在虚拟化环境中重新配置您的逻辑分区 (LPAR)。这可能包括设置无上限分区或向现有分区添加更多的虚拟处理器。适当地虚拟化您的分区环境有助于提高物理资源使用率,减少特定 LPAR 上的 CPU 瓶颈,以及减少任务不繁忙的 LPAR 上的空闲容量的开销。

其他一些 CPU 调整命令包括 smtctbindintcp 和 bindprocessor

重复

现在必须再次逐步完成此过程,从压力测试和监视部分的第二步开始。只有通过重复测试和持续监视您的系统,才能确定调整是否确实起作用。我了解一些管理员仅仅是基于针对特定应用程序的最佳实践调整某些参数,然后就开始进行其他工作了。最糟糕的事情莫过于此。首先,在其他环境中有效的调整也许并不适合您的环境。更重要的是,如果不观察数据,您如何能确实了解所作的调整是否有助于解除瓶颈?再次重申,AIX 性能优化是动态的过程,为了切实获得成功,您需要持续监视您的系统,而这只有在建立基准和 SLA 之后才能实现。如果不能定义运行良好的系统的行为,那么您如何能够定义运行不佳的系统的行为?如果等到您接到前面提到过的电话才进行这些工作,恐怕为时已晚。

CPU

POWER 体系结构表示带有增强的 Risc 功能的“功率优化”,并且是当今 IBM 中型服务器所使用的处理器。它是 801 CPU 的衍生产品,也是第二代基于 RISC 的处理器。它最初于 1990 年推出,用于支持 UNIX RS6000® 系统。POWER4 是首款 64 位对称多处理器,于 2001 年发布。它成为 IBM Regatta 服务器的内在驱动力量,并支持逻辑分区。POWER5 体系结构于 2003 年推出,每个处理器包含 2.76 亿个晶体管。POWER5 基于 130 纳米铜和绝缘硅 (SOI) 工艺,并具有以下特性:

  • 芯片多处理
  • 更大的缓存
  • 芯片上集成内存控制器
  • SMT
  • 高级电源管理
  • 改进的 Hypervisor 技术
POWER5 的设计支持多达 256 个 LPAR,并且可同时用于它的 pSeries® 和 iSeries™ 服务器。这一采用 SMT 技术的双核处理器是利用 SOI 设备和铜互连技术制造的。SOI 技术用于减少器件电容和提高晶体管性能。POWER5 实际上是 IBM 第二代双核微处理器芯片,并且为支持更细粒度和更灵活的分区提供了创新和改进的功能。此外,它还分别使用双芯片模块 (DCM) 和多芯片模块 (MCM) 作为其中端服务器和高端服务器的基本构建块。

 

POWER5 芯片的一些更重要的创新还包括:

  • 增强的内存子系统
  • 改进的 L1 缓存设计
  • 新的替换算法(LRU 与 FIFO)
  • 更大的 L2 缓存
  • 1.9 MB,10 路集相关
  • 改进的 L3 缓存设计
  • 允许 L2 缓存更高的未命中率
  • 避免在芯片结构之间通信
  • 芯片上 L3 目录和内存控制器
  • 芯片上 L3 目录可以减少发生 L2 未命中之后的离片延迟
  • 改进的预取算法
  • 增强的性能
  • SMT
  • 对微分区的硬件支持

也许 POWER5 处理器的最重要创新包括对微分区和 SMT 的支持,这同样需要得到 AIX 5L Version 5.3 的支持。微分区提供在多个分区之间共享单个处理器的能力。这些分区被称为共享处理器分区。当然,基于 POWER5 的系统继续支持具有专用处理器的分区,这类分区不与其他分区共享单个物理处理器。

在共享分区环境中,POWER Hypervisor 为共享分区调度和分配来自一组物理处理器的处理器权限。该物理处理器集合被称为共享处理器池。处理器权限在每轮 Hypervisor 的调度循环中进行分配。在每个轮次中,分区消耗或放弃被授予的处理器权限。图 1 显示了在微分区环境中的共享和专用分区的示例。


图 1. 在微分区环境中的共享和专用分区的示例
在微分区环境中的共享和专用分区的示例 

SMT

SMT 能够在单个物理处理器上并行调度来自多个硬件线程的指令。在 AIX 5L Version 5.3 中,使用一个物理处理器创建的专用分区实际上被默认配置为逻辑 2 路。从本质上讲,两个硬件线程实际上可以同时在一个物理处理器中运行。虽然存在一些独立环境,在其中调整 SMT 可能对性能造成负面影响,但是 SMT 在大多数情况下都是最佳选择,特别是在整体吞吐量比单个线程的吞吐量更重要时。作为 POWER5 的独特双核设计和对 SMT 支持的结果,一个 POWER5 芯片对于操作系统实际上表现为 4 路微处理器。使用 SMT 技术的处理器可以在单个周期中发出多个来自不同代码路径的指令。图 2 是 DCM 的图示,清晰地显示了 SMT 和芯片自身的关系。


图 2. 双芯片模块
双芯片模块 

让多个线程在不同的 CPU 上面运行允许有效利用 IBM SMT 技术。当系统处于 SMT 模式下时,处理器可以从多个线程中获取指令。除 POWER5 体系结构之外,SMT 的概念还基于在同一时间内任何单个线程都不能使用所有的处理器执行单元。POWER5 设计实现了在每个芯片的内核中提供 2 路 SMT。因此,每个物理处理器内核可提供两个虚拟处理器。SMT 所产生的最大收益体现在特定的商业环境中,其中单个事务的处理速度的重要性低于可执行的事务总数的重要性。此外,SMT 增加了大型工作集(如数据库和 Web 服务器)的负载吞吐量。通常来说,SMT 预计会带来约 30% 的性能提升。

SMT 实现如何与 AIX 调度程序相关?由于在 4 路分区中,内核可以将两个硬件线程看作是单独的逻辑处理器,因此调度程序会让进程运行于同一处理器内核的两个硬件线程中,从而导致另外一个处理器内核处于空闲。因为 POWER5 能识别多线程,因此它可以区分相同或不同处理器上的线程。调度程序实际上优先将线程分派到主线程。当启用时,硬件可以在专用分区上的单个线程和 SMT 之间进行动态切换。在共享分区上可以使用 smtctl 进行手动切换。要查看处理器,可以使用以下命令:


清单 2. 查看处理器
                

//To view all processors (logical and physical):

# bindprocessor -q  
The available processors are:  0 1 2 3

//To view the physical processors

# bindprocessor -s 0
The available processors are:  0 2

//To view the SMT enables processors.
# bindprocessor -s 1
The available processors are:  1 3

Hypervisor 和虚拟分区

IBM p5 系统虚拟化的内在技术源自一片被称为 POWER Hypervisor 的固件,它位于闪存中。该固件执行 POWER5 处理器的虚拟化和配置任务,以及为 IBM p5 服务器上并发运行的多达 254 个分区提供必要的虚拟化支持。POWER Hypervisor 占用一些系统处理器和内存资源。它对于性能的影响相对于大多数负载来说都非常微小,但是这种影响随着页面映射活动量的增加而提高。只有考虑到 Hypervisor 才能进行实际的优化。在早期版本中,当取消分区上限时通常需要考虑限制虚拟处理器的数量。这是由使用虚拟处理器所带来的开销造成的。从 AIX 5.4 ML3 开始,AIX 引入了虚拟处理器合并。虚拟处理器合并是指允许空闲虚拟处理器睡眠,并且仅在需要满足负载需求时才唤醒。然后将这些虚拟处理器的权限基于需求重新分配给位于共享处理器池中的客户分区的其他虚拟处理器。参数是 vpm_xvcpus,可以使用 schedo 对其进行更改,并且默认为启用。

在共享分区环境中,您需要了解在每段有权使用的处理器时间中都存在一个未使用的时间片。当虚拟处理器或 SMT 线程变为空闲时,它能够将处理器周期还给 Hypervisor,然后 Hypervisor 可以将未使用的处理器周期分派给其他作业。为了在处理器线程级别上收集 CPU 使用情况(在 SMT 环境中),POWER5 体系结构已经实现了新的寄存器,它被称为处理器使用资源寄存器(Processor Utilization Resource Register,PURR)。每个线程都有自己的 PURR。这些单元与 TB 寄存器相同,并且两个线程的 PURR 值的总和等于 TB 寄存器的值。度量处理器使用率的更多传统方法在 SMT 和 SPLAR 环境中倾向于生成错误的结果,这就是 PURR 寄存器针对处理器使用率提供更准确的真实度量的原因。

由于增加了 SMT、微分区以及动态更改某些参数的能力,因此有必要对旧工具进行一些实际更改。如果在微分区环境中启用了 SMT,vmstatiostat 和 sar 命令将自动使用新的基于 PURR 的数据。在 AIX 5L Version 5.3 中,lparstat 命令显示有关大量 POWER Hypervisor 调用的 Hypervisor 统计数据。使用 -h 标志可将汇总的 POWER Hypervisor 统计数据添加到缺省的 lparstat 输出中(请参见清单 3)。


清单 3. 使用 -h 标志生成的 lpartstat 输出
                
# lparstat -h 1 5

System configuration: type=Dedicated mode=Capped smt=On lcpu=4 mem=3920 

%user  %sys  %wait  %idle  %hypv hcalls
-----  ----  -----  -----  ----- ------
  0.0   0.7    0.0   99.3   44.4 5933918 
  0.4   0.3    0.0   99.3   44.9 5898086 
  0.0   0.1    0.0   99.9   45.1 5930473 
  0.0   0.1    0.0   99.9   44.6 5931287 
  0.0   0.1    0.0   99.9   44.6 5931274 
#

结束语

性能优化是系统管理中最具挑战性的工作之一。在可以开始系统优化之前,首先必须了解并遵循性能优化方法,其中包括为您的系统建立基准,监视以及执行有效的压力测试。由 AIX 5.3 和 POWER5 体系结构驱动的 System p™ 服务器包含强大的新功能,可帮助您调整您的 CPU 子系统。我已经讨论了 POWER5 的一些虚拟化功能,其中包括微分区和 Hypervisor。许多命令都针对 POWER5 体系结构中的虚拟化和 Hypervisor 进行了增强。本系列文章的第 1 部分还介绍了一些命令和实用工具,可用于监视和优化性能。在后续部分,我将详细说明这些实用工具,以帮助您确定系统的瓶颈和优化服务器。




参考资料

学习

分享到:
评论

相关推荐

    U盘量产工具SM3280&3281&3282-AvidiaV0209整合版

    U盘量产工具FLASH量产工具SM3280&3281&3282-AvidiaV0209整合版

    java课程期末考试.zip

    java课程期末考试

    分布式消息中间件,参考kafka,未完成.zip

    分布式消息中间件,参考kafka,未完成

    修木工施工规范及流程.docx

    修木工施工规范及流程.docx

    汽车电子中MICROSAR OBD协议栈解决方案及其应用

    内容概要:本文详细介绍了VECTOR提供的MICROSAR OBD协议栈解决方案,涵盖了OBD模块、ECU支持、监控功能和服务请求等方面的内容。此外,还讨论了OBD在不同国家和地区的技术标准与法规要求,以及MICROSAR OBD解决方案的优势,如适应不同项目的需求和高度集成于AUTOSAR 4平台。 适合人群:汽车电子工程师、软件开发者、汽车制造商及相关行业从业人员。 使用场景及目标:① 适用于车辆诊断系统的开发和维护;②帮助工程师理解和掌握OBD协议的具体实施方法和应用场景;③ 提供了一个成熟、可扩展的解决方案,用于满足OBD相关标准和法规的要求。 其他说明:本文不仅提供了技术层面的详细解析,还探讨了实际操作过程中可能遇到的问题和解决方案。同时强调了屏蔽信息过载的重要性,提醒工程师保持内心平静,专注做好本职工作。

    适用于 Python 的 LINE 消息 API SDK.zip

    适用于 Python 的 LINE 消息 API SDK适用于 Python 的 LINE Messaging API 的 SDK。介绍适用于 Python 的 LINE Messaging API SDK 可以轻松使用 LINE Messaging API 开发机器人,您可以在几分钟内创建一个示例机器人。文档请参阅官方 API 文档了解更多信息英语https //developers.line.biz/en/docs/messaging-api/overview/日语https://developers.line.biz/ja/docs/messaging-api/overview/要求Python >= 3.9安装$ pip 安装 line-bot-sdk概要用法from flask import Flask, request, abortfrom linebot.v3 import ( WebhookHandler)from linebot.v3.exceptions import ( InvalidSig

    Java字节码工程工具包.zip

    Java字节码工程工具包Javassist 版本 3版权所有 (C) 1999-2023 Shigeru Chiba,保留所有权利。Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是一个用于编辑 Java 字节码的类库它使 Java 程序能够在运行时定义新类并在 JVM 加载类文件时对其进行修改。与其他类似的字节码编辑器不同,Javassist 提供两个级别的 API源代码级别和字节码级别。如果用户使用源代码级别 API,他们可以编辑类文件而无需了解 Java 字节码的规范。整个 API 仅使用 Java 语言的词汇表进行设计。您甚至可以以源文本的形式指定插入的字节码Javassist 会即时编译它。另一方面,字节码级别 API 允许用户像其他编辑器一样直接编辑类文件。该软件根据 Mozilla 公共许可证版本 1.1、GNU 宽通用公共许可证版本 2.1 或更高版本或 Apache 许可证版本 2.0 分发。文件README.md 此自述文件。Changes.md 发行说明。License.html 许可证文件。tuto

    毕设源码-基于python的西西家居全屋定制系统的设计与实现_ijsj--论文-期末大作业+说明文档.rar

    本项目是基于Python语言开发的西西家居全屋定制系统,旨在为家居行业提供一个高效、智能的定制解决方案。项目涵盖了从客户需求分析、设计方案生成、材料选购到最终订单生成的全过程,力求实现家居定制的数字化和智能化。 在主要功能方面,系统具备强大的客户管理模块,能够详细记录和分析客户的定制需求。设计模块则采用先进的三维建模技术,为客户提供直观、真实的家居设计方案预览。此外,系统还整合了丰富的材料数据库,方便客户根据自身喜好和预算进行材料选择。 框架方面,项目采用了B/S架构,确保了系统的稳定性和可扩展性。后端使用Python的Django框架,前端则结合了HTML、CSS和JavaScript等技术,实现了用户界面的友好和响应速度。 开发此项目的目的,不仅是为了满足家居行业对个性化定制的需求,也为计算机相关专业的学生提供了一个实践和学习的平台,有助于提升他们的实际开发能力。

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念 .zip

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念。Basecamp JavascriptJavascript 是数字化创新的起点,是语言的基础,也是基本概念。嵌套存储库,可作为启动项下待办事项的实践活动。

    已弃用 - Coinbase Python API.zip

    已弃用 — Coinbase Python APICoinbase Coinbase API V2的官方 Python 库。重要提示此库当前针对的是 API V2,而 OAuth 客户端需要 V2 权限(即wallet:accounts:read)。如果您仍在使用 API V1,请使用此库的旧版本。特征接近 100% 的测试覆盖率。支持API Key + Secret和OAuth 2身份验证。调用 API 的便捷方法 - 为您打包 JSON!自动将 API 响应解析为相关的 Python 对象。使用IPython时,所有对象都具有可制表完成的方法和属性。安装coinbase可以在PYPI上使用。使用以下命令安装pippip install coinbase或者easy_installeasy_install coinbase该库目前针对 Python 版本 2.7 和 3.4+ 进行了测试。注意此软件包名称过去是指George Sibble维护的非官方 coinbase_python 库。George 慷慨地允许我们使用此软件包

    基于RBAC权限控制的基础后台.zip

    基于RBAC权限控制的基础后台

    毕设源码-python-基于Python爬虫的网络小说数据分析系统的设计与实现-期末大作业+说明文档.rar

    本项目是基于Python爬虫的网络小说数据分析系统的设计与实现,旨在为计算机相关专业的大学生提供一个实践平台,特别是在毕业设计和项目实战练习方面。项目通过Python强大的网络爬虫技术,从流行的网络小说网站自动抓取数据,包括书籍信息、章节内容、用户评论等。 主要功能涵盖数据采集、数据清洗、数据存储和数据分析。数据采集模块利用Scrapy等爬虫框架高效抓取网页内容;数据清洗模块确保数据的准确性和一致性;数据存储则采用MySQL等数据库系统,便于数据管理和查询;数据分析模块通过Pandas、NumPy等工具进行数据处理和分析,生成多维度的统计报告和可视化图表。 此项目不仅帮助学生掌握Python编程和网络爬虫技术,还能让他们深入了解数据分析的全过程,提升解决实际问题的能力。同时,系统的实现和应用也反映了现代信息技术在文学创作和消费领域的应用价值和潜力。

    ssm框架Java项目源码-基于Java的在线日语培训平台的设计与实现+jsp毕设-大作业.zip

    本项目是一个基于Java的在线日语培训平台的设计与实现,采用SSM框架(Spring+SpringMVC+MyBatis)进行开发,旨在为计算机相关专业的学生提供一个实践和学习的平台,同时也为日语学习者提供一个在线学习的空间。项目中主要功能涵盖了用户管理、课程管理、学习资源上传下载、在线测试与反馈等多个方面。通过该平台,教师能够轻松管理课程内容和学生信息,学生则可以随时随地访问学习资源,参与在线课程和测试,从而提高学习效率和兴趣。 在开发此项目的过程中,我们重点关注了系统的可维护性和可扩展性,确保代码结构清晰,便于后续的功能迭代和优化。此外,通过使用SSM框架,实现了前后端的分离,提高了开发效率和系统的响应速度。该项目不仅能够满足毕设的需求,还能作为Java学习者提升编程能力和实践经验的实用工具。

    基于java的机票管理系统设计与实现.docx

    基于java的机票管理系统设计与实现.docx

    基于Java实现的数据结构设计源码学习指南

    该项目为《基于Java实现的数据结构设计源码》,共包含51个文件,主要由46个Java源文件构成,辅以2个文本文件、1个Git忽略文件、1个许可证文件以及1个XML文件,全面涵盖了数据结构设计的核心内容。

    绿色食品 水稻生产操作规程.docx

    绿色食品 水稻生产操作规程.docx

    这款出色的应用程序可以纠正您之前的控制台命令 .zip

    他妈的 Fuck是一款出色的应用程序,其灵感来自@liamosaur 的 推文,它可以纠正以前控制台命令中的错误。The Fuck太慢了吗?试试实验性的即时模式!更多示例➜ apt-get install vimE: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?➜ fucksudo apt-get install vim [enter/↑/↓/ctrl+c][sudo] password for nvbn:Reading package lists... Done...➜ git pushfatal: The current branch master has no upstream branch.To push the current branch and set the remote

    全国大学生FPGA创新设计竞赛作品 泡罩包装药品质量在线检测平台.zip

    全国大学生FPGA创新设计竞赛作品 “泡罩包装药品质量在线检测平台“.zip

    桃苗木质量基本要求表.docx

    桃苗木质量基本要求表.docx

    使用 Python 漂亮地打印表格数据,这是一个库和一个命令行实用程序 存储库从 bitbucket.org,astanin,python-tabulate 迁移而来 .zip

    使用 Python 漂亮地打印表格数据,这是一个库和一个命令行实用程序。存储库从 bitbucket.org/astanin/python-tabulate 迁移而来。python-tabulate使用 Python、库和命令行实用程序漂亮地打印表格数据。该库的主要用例是轻松打印小表格只需一个函数调用,格式由数据本身引导为轻量级纯文本标记创作表格数据多种输出格式适合进一步编辑或转换混合文本和数字数据的可读表示智能列对齐、可配置数字格式、小数点对齐安装要安装 Python 库和命令行实用程序,请运行pip install tabulate命令行实用程序将在 Linux 上安装为(例如tabulate)或者在 Windows 上的 Python 安装中安装为(例如)。bin/usr/bintabulate.exeScriptsC:\Python39\Scripts\tabulate.exe您可以考虑仅为当前用户安装该库pip install tabulate --user在这种情况下,命令行实用程序将安装到 ~/.local/bin/tabula

Global site tag (gtag.js) - Google Analytics