异常log分析总结 :tsc: Marking TSC unstable due to checktscsync_source failed log前后文 /var/log/messages: .... CPUs, turning off TSC clock. Nov 16 22:21:14 localhost kernel: tsc: Marking TSC unstable due to check_tsc_sync_source failed Nov 16 This is just saying the kernel isn't going to use the TSC. TSC unstable due to checktscsyncsource failed" [https://bugzilla.redhat.com/showbug.cgi?
tsc 生成的 AST 可以用 astexplorer.net 可视化的查看: 生成的目标代码和 d.ts 和报错信息也可以用 ts playground 来直接查看: 大概了解了 tsc 的编译流程 : 语法支持 tsc 默认支持最新的 es 规范的语法和一些还在草案阶段的语法(比如 decorators),想支持新语法就要升级 tsc 的版本。 所以如果你只用标准语法,那用 tsc 或者 babel 都行,但是如果你想用一些草案阶段的语法,tsc 可能很多都不支持,而 babel 却可以引入 @babel/poposal-xx 的插件来支持。 babel 还是 tsc? 可以用 tsc --noEmit 来做类型检查,加上 noEmit选项就不会生成代码了。 如果你要生成 d.ts,也要单独跑下 tsc 编译。
2.打开条码标签打印软件,在文档设置-纸张-打印机/纸张中,选择所需的TSC打印机之后,点击后面的属性,弹出打印机首选项对话框,在选项界面,可以设置打印机的打印速度和深度。
"scripts": { "dev": "vite", "build": "vue-tsc --noEmit && vite build", "preview": "vite preview " },可以发现在build时,执行了vue-tsc --noEmit && vite build,其中vue-tsc:Vue 官方提供的命令,用于执行 TS 的类型检查。
看了光哥的文章,自己写了两遍找了找感觉,很神奇,光哥的文章地址:手写一个 ts-node 来深入理解它的原理
Zone-Master反向连接 TSC系统不同于一般集群系统,是zone-master反向连接worker的,这样做的好处如下: (a) .响应及时。 TSC支持任意网络拓扑结构的组网,包括但不限于: (a) .内外网混合组网 公司早期(2010-2012)内网跨城专线带宽很小且非常昂贵,tsc支持公网连接南北城市组网,传输海量文件为公司节省了大量成本 但对于发布系统、编译系统、持续集成系统来说,对devnet的自动化操作需求非常迫切,tsc很好地满足了该类平台的需求。 (e) .基于上述4种结构的联合组网 基于各种历史原因和现实需求,目前tsc的组网模式实际上为上述4种模式的混合体。 TSC还支持加密密码零保存、协议用户验证、服务器鉴定、防重放攻击、全程审计等诸多安全特性。 四、无限伸缩能力 ?
在条码打印软件中添加TSC TTP-244Pro打印机的方法也很简单,如果是本地打印机的话,需要在电脑上安装与条码打印机对应的打印驱动(条码打印软件也支持共享打印机,如果是共享打印机的话,不需要安装驱动 具体操作如下: 一、安装TSC TTP-244Pro打印驱动 1.在网上搜一个和你的条码打印机相同的打印驱动进行安装。安装步骤如下: (1)将打印机连接到电脑并开启电源开关。 使用“升级打印机驱动程序”选项取代已安装的驱动程序 二、在条码打印软件中添加TSC TTP-244Pro打印机 打印驱动安装好之后,打开条码打印软件,点击“新建”,在“文档设置-打印机/纸张-打印机”中 ,选择对应的打印机(TSC TTP-244Pro打印机),条码打印软件一般选择的是默认的打印机,我们可以在这里根据自己的需求选择相应的打印机。 TSCTTP-244PRO.jpg 以上就是在条码打印软件中添加TSC TTP-244Pro打印机的操作步骤,条码打印软件各种打印机通用,支持普通打印机(彩色喷墨或激光打印机)、条码打印机、喷码打印机以及喷绘写真机等等
今天小编就教大家用TSC TTP-244条码打印机批量打印二维码。 1、打开二维码制作软件,新建一个标签,选择打印机,设置标签大小行列等信息。 4、打印预览查看批量制作二维码,没有问题的话就可以在二维码制作软件中连接TSC TTP-244条码打印机批量打印二维码。 上面就是TSC TTP-244条码打印机批量打印二维码的过程,无论是批量打印二维码,还是批量打印条形码都是需要条码打印机和条码打印软件配合使用,二维码制作软件还支持批量制作条形码,有兴趣的可以体验一下。
arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm tsc_adjust arat flags : fpu vme de nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc tsc_adjust arat flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
示例:tsc --strict app.ts--noImplicitAny该选项用于禁止隐式的 any 类型。 示例:tsc --allowJs app.ts--declaration该选项用于生成相应的 .d.ts 声明文件。 示例:tsc --declaration app.ts--sourceMap该选项用于生成相应的源映射文件。 示例:tsc --sourceMap app.ts--watch该选项用于监视文件的更改,并在文件发生更改时自动重新编译。 示例:tsc --watch app.ts--strictNullChecks该选项用于启用严格的 null 检查。
"typescript": "^1.7.5" } } 保存文件, VS 会自动下载相应的 NPM 包; 2、 定义编译 ts 任务 打开 gulpfile.js , 定义一个 tsc 任务来编译 ts 文件, 代码如下: var gulp = require('gulp'); var ts = require('gulp-typescript'); gulp.task('tsc' 编译一下, 我们的目的就达到了, 接下来再定义一个 tsc:w 任务, 来实现这个目标: gulp.task('tsc:w', ['tsc'], function () { gulp.watch ('app/**/*.ts', ['tsc']); }); 这代码也太简单了, 监控 app 目录下面的所有 ts 文件, 有变化就调用 tsc 任务, 不用怎么解释了。 :w', ['tsc'], function () { gulp.watch('app/**/*.ts', ['tsc']); });
编译ts文件 tsc 的作用是将ts文件按照编译配置编译成目标js运行到浏览器。 tsc 命令直接编译 1、新建index.ts文件 ? 2、直接输入tsc命令编译 在当前目录位置,输入tsc 文件名.ts命令 ? ts文件会编译生成一个js文件,观察一下会转成es5模式 ? tsc 根据tsconfig.json编译 1、tsc --init 生成默认tsconfig.json 执行 tsc --init 命令,生成初始化配置文件 ? tsc 根据配置编译 新建 index.ts 文件,直接运行tsc编译结果和tsc index.ts是一样的,都是按照默认配置编译。 二、 运行tsc -w 实现保存监听 编译选项 编译选项概览目录参考:tsc官方配置介绍 运行ts代码 npm用户: > npm install -g ts-node yarn:用户 yarn global
arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4 invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4 arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4 arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4
64 GNU/Linux [root@kvm-demo data]# egrep --color '(vmx|svm)' /proc/cpuinfo flags : fpu vme de pse tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl
64 GNU/Linux [root@kvm-demo data]# egrep --color '(vmx|svm)' /proc/cpuinfo flags : fpu vme de pse tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl
根据rating来看timer的性能:kvmclock>tsc>hpet>acpi_pm>pit。 两台Host的TSC不一样,如果Dst Host的TSC比Src Host的TSC小,那么可能会让Windows蓝屏或者linux panic。 如果Dst Host的TSC比Src Host的TSC大,那么在Guest中看到tsc瞬间跳变。所以需要计算offset来调整。 -4.0.4/arch/x86/kvm/vmx.c中: 先读取出来Host的Tsc,在加上offset。 offset的原理也是为了防止热迁移tsc变小。 这里再说一下tsc的timer。因为tsc只是一个单调递增的寄存器,本身不能产生timer的irq。
幸运的是,这个问题是有解的,它便是接下来要介绍的 TSC。 TSC TiKV 采用 Time Stamp Counter (TSC) 寄存器进行高精度高性能计时。 在 Linux 下可以通过 /proc/cpuinfo 中的 CPU flag 来检查 TSC 速率是否稳定: constant_tsc: TSC 将以固定的额定标称频率而非瞬时频率递增 nonstop_tsc : TSC 在 CPU 休眠状态下仍持续递增 以上 TSC 速率的稳定性保证仅对单个 CPU 核心有效,在多核情况下还需处理 TSC 同步问题。 此时计算的 TSC 差值甚至成为了负数,无法换算为耗时。 为了解决这个问题,TiKV 会同步各个核心的原始 TSC 值,计算出 TSC 值在各个核心的偏移量,使用同步过后的 TSC 值用于计算耗时。 在计算初始 TSC 偏移时,需要确保取两次 TSC 的过程全都同一核心上执行。
从TSC本身来说,最常见的误差便是多核的影响。CPU并不会对多个核的tsc进行同步,所以,我们首先要保证测量过程是在同一个核上进程的。如果被测代码段执行过程中存在进程切换,则测量值一定不会很准。 时下非常流行的虚拟机技术也会影响测量的结果,因为有些虚拟机自己模拟了这个TSC这样我们拿到的值就是物理机硬件的tsc。因为在对虚拟机进行统计的时候需要关注它是如何获得TSC的。 uint64_t m_lastcall; // 上次TSC }; #define TSC_START(sCn) CTscStat oTscS(sCn); #define ("TestTsc"); funcA(); TSC_APICALL("funcA"); funcB(); TSC_APICALL("funcB"); funcC( ] tsc_cost=[3595441050] TscStat---TOTAL:func=[TestTsc] tsc_cost=[3964662011] TimeStat---SubCall:func=
幸运的是,这个问题是有解的,它便是接下来要介绍的 TSC。 TSC TiKV 采用 Time Stamp Counter (TSC) 寄存器进行高精度高性能计时。 在实际情况中,随着处理器的不断发展,TSC 寄存器积累了相当多历史遗留问题会对其正确性造成影响,需要修正。 TSC 速率 TSC 递增速率由 CPU 频率决定。 在 Linux 下可以通过 /proc/cpuinfo 中的 CPU flag 来检查 TSC 速率是否稳定: constant_tsc: TSC 将以固定的额定标称频率而非瞬时频率递增 nonstop_tsc : TSC 在 CPU 休眠状态下仍持续递增 以上 TSC 速率的稳定性保证仅对单个 CPU 核心有效,在多核情况下还需处理 TSC 同步问题。 为了解决这个问题,TiKV 会同步各个核心的原始 TSC 值,计算出 TSC 值在各个核心的偏移量,使用同步过后的 TSC 值用于计算耗时。
initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni ssse3 cx16 sse4 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 11 wp : yes flags : fpu vme de pse tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni ssse3 cx16 sse4