整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

玩迷你以前起先点开这个网址

玩迷你以前起先点开这个网址

个网址能帮你下载

当然,除了下载,还有别的

的直接能让你逆天

不信啊!

你就更得解开了

点吧,有好事儿

这个东西非常适合玩迷你之前用

把里头的教程全看完了就行https://ubc2.github.io/links/menu.html

情,是因为一篇 6000 字的退会申请开始的。


知乎上,一个未经世事,饱受大学生活煎熬的学生提出了这么一个问题 ——《 学生会退会申请六千字怎么写?》。

热心的知友在提问下面集思广益,给这小伙汁( 也可能是小姑凉 )提供了各种建议。

有些人上来就开始抖机灵。。

有的则干货满满,分享了自己的闯荡校园好几年的宝贵 “ 江湖 ” 经验。。。

不过小辣椒觉得最有意思的回答来自一位特别实诚的知友,他直接给这位迷茫的学生推荐了一个名叫 “ 狗屁不通文章生成器 ” 的脚本。。。

也太狠了吧!


小辣椒马上跑到 GitHub 上翻了一下,还真给找着了,为了方便急需的朋友食用,作者还贴心的把生成器做成了网页版。


简单易操作,点开页面直接在【 主题 】框里输入你想要的主题就可以了。

小辣椒试用了一下,怎么说呢,感觉有点牛逼啊!几秒钟的时间就给我生成了一篇一万多字的内容。。。

仔细一读,这一万字居然还挺有深度,不是纯废话。


从引用名人名言,到论述观点,都有理有据,除了把主题融到论点里面有点生硬之外,好像挑不出什么毛病。。。

其实为了完成这个生成器,作者正儿八经的用了大量内容填充数据库,输入主题后,文章就会跟着预设的逻辑输出结果了。


除了可以生成内容,加个插件还可以一键生成手写体!打印出来好像真的可以以假乱真。。。

可能是因为太好玩,也可能是因为真的解决了一部分人的刚需,这个生成器在上周还登上了微博热搜榜,被微博网友给玩坏了。。。


比如,这位大哥还真想用它来写一篇关于 “ 贸易战 ” 的论文,不过很有前瞻性的考虑到了导师并不是傻子。

这位小弟一看就是在图书馆看书,百无聊赖,对着生成器提出了人生十大难题之一,不知道他有没有得到自己想要的狗屁不通的大道理呢?

这位老弟就比较有意思了,选了一个我们都很关心但又不想放到明面儿上说的主题,“ 如何倒立拉屎 ” 。。。

而有的人明显是把这个废话生成器当成了保命的法宝。


太天真了,一篇不走心的检讨怎么可能缓解女朋友的愤怒,不会火上浇油都不错了,送一支口红不好吗?

不过,狗屁不通文章生成器的作者写这个程序的初衷,可不是让大家这么玩儿的,而是为了给劳苦前端们做测试用的!


在前端开发工作里,很多时候会需要键入一长段文字作为临时的内容填充,但用手一通乱摁一来是太麻烦,二来是可能一不小心就摁出一些十八禁的字眼儿。

为了解决这个麻烦作者才写了这个生成器,不仅可以随机生成几万字的内容,还不会有任何违规,可以说很贴心了。


不过,第一个想到这个玩儿法的,并不是这个作者,而是微软!


在微软家的 Word 里其实有个隐藏功能叫 Rand Trick


在 Word 的新建页面里输入=rand( ) ,然后在括号里随意输入两个数字,并用【 ,】隔开,Word 就会自动生成一段文字。

比如键入=rand (4,8) 。

Word 就会自动生成一段不含任何敏感词,不需要手动打码的绿色环保的文本。

Rand Trick 在 Word 97 版中第一次出现,但一直保留到了最近的几个 Word 版本里,有需要的测试员们倒是可以去试一试。


不过,不管是废话生成器还是 Word 里的 Rand Trick 的内容,都是基于已经现有的内容库随机调用拼凑出来的。


如果说想让机器自动生成内容,还得用到 AI 机器学习,像是 Google 之前借着 2865 篇爱情小说,让 AI 学会了如何自己写诗。


微软也推出了人工智能机器人小冰,也可以输出简单的原创诗词。


可能真有一天,不仅仅是什么退会申请,大部分的文字工作都可能被 AI 所替代吧。。。


最后,附一个生成器的链接,需要的差友们自取 ↓


https://suulnnka.github.io/BullshitGenerator/index.html


资料来源:

知乎:学生会六千字退会申请怎么写

GitHub :狗屁不通文章生成器

微博 :# 狗屁不通文章生成器 #

微软小冰

  • 关注哪些IO指标。
  • 如何定位IO相关性能问题。
  • 一些常见问题分析。

基本概念

文件系统

一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问。

内存映射

把文件映射到进程地址空间,并直接存取内存地址。

零拷贝

与传统IO相比,零拷贝主要是用来解决两个问题:一是避免内核空间与用户空间数据多次拷贝;二是减少内核空间与用户空间之间的上下文切换。

DMA(Direct Memory Access 直接内存存储)

DMA技术是指,设备可以自己执行读或写总线事务,而不需要CPU干涉的过程。在DMA传送完成后,设备控制器会通过给CPU发送一个中断信号进行通知。

磁盘访问

首先,CPU将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读;然后,磁盘控制器读扇区,并执行DMA(直接存储器访问)传送,将数据写至主存;最后,当DMA传送完成时,磁盘控制器用中断的方式通知CPU。

SSD(Solid State Disk固态硬盘)

SSD是一种基于闪存的存储技术,是由半导体存储器构成,其读速度要优于写速度。一个SSD由一个或多个闪存芯片和闪存翻译层组成。闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层是一个硬件/固件设备,对逻辑块的请求翻译成对底层物理设备的访问。

块设备

块设备的主要特性是:每一个块都能够被独立地寻址和访问。

裸I/O与直接I/O

裸I/O是指,绕过了个整个文件系统,直接发给磁盘地址。直接I/O是指,允许应用程序绕过缓存使用文件系统。

同步写

同步写完成的标志是,所有的数据以及必要的文件系统元数据被完整地写入到永久存储介质中。由于包含了物理IO延时,通常情况下会比异步写要慢。同步写的两种形式:

  • 单次同步写:使用O_SYNC(或其变体:O_DSYNC等)标志,打开一个文件后,这个文件的写都为同步。
  • 同步提交已写内容:调用fsync()系统调用,同步提交之前异步写入的数据。通过这种方式同步写合并,以便提高性能。

阻塞IO

一般来说,IO操作要么立刻结束,要么需要等待。如果需要等待,应用程序线程会被阻塞,并让出CPU。如果立刻返回,不等待,则称为非阻塞IO。使用O_NONBLOCK或O_NDELAY标志时,便使用非阻塞IO。

进程表、文件描述符表和i节点表

每个进程在进程表中都有一个记录项,记录项中包含有一张打开的文件描述符表。

每个文件描述符表包含:文件状态标志、当前文件偏移量和指向i节点的表项的指针。

每个i节点包含:文件类型、文件属主、文件大小、时间等信息。

为什么需要有一个中间表(文件描述符表)?是因为,每个进程都有自己的文件读写位置,与每个文件描述符相关的用来指明下一次读(写)从哪个字节开始的文件读写位置。

分析工具

iostat

查看统计IO设备负载情况。

# iostat -d -x 1
Linux 3.10.0-1127.19.1.el7.x86_64 (VM-0-11-centos)  2021年11月02日   _x86_64_  (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     2.13    0.07    3.14     2.91    33.96    22.98     0.02    8.12   18.69    7.87   0.39   0.12
scd0              0.00     0.00    0.00    0.00     0.00     0.00   100.29     0.00    0.30    0.30    0.00   0.22   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
  • rrqm/s、wrqm/s:每秒合并的读、写请求数。
  • r/s、w/s:每秒发送给磁盘的合并后的读写请求数。
  • rkB/s、wkB/s:每秒从磁盘读取和写入的KB数据量。
  • avgrq-sz、avgqu-sz:平均读写请求大小,单位:KB。
  • await、r_await、w_await:处理完成时间,包含等待时间和设备处理时间,单位:毫秒。
  • svctm:设备处理IO请求所需的平均时间,不含等待时间,这是个预估值,单位:毫秒。
  • %util:磁盘处理IO的时间百分比,

sar

查看IO相关的历史统计信息。

# sar -d 1
Linux 3.10.0-1127.19.1.el7.x86_64 (VM-0-11-centos)  2021年11月02日   _x86_64_  (1 CPU)

17时55分15秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17时55分16秒  dev253-0      2.04      0.00     73.47     36.00      0.00      2.00      0.50      0.10
17时55分16秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

17时55分16秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17时55分17秒  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17时55分17秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

17时55分17秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17时55分18秒  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17时55分18秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
^C

17时55分18秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17时55分19秒  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17时55分19秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:  dev253-0      0.58      0.00     20.87     36.00      0.00      2.00      0.50      0.03
平均时间:   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • tps:设备每秒数据传输量。
  • rd_sec/s、wr_sec/s:每秒读取和写入扇区数(512B)。其他字段与iostat相似。

pidstat

查看磁盘IO统计信息。

# pidstat -d 1 3
Linux 3.10.0-1127.19.1.el7.x86_64 (VM-0-11-centos)  2021年11月02日   _x86_64_  (1 CPU)

18时19分04秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
18时19分05秒     0      4183      0.00      3.96      0.00  barad_agent

18时19分05秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
18时19分06秒     0       260      0.00     60.00      0.00  jbd2/vda1-8
18时19分06秒     0      4184      0.00      8.00      0.00  barad_agent

18时19分06秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

平均时间:   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
平均时间:     0       260      0.00     19.93      0.00  jbd2/vda1-8
平均时间:     0      4183      0.00      1.33      0.00  barad_agent
平均时间:     0      4184      0.00      2.66      0.00  barad_agent
  • kB_rd/s、kB_wr/s:每秒读写的KB数。
  • kB_ccwr/s:每秒取消地写入KB数,例如,写回前的覆盖写。

vfsstat

BCC工具集,统计VFS调用次数。

# ./vfsstat 1 5
TIME         READ/s  WRITE/s CREATE/s   OPEN/s  FSYNC/s
09:51:36:      2438     3553        0       75        0
09:51:37:      2504     3585        0       70        0
09:51:38:      2522     3599        0       69        0
09:51:39:      2391     3390        0       67        0
09:51:40:      2431     3480        0       70        0

biosnoop

BCC工具集,跟踪块设备的IO操作,并输出其相关信息。

# ./biosnoop
TIME(s)     COMM           PID    DISK    T SECTOR     BYTES  LAT(ms)
0.000000    jbd2/sda7-8    17981  sda     W 331635800  32768     0.25
0.000541    jbd2/sda7-8    17981  sda     W 331635864  4096      0.42
1.842862    kworker/u113:1 2474   sda     W 357137472  4096      0.50
1.842900    kworker/u113:1 2474   sda     W 357153856  4096      0.51
1.843142    kworker/u113:1 2474   sda     W 85986200   4096      0.72
1.843540    kworker/u113:1 2474   sda     W 284908608  4096      1.13

biolatency

BCC工具集,显示块设备IO的延时分布。

# ./biolatency
Tracing block device I/O... Hit Ctrl-C to end.
^C
     usecs               : count     distribution
         0 -> 1          : 0        |                                        |
         2 -> 3          : 0        |                                        |
         4 -> 7          : 0        |                                        |
         8 -> 15         : 0        |                                        |
        16 -> 31         : 0        |                                        |
        32 -> 63         : 0        |                                        |
        64 -> 127        : 0        |                                        |
       128 -> 255        : 1        |*************                           |
       256 -> 511        : 3        |****************************************|
       512 -> 1023       : 3        |****************************************|

分析策略

1、先从文件系统层分析,应用程序很可能是异步磁盘I/O,不受磁盘延迟影响。

2、查看文件系统的基本情况:df、mount等。 一个文件系统使用率超过90%,它的性能会下降。这是因为随着可用空间的减少,空余块越来越少,并且越来越分散,会导致顺序式的写负载变成随机写负载。

3、观察打开文件的情况,尤其是注意短期文件:lsof、opensnoop、filelife等。

4、查找非常慢的文件系统操作、延时和缓存命中率,按进程和文件名观察。

5、检查基本的磁盘性能指标,如:请求时长、IOPS、使用率:iostat。

6、跟踪块I/O延时分布,检查是否有多峰分布、延时超标的情况:biolatency。

7、单独跟踪具体的块I/O,找寻系统中的一些行为模式,例如是否有大量写入请求导致读队列增长等:biosnoop。

常见问题

读写延时高

一般情况下,读写延时指的是,一个文件系统逻辑请求从开始到结束的时间,它包括了消耗在文件系统物理IO的延时。因此,在分析延时的时候,首先要找出读写延时主要消耗在哪部分。如果延时在文件系统层面,则考虑合并IO请求等手段优化。如果延时在物理IO上,则考虑磁盘性能的优化,包括更换SSD等。

需要注意的一点是,如果应用程序和磁盘IO是异步的,那么磁盘IO延时可能不会直接影响应用程序性能。

mmap的优势

可以减少系统调用和上下文切换的开销。但是,需要注意的是,通过mmap进行内存映射时,其文件大小不能改变,否则,可能会引发系统崩溃。

参考

《Systems Performance:Enterprise and Cloud》

《BPF Performance Tools》

《Computer Systems》

《Modern Operating Systems》

http://www.brendangregg.com/linuxperf.html