精确探测时间

时间放大器——简介与基本硬件结构 何为时间放大器? 时间放大器应用领域 其一般硬件结构 亚稳态,SR锁存器式 阅读详情

精确探测时间

RDTSC

rdtsc指令返回的是自开机始CPU的周期数,在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式(高32在EDX,低32位在EAX),记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高,因此这个部件可以达到 纳秒级的计时精度。
多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间,原因有三:

  • 不能保证同一块主板上每个核的 TSC 是同步的;
  • CPU 的时钟频率可能变化,例如笔记本电脑的节能功能;
  • 乱序执行导致 RDTSC 测得的周期数不准,这个问题从 Pentium Pro 时代就存在

具体讲解在http://blog.youkuaiyun.com/solstice/article/details/5196544

RDTSC 一般的用法是,先后执行两次,记下两个 64-bit 整数 start 和 end,那么 end-start 代表了这期间 CPU 的时钟周期数。

在多核下,这两次执行可能会在两个 CPU 上发生,而这两个 CPU 的计数器的初值不一定相同(由于完成上电复位的准确时机不同),(有办法同步,见[3]),那么就导致 micro-benchmarking 的结果包含了这个误差,这个误差可正可负,取决于先执行的那块 CPU 的时钟计数器是超前还是落后。

另外,对于计时这个用途,时间 = 周期数 / 频率,由于频率可能会变(比如我的笔记本的 CPU 通常半速运行在 800MHz,繁忙的时候全速运行在 1.6GHz),那么测得的时间也就不准确了。有的新 CPU 的 RDTSC 计数频率是恒定的,那么时钟是准了,那又会导致 micro-benchmarking 的结果不准,见 [2]。还有一个可能是掉电之后恢复(比如休眠),那么 TSC 会清零。 总之,用 RDTSC 来计时是不灵的。

现在处理器使用方案

虽然 RDTSC 废掉了,性能测试用的高精度计时还是有办法的 [2],在 Windows 用 QueryPerformanceCounter 和 QueryPerformanceFrequency,Linux 下用 POSIX 的 clock_gettime 函数,以 CLOCK_MONOTONIC 参数调用。或者按文献 [3] 的办法,先同步 TSC, 再使用它。(我不知道现在最新的 linux 官方内核是不是内置了这个同步算法。也不清楚校准后的两个 CPU 的“钟”会不会再次失步。)

[1] http://www.ccsl.carleton.ca/~jamuir/rdtscpm1.pdf
[2] http://en.wikipedia.org/wiki/Time_Stamp_Counter

[3] x86: unify/rewrite SMP TSC sync code http://lwn.net/Articles/211051/

测试代码

//linux下测试代码
#include<stdio.h> 
#include<stdlib.h>
 #include<linux/types.h>

#define TIMES 100
#define SIZE 1024

__u64 rdtsc()
{
        __u32 lo,hi;

        __asm__ __volatile__
        (
         "rdtsc":"=a"(lo),"=d"(hi)
        );
        return (__u64)hi<<32|lo;
}

int myfunction()
{
        int i;
        char *p = NULL;
        for(i = 0;i<TIMES;i++)
        {
                p = (char*)malloc(SIZE*sizeof(char));
                if(p)
                {
                    free(p);
                }
                else
                {
                    printf("malloc failed when i = %d\n",i);
                }
        }
        return 0;
}
int test_rdtsc()
{
        __u64 begin;
        __u64 end;

        begin = rdtsc();
        myfunction();
        end = rdtsc();
        printf("myfunction cost %llu CPU cycles\n",end-begin);
        return 0;
}

int main()
{
       test_rdtsc();
        return 0;
}

执行结果如下
root@libin:~/program/assembly/rdtsc# ./test
myfunction cost 310949 CPU cycles

WIN下QueryPerformanceCounter方法

CST软件TDR时域仿真:从阻抗分析到交叉探测实战 本文详细介绍了在CST软件中进行TDR时域仿真的完整流程与实战技巧。通过搭建仿真模型、设置激励信号,并重点演示了如何利用TDR交叉探测功能精准定位PCB走线中的阻抗不连续点(如走线颈缩、参考平面缺口),从而在设计阶段高效排查高速信号完整性问题,提升设计可靠性。 阅读详情

相关推荐

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4421

8.9 RDTSC时钟检测反调试

RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用`rdtsc`汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入`EDX:EAX`寄存器中,通过运行两次`rdstc`指令,然后计算出他们之间的差值,即可判定对方是否在调试我们的程序。

微软技术分享 1万+

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2659

linux 时间与定时器编程原理,浅析 Linux 中的时间编程和实现原理-嵌入式-火龙果软件工程...

引子我们都生活在时间中,但却无法去思考它。什么是时间呢?似乎这是一个永远也不能被回答的问题。然而作为一个程序员,在工作中,总有那么几次我必须思考什么是时间。比如,需要知道一段代码运行了多久;要在log 文件中记录事件发生时的时间戳;再比如需要一个定时器以便能够定期做某些计算机操作。我发现,在计算机世界中,时间在不同场合也往往有不同的含义,让试图思考它的人感到迷茫。但值得庆幸的是,Linux中的时间...

weixin_29099217的博客 819

飞书云文档API操作详细介绍

开通云文档API、python程序调用飞书api、飞书获取app_id和app_secret、

Brother_ning的博客 1万+

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 518

RDTSC指令介绍与使用

一、了解RDTSC指令 rdtsc指令, 该指令返回CPU自启动以来的时钟周期数;该时钟周期数,即处理器的时间戳。 在CPU通电启动后,首先会重置EDX和EAX,在每个时钟周期上升或下降沿到来时,会自动累计周期数,并被记录到EDX和EAX寄存器中,EDX是高位,EAX是低位。 rdtsc指令就是从该寄存器中进行获取的。 周期和频率的关系公式:T(周期)=1/f(频率) 如CPU频率f为1GHz,则其时钟周期T=1/1GHz秒,意味着每隔T秒,CPU完成一个最基本的动作,并在寄存器中,对周期数加1。 故,假设

百里杨的博客 1万+

FPGA中的CMAC硬核与Interlaken硬核

CMAC硬核和Interlaken硬核是FPGA中两种重要的内置功能模块,它们分别在CNN推理和高带宽芯片到芯片接口方面发挥着关键作用。FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)中的CMAC硬核与Interlaken硬核是两种重要的内置功能模块,它们在FPGA设计中扮演着关键角色。需要注意的是,FPGA设计中的硬核选择不仅取决于硬核本身的性能,还需要考虑硬核与FPGA芯片其他部分的兼容性、功耗、成本等因素。Interlaken硬核。

weixin_41230430的博客 1481

多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间

多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 陈硕Blog.youkuaiyun.com/Solstice 自从 Intel Pentium 加入 RDTSC 指令以来,这条指令是 micro-benchmarking 的利器,可以以极小的代价获得高精度的 CPU 时钟周期数(Time Stamp Counter),不少介绍优化的文章[1]和书籍用它来比较两段代码的快慢。甚

陈硕的Blog 4万+

【YOLOv11多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1967

CH7034B显示模块原理图设计,已量产

显示桥接板的价值,不在于简单把 RGB 排线换成另一种接口,而在于能否把并行视频、时钟、显示控制、模拟输出和辅助配置同时组织成稳定系统。当前这张 CH7034B 原理图就是这种思路:U3 CH7034B 作为核心桥接芯片,输入侧是 LCD_R0~R7、LCD_G0~G7、LCD_B0~B7、LCD_DE、LCD_HSYNC、LCD_VSYNC、LCD_CLK 与 LCD_BL,输出侧则通过 DAC0~DAC2 和 DDC_SC/DDC_SD 形成模拟显示接口边界。

不脱发的程序猿 161

脱壳的艺术--2 调试器检测技术

  脱壳的艺术Mark Vincent Yason概述:脱壳是门艺术——脱壳既是一种心理挑战,同时也是逆向领域最为激动人心的智力游戏之一。为了甄别或解决非常难的反逆向技巧,逆向分析人员有时不得不了解操作系统的一些底层知识,聪明和耐心也是成功脱壳的关键。这个挑战既牵涉到壳的创建者,也牵涉到那些决心躲过这些保护的脱壳者。本文主要目的是介绍壳常用的反逆向技术,同时也探讨了可以用来躲过或禁

FISH 的专栏 2276

Android11.0(R) MTK 平台开机logo动态替换(by logo.bin方式)

实现的效果 客户提供一张格式为 bmp 的开机logo,在 linux 环境下执行制作 logo.bin 脚本文件, apk 拷贝 logo.bin 文件替换系统原有的bin,然后重启 logo 自动更新。 原理分析 MTK 平台的充电图片和开机logo都是打包到 logo.bin 中的 对应的资源路径在源码 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo 系统一般预制了很多分辨率文件夹,实际通过 BOOT_LOGO 来确定打包那一个

cczhengv 4585

蓝牙Channel Sounding信道探测 (四) — CS Steps

本文介绍了信道探测(CS)的四种工作模式及其实施规范。CS定义了发起方(Initiator)和反射方(Reflector)之间的交互流程,包含四种探测模式:模式0用于测量设备间频率偏移,模式1测量往返时间,模式2测量相位旋转,模式3同时测量往返时间和相位旋转。每种模式都有特定的传输时序结构,包括同步信号(CS_SYNC)、探测音调(CStone)和保护时间等要素。设备间需保持精确时间同步,并遵循严格的功率控制要求(如5μs下降窗口和40dB功率衰减)。模式2和3还涉及天线切换和ASK调制等高级功能。

fanhang的博客 1498

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机网络小班:读论文LTRACK: Stealthy Tracking of Mobile Phones in LTE并作汇报

由于修改的信息有限并且发送的时间很短,攻击者发送的信号与合法基站的信号时间和频率基本完全对齐,并且功率只比原始信号高了。和上行链路数据,它可以用这些数据传播的延迟进行计算,得到以基站和监听设备作为焦点的椭圆,手机就在这个椭圆上。时间提前命令中包含了调整信号传播延迟的信息,通过这个信息,就可以推断出手机在这个灰色环的位置。网络中对手机的位置进行被动定位,并对它们的身份信息进行隐秘识别,从而实现对移动手机的隐形跟踪。利用第一个约束中的圆和第二个约束中的椭圆,就可以通过他们的交点定位用户手机。

Wzasty的博客 897

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ping 加上时间信息----本人备注

原文地址::https://blog.youkuaiyun.com/woshizhangliang999/article/details/65938644 相关文章 1、ping命令添加时间戳----https://blog.youkuaiyun.com/lxypeter521/article/details/80942888?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2 2、解决 awk: line 2: function strtonum ne.

xqhrs232的专栏 426

bat脚本注释多行_内网存活网段探测脚本intranet_segment_scan

1.前言2.内网存活网段探测脚本 for Windows3.内网存活网段探测脚本 for Linux1.前言 当拿下内网某台主机之后,可使用以下脚本对该内网主机网段进行盲打探测。如果是对较大内网进行渗透测试的话,这个脚本会很有帮助。判断了存活网段,就等于缩小了范围,接下来就能对该网段内的存活主机进行探测了。存活主机发现的越多,意味着掌握的信息量也就越大,发现漏洞和敏感资产的可能性也越大...

weixin_30936907的博客 593

【免费下载】 增强版ping命令(带时间戳)

在日常网络管理中,ping命令是检查网络连接是否正常的重要工具。然而,标准的ping命令并不提供时间戳功能,这在进行长期网络稳定性监控时显得不够便捷。为此,我们开发了这款增强版ping命令,它在每次ping操作时自动添加时间戳,便于形成日志记录,加强对网络状况的监控和分析。 ## 功能特点 - **自动添加时间戳**:在每次ping结果前自动添加时间戳,精确记录每次网络探测的时间点。 - **日...

gitblog_06764的博客 460

准确的SQL语句运行时间(效率)检测办法

我们对数据库进行优化后,比如索引加入了以后,到底有没有加快查询效率,起到正面作用呢? 通常,我们可以通过“MSSQLSERVER”里的事件探测器进行性能实时监控,如果需要对更具体的SQL语句进行更精确的分析,我们可以在查询分析器中通过以下代码来实现: declare @d datetime set @d=getdate() --select id from t_Page

kindyb的专栏 1548

K8S健康检查配置

健康检查策略 Liveness 探测和 Readiness 探测是两种 Health Check 机制 如果不特意配置,Kubernetes 将对两种探测采取相同的默认行为,即通过判断容器启动进程的返回值是否为零来判断探测是否成功。 两种探测的配置方法完全一样,支持的配置参数也一样。 不同之处在于探测失败后的行为: (1). Liveness 探测是重启容器; (2). Readiness 探测则是将容器设置为不可用,不接收 Service 转发的请求。 Liveness 探测和 Readine

gaofeng的博客 1901

雷达简介-测距

简单介绍雷达测距基本原理

asdflucas的专栏 3882

SQL时间盲注自动化实战:从手工探测到Python脚本编写

SQL注入是Web安全领域的核心漏洞类型之一,其原理是通过构造恶意SQL语句,干扰应用程序与数据库的正常交互逻辑。基于时间的盲注作为其中一种高级形式,不依赖直接回显,而是通过数据库延时函数(如sleep())的响应时间差异来推断查询结果的真假,技术价值在于能够绕过许多常规防御措施。在CTF竞赛和渗透测试的实际应用场景中,面对需要逐位猜解大量数据的情况,手工操作效率极低,此时编写自动化脚本成为必然选择。本文以一道典型CTF题目为例,深入讲解如何设计并实现一个高效的Python自动化注入脚本,涵盖请求控制、布尔

weixin_33743248的博客 428

大时钟暗物质云计算机,物理学家用量子纠缠制造了空前精确的时钟,物理学的一个重大突破...

没有什么比原子种计时更精确了。但即使是振动的原子核,也受到量子力学定律所施加的不确定性的限制。几年前,麻省理工学院和塞尔维亚贝尔格莱德大学的研究人员提出,量子纠缠可以推动时钟超越这个模糊的边界。现在,我们有了一个实验形式的概念证明。物理学家将一团镱—171原子云与光子流连接在一起,并测量它们微小摆动的时间。他们的结果表明,以这种方式纠缠原子可以加快原子核钟的时间测量过程,使它们比以往任何时候都更精...

weixin_28985877的博客 412

在java中运行时间测试函数_测量Java方法的执行时间

您可以在前后拍摄时间戳快照,然后重复几次实验以求平均值。也有分析器可以为您执行此操作。摘自《 Java平台性能:战略与策略》一书:使用System.currentTimeMillis()class TimeTest1 {public static void main(String[] args) {long startTime = System.currentTimeMillis();long t...

weixin_39861255的博客 339

雷达的工作原理示意图_雷达基本理论与基本原理

雷达基本理论与基本原理一、雷达的基本理论 1、雷达工作的基本过程发射机产生电磁信号,由天线辐射到空中,发射的信号一部分被目标拦截并向许多方向再辐射。向后再辐射回到雷达的信号被天线采集,并送到接受机,在接收机中,该信号被处理以检测目标的存在并确定其位置,最后在雷达终端上将处理结果显示出来。 2、雷达工作的基本原理一般来说,会通过雷达信号到目标并从目标返回雷达的时间,得到目标的距离。目标的角度位置可以...

weixin_34313315的博客 2万+
上一篇: 欢迎使用优快云-markdown编辑器
下一篇: 编译器
forevertingting
博客等级 码龄12年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值