CLOCK_REALTIME এবং CLOCK_MONOTONIC এর মধ্যে পার্থক্য?


206

আপনি মধ্যে পার্থক্য ব্যাখ্যা গেল CLOCK_REALTIMEএবং CLOCK_MONOTONICদ্বারা ফিরে ঘড়ি clock_gettime()লিনাক্স?

কোন বাহ্যিক উত্স এবং বর্তমান সময়ের উত্পাদিত টাইমস্ট্যাম্পগুলির মধ্যে সময় কাটাতে আমার যদি প্রয়োজন হয় তবে এর থেকে ভাল পছন্দ কোনটি?

সর্বশেষে, আমি যদি একটি এনটিপি ডেমন আছে পর্যায়ক্রমে, সিস্টেম সময় সামঞ্জস্য কিভাবে প্রতিটি সাথে ইন্টারেক্ট এইসব সমন্বয়গুলি CLOCK_REALTIMEএবং CLOCK_MONOTONIC?

উত্তর:


238

CLOCK_REALTIMEবর্তমান প্রাচীর-ঘড়ি, সময়ের-সময় হিসাবে মেশিনের সেরা অনুমানের প্রতিনিধিত্ব করে। যেমন ইগনাসিও এবং মার্কআর বলেছেন, এর অর্থ CLOCK_REALTIMEএনটিপি সহ সিস্টেমের দিনের সময়ের ঘড়িটি পরিবর্তিত হওয়ায় সামনে এবং পিছনে লাফ দিতে পারে।

CLOCK_MONOTONICঅতীতে কিছু স্বেচ্ছাচারিত, স্থির বিন্দু থেকে নিখুঁত বিলম্বিত প্রাচীর-ঘড়ির সময় উপস্থাপন করে। এটি দিনের সময়ের ঘড়ির ব্যবস্থায় পরিবর্তন দ্বারা প্রভাবিত হয় না।

যদি আপনি কোনও ব্যবস্থার পুনরায় বুট ছাড়াই একটি মেশিনে লক্ষ্য করা দুটি ইভেন্টের মধ্যে অতিবাহিত সময়ের গণনা করতে চান CLOCK_MONOTONICতবে সেরা বিকল্প।

নোট করুন যে লিনাক্সে, CLOCK_MONOTONICস্থগিতের জন্য ব্যয় করা সময় পরিমাপ করে না, যদিও পসিক্স সংজ্ঞা অনুসারে এটি হওয়া উচিত। আপনি CLOCK_BOOTTIMEমনোটোনিক ঘড়ির জন্য লিনাক্স-নির্দিষ্ট ব্যবহার করতে পারেন যা স্থগিতের সময় চলতে থাকে।


11
নোট করুন যে আরও নতুন কার্নেলগুলিতে, ক্লক_মোনটোনিক_আরডাব্লু উপলব্ধ রয়েছে যা আরও ভাল (কোনও এনটিপি সমন্বয় নেই)।
জোসেফ গারভিন

14
"জোসেফ গারভিন" "আরও ভাল" এর কিছু মূল্যের জন্য, সম্ভবত - ক্লক_মোনোটোনিক_আরএল বাস্তব সময়ে ধীরে ধীরে বা ধীরে ধীরে চলতে পারে কয়েক মিলিয়ন (বা কয়েকশ) অংশে এবং তাপমাত্রা বা ভোল্টেজের মতো পরিবেশগত পরিস্থিতির কারণে (বা সময় চুরি করে) এর হারের পরিবর্তিত হতে পারে ভার্চুয়াল মেশিন)। একটি সঠিকভাবে কাজ করা মেশিনে, এনটিপি those সমস্ত কারণকে প্রশমিত করার পক্ষে যথাসাধ্য চেষ্টা করে এবং তাই ক্লক_মোনটোনিক সত্যভাবে অতিবাহিত সময়কে আরও ঘনিষ্ঠভাবে প্রতিফলিত করে ।
hobbs

23
মঞ্জুর, এনটিপির ফ্রিকোয়েন্সি ত্রুটিগুলি সংশোধন করার প্রচেষ্টা দ্বারা প্রভাবিত হওয়া, তবে পর্বের ত্রুটিগুলি সংশোধন করার প্রচেষ্টা দ্বারা প্রভাবিত না হওয়া এমন একটি ক্লক_মোনটোনিক_পাবারবাইল্ড থাকা আকর্ষণীয় হতে পারে, তবে এটি একটি সন্দেহজনক লাভের জন্য অনেক জটিলতা :)
হাবস

1
আমি @ পোষকরা যে বিষয়টি তুলে ধরেছে তা পছন্দ করি। আপনি যদি এমন প্রোগ্রামগুলির বিষয়ে উদ্বিগ্ন হন যা ঘড়ির চালক দ্বারা প্রভাবিত হতে পারে? চান CLOCK_MONOTONICযে দৃশ্যকল্প মধ্যে ভাল পছন্দ হতে? যেমন প্যাট্রিয়ট মিসাইল সিস্টেম
sjagr

3
আমি মনে করি যে CLOCK_REALTIME লিপ সেকেন্ড দ্বারা প্রভাবিত হয়েছে তা উল্লেখ করাও গুরুত্বপূর্ণ। এর অর্থ এটি যখন লিপ সেকেন্ড inোকানো হয় প্রতিবার ডাবল টাইমস্ট্যাম্প তৈরি করবে । গতবার 30 জুন, 2012 এ এটি ঘটেছিল এবং বেশ কয়েকটি সফ্টওয়্যার সমস্যার মধ্যে পড়েছিল
ব্যবহারকারী1202136

38

রবার্ট লাভের বই লিনাক্স সিস্টেম প্রোগ্রামিং ২ য় সংস্করণে , আপনার প্রশ্নের প্রশ্নটি অধ্যায় ১১ এর প্রথম দিকে, পৃষ্ঠা ৩3৩:

একঘেয়ে সময় উত্সের গুরুত্বপূর্ণ দিকটি বর্তমান মান নয়, তবে গ্যারান্টিটি যে সময় উত্সটি কঠোরভাবে রৈখিকভাবে বৃদ্ধি পাচ্ছে, এবং এইভাবে দুটি নমুনাগুলির মধ্যে সময়ের পার্থক্য গণনা করার জন্য দরকারী

এটি বলেছিল, আমি বিশ্বাস করি যে তিনি ধরে নিচ্ছেন যে কোনও ওএসের একই প্রক্রিয়াগুলি প্রক্রিয়াগুলি চলছে, সুতরাং আপনি সম্ভবত পর্যায়ক্রমিক ক্রমাঙ্কন চালিয়ে যেতে চান যাতে বামনটি অনুমান করতে সক্ষম হয়।


25

CLOCK_REALTIMEএনটিপি দ্বারা প্রভাবিত হয় এবং এগিয়ে এবং পিছনে যেতে পারে। CLOCK_MONOTONICহয় না, এবং প্রতি টিক এক টিক এডভান্স।


15
CLOCK_MONOTONIC এনটিপির সময় সমন্বয় (সময় স্লুইং) দ্বারা প্রভাবিত। এটি লাফ দেবে না, তবে।
ডার্বোবার্ট

3
তবে নতুন কার্নেলগুলিতে CLOCK_MONOTONIC_RAW রয়েছে, যা সত্যই এনটিপি দ্বারা প্রভাবিত হয় না isn't
জোসেফ গারভিন

1
"টিক" - লিনাক্স / এএমডি 64-তে কত বড় / দীর্ঘ / সিপিইউ নির্দেশাবলী টিকের কোনও মোটামুটি ধারণা? বা আমি এর যে কোনওটিতে ডকস পেতে পারি?
কেভিনার্পে

@ কেভিনার্প নিশ্চিত নন তবে আমি মনে করি একটি টিককে সময়ের একটি অংশ হিসাবে সংজ্ঞায়িত করা হয়, অনেকগুলি সিপিইউ চক্র নয়, প্রায়শই এটি 1/100 সেকেন্ড।
স্টাফেন

@ স্টাফেন: আমার অবশ্যই অবশ্যই 10 মাইলের চেয়ে শক্ত হওয়া উচিত। আমি মনে করি জাভা এর System.nanoTime()ব্যবহারগুলি 1000ns বা তারও কম সময়েরCLOCK_MONOTONIC পরিমাপ করতে পারে । সম্ভবত আপনি সিস্টেম সময় সম্পর্কে ভাবছেন যা কখনও কখনও মিলিসেকেন্ডের মধ্যে সীমাবদ্ধ থাকে?
কেভিনার্পে

20

ইগনাসিওর উত্তর ছাড়াও , CLOCK_REALTIMEলাফিয়ে এবং মাঝে মাঝে পিছনের দিকে এগিয়ে যেতে পারে। CLOCK_MONOTONICনা; এটি কেবল সামনের দিকে এগিয়ে যায় (যদিও এটি সম্ভবত পুনরায় বুটে পুনরায় সেট করা হয়)।

একটি দৃ app় অ্যাপ্লিকেশনটি CLOCK_REALTIMEমাঝে মাঝে সামনের দিকে লাফিয়ে পড়া সহ্য করতে সক্ষম হওয়া প্রয়োজন (এবং সম্ভবত খুব সামান্য সময়ে খুব সামান্য পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে দিকে যাওয়া খুব সামান্য কিছুটা হলেও এটি বেশিরভাগ ক্ষেত্রে)।

কল্পনা করুন ঘটে যখন আপনি আপনার ল্যাপটপ স্থগিত - CLOCK_REALTIMEফরোয়ার্ড সারসংকলন নিম্নলিখিত জাম্প, CLOCK_MONOTONICনা। এটি একটি ভিএম এ চেষ্টা করে দেখুন।


3
প্রোগ্রাম শুরু হওয়ার পরে ক্লক_মোনটোনিক 0 থেকে শুরু হয়; এটি ইন্টারপ্রোসেস ব্যবহারের জন্য নয়।
বেনুবার্ড

18
@ বেনুবার্ড: প্রোগ্রাম শুরু হওয়ার পরে এটি 0 থেকে শুরু হয় না। এটাই CLOCK_PROCESS_CPUTIME_ID। দ্রুত পরীক্ষা: $ perl -w -MTime::HiRes=clock_gettime,CLOCK_MONOTONIC -E 'say clock_gettime(CLOCK_MONOTONIC)'-> 706724.117565279। এই সংখ্যাটি লিনাক্সে সিস্টেম আপটাইমের সাথে মেলে তবে মানটি তার স্বেচ্ছাচারিতা বলে says
ডার্বোবার্ট

4
একদিকে যেমন আমি বিশ্বাস করি না যে লিনাক্সের আচরণ যেখানে CLOCK_MONOTONICস্থগিত / পুনরারম্ভের পরে থামবে তা হ'ল পসিক্স-কনফর্মিং। অতীতে একটি নির্দিষ্ট পয়েন্ট হওয়ার পরে এটি সময় হওয়ার কথা, তবে স্থগিতকরণ / পুনরায় কাজ শুরু করতে ঘড়ি থামানো বিরতি দেয়।
ক্যাফে

15

পজিক্স 7 উদ্ধৃতি

পজিক্স 7 উভয়ই http://pubs.opengroup.org/onlinepubs/9699919799/function/ ساعت_getres.html এ নির্দিষ্ট করে :

CLOCK_REALTIME:

এই ঘড়িটি সিস্টেমের জন্য আসল সময় পরিমাপের ঘড়ির প্রতিনিধিত্ব করে। এই ঘড়ির জন্য, ক্লোপ_জেটটাইম () দ্বারা ফিরে আসা এবং ক্লক_সেটটাইম () দ্বারা নির্দিষ্ট করা সময়গুলি ইপোকের পর থেকে সময়ের পরিমাণ (সেকেন্ড এবং ন্যানোসেকেন্ডে) উপস্থাপন করে।

CLOCK_MONOTONIC (featureচ্ছিক বৈশিষ্ট্য):

এই ঘড়ির জন্য, ক্লক_জেটটাইম () দ্বারা প্রত্যাবর্তিত মান অতীতের একটি অনির্দিষ্ট পয়েন্ট (উদাহরণস্বরূপ, সিস্টেম শুরুর সময়, বা ইপোক) থেকে সময় পরিমাণ (সেকেন্ড এবং ন্যানোসেকেন্ডে) উপস্থাপন করে। সিস্টেম স্টার্ট-আপ সময়ের পরে এই পয়েন্টটি পরিবর্তন হয় না। CLOCK_MONOTONIC ঘড়ির মান ক্লক_সেটটাইম () এর মাধ্যমে সেট করা যায় না।

clock_settime()একটি গুরুত্বপূর্ণ ইঙ্গিত দেয়: পসিক্স সিস্টেমগুলি CLOCK_REALITMEএটির সাথে নির্বিচারে পরিবর্তন করতে সক্ষম হয় , সুতরাং এটি অবিচ্ছিন্নভাবে বা সামনের দিকে প্রবাহিত হওয়ার উপর নির্ভর করবেন না। এনটিপি ব্যবহার করে প্রয়োগ করা যেতে পারে clock_settime()এবং এটি কেবল প্রভাবিত করতে পারে CLOCK_REALITME

লিনাক্স কার্নেল প্রয়োগটি বুকে সময় গ্রহণ করবে বলে মনে হচ্ছে CLOCK_MONOTONIC: CLOCK_MONOTONIC এর সূচনা পয়েন্ট


0

দুঃখিত, এটি কোনও মন্তব্য হিসাবে যুক্ত করার খ্যাতি নেই। সুতরাং এটি একটি পরিপূরক উত্তর হিসাবে যায়।

আপনি কতবার কল করবেন তার উপর নির্ভর করে clock_gettime()আপনার মনে রাখা উচিত যে ভিডিএসওতে লিনাক্সের দ্বারা কেবল কয়েকটি "ঘড়ি" সরবরাহ করা হয়েছে (যেমন একটির সমস্ত ওভারহেড সহ একটি সিস্কলের প্রয়োজন নেই - লিনাক্স যুক্ত হওয়ার পরে কেবল এটি আরও খারাপ হয়েছিল) স্পেক্টার-জাতীয় আক্রমণ থেকে রক্ষা করার প্রতিরক্ষা)।

যদিও clock_gettime(CLOCK_MONOTONIC,...), clock_gettime(CLOCK_REALTIME,...)এবং gettimeofday()সর্বদা অত্যন্ত দ্রুত (ভিডিএসও দ্বারা ত্বরান্বিত) হতে চলেছে, এটি ক্লক_মোনটোনিক_আরউ বা অন্য কোনও পসিএক্স ঘড়ির জন্য সত্য নয়

এটি কার্নেল সংস্করণ এবং আর্কিটেকচারের সাহায্যে পরিবর্তন করতে পারে।

যদিও বেশিরভাগ প্রোগ্রামগুলিতে এটির দিকে মনোযোগ দেওয়ার প্রয়োজন নেই, ভিডিএসও দ্বারা ত্বরান্বিত ঘড়িগুলিতে বিলম্বিত স্পাইক থাকতে পারে: কার্নেলটি ঘড়ি কাউন্টারগুলির সাথে ভাগ করে নেওয়া মেমরি অঞ্চল আপডেট করার সময় আপনি যদি তাদের ডান দিকে মারেন তবে এটির জন্য অপেক্ষা করতে হবে কার্নেল শেষ করতে।

এখানে "প্রমাণ" (গিটহাব, কার্নেল.আরোগ থেকে বট দূরে রাখতে): https://github.com/torvalds/linux/commit/2aae950b21e4bc789d1fc6668faf67e8748300b7

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.