2010-11-15 50 views
12

Tôi muốn biết HZ của hệ thống, nghĩa là số giây mili giây là một giây từ mã Python.Python: Cách nhận số giây mili giây cho mỗi jiffy

+0

điểm yếu là gì? – knitti

+2

khoảng thời gian gián đoạn bộ đếm thời gian, xác định độ chính xác của tất cả các hoạt động của luồng ngủ, v.v. –

+0

@knitti, "Tôi sẽ nhận được điều đó cho bạn một cách nhanh chóng". Tôi nghĩ nó tương đương với "thật nhanh". – jlafay

Trả lời

22

Có USER_HZ

>>> import os 
>>> os.sysconf_names['SC_CLK_TCK'] 
2 
>>> os.sysconf(2) 
100 

đó là những gì hạt nhân sử dụng để báo cáo thời gian trong /proc.

Từ time(7) trang hướng dẫn:

The Clock phần mềm, HZ, và jiffies

Độ chính xác của các cuộc gọi hệ thống khác nhau mà thiết lập timeout, (ví dụ: chọn (2), sigtimedwait (2)) và đo thời gian CPU (ví dụ, getrusage (2)) bị giới hạn bởi độ phân giải của đồng hồ phần mềm, đồng hồ được duy trì bởi hạt nhân đo thời gian trong nháy mắt. Kích thước của một jiffy là được xác định bởi giá trị của hằng số hạt nhân HZ.

Giá trị của HZ thay đổi trên các phiên bản hạt nhân và nền tảng phần cứng. Trên i386 tình hình như sau: trên hạt nhân lên đến và bao gồm 2.4.x, HZ là 100, cho một giá trị jiffy là 0,01 giây; bắt đầu với 2.6.0, HZ được nâng lên 1000, cho ra một khoảng 0,00 giây. Kể từ hạt nhân 2.6.13, giá trị HZ là thông số cấu hình hạt nhân và có thể là 100, 250 (mặc định) hoặc 1000, cho giá trị jiffies, respec‐ tively, 0,01, 0,004 hoặc 0,001 giây. Kể từ hạt nhân 2.6.20, thêm tần số có sẵn: 300, một số chia đều cho tỷ lệ khung hình video com‐ mon (PAL, 25 HZ; NTSC, 30 HZ).

Thời gian (2) cuộc gọi hệ thống là trường hợp đặc biệt. Nó báo cáo thời gian với độ chi tiết được xác định bởi hằng số hạt nhân USER_HZ. Userspace applica‐ tions có thể xác định giá trị của hằng số này bằng cách sử dụng sysconf (_SC_CLK_TCK).

Nếu bắt buộc phải biết SYSTEM_HZ:

>>> from ctypes import * 
>>> rt = CDLL('librt.so') 
>>> CLOCK_REALTIME = 0 
>>> class timespec(Structure): 
...  _fields_ = [("tv_sec", c_long), ("tv_nsec", c_long)] 
... 
>>> res = timespec() 
>>> rt.clock_getres(CLOCK_REALTIME, byref(res)) 
0 
>>> res.tv_sec, res.tv_nsec 
(0, 4000250) 
>>> SYSTEM_HZ = round(1/(res.tv_sec + (res.tv_nsec/10.0**9))) 

Cung cấp 250 trên máy tính xách tay của tôi (mà âm thanh về bên phải) và 1000000000 trong một VM ...

+0

Tôi đang cố gắng tính toán một số nội dung dựa trên jiffies mà thực sự nên ở dạng ms. Vì vậy, nếu biết HZ tương đương, sau đó jiffies * 1000/os.sysconf (2) = ms. IT nhât thi tôi nghi vậy. – Murgh

+0

jiffies của bạn đến từ đâu? Ngoài ra, phương trình của bạn là lạ. – hop

+0

jiffies đến từ stime, utime và proeprties thời gian liên quan khác được tìm thấy trong/proc/stat và các tập tin tương tự. Phương trình đến từ unixtop.org. elapsed = timediff.tv_sec * HZ + (timediff.tv_usec * HZ)/1000000; Vì HZ không có sẵn trong Python, tôi đang tìm kiếm giải pháp thay thế. – Murgh

5

sysconf (SC_CLK_TCK) không cung cấp cho các tần số của bộ đếm thời gian ngắt trong Linux. Nó cung cấp tần suất của các cảnh báo hiển thị cho không gian người dùng trong những thứ như các quầy trong nhiều thư mục khác nhau trong/proc

Tần số thực tế được ẩn khỏi không gian người dùng, cố ý. Thật vậy, một số hệ thống sử dụng các dấu tích động hoặc các hệ thống "tickless", vì vậy thực sự không có bất kỳ hệ thống nào.

Tất cả giao diện không gian người dùng sử dụng giá trị từ SC_CLK_TCK, theo như tôi thấy luôn luôn là 100 dưới Linux.

+0

không, tôi nghĩ giá trị phụ thuộc vào kiến ​​trúc – hop

+0

Vâng, nó phụ thuộc vào kiến ​​trúc và được mã hóa cứng ở mức 100 trong hầu hết các kiến ​​trúc (nhưng có lẽ không phải tất cả) trong các nhân gần đây. – MarkR

+0

OK, hãy để họ giữ bí mật của họ. Tôi chỉ muốn biết, bởi những gì tôi cần để nhân các giá trị từ '/ proc/stat' và'/proc//stat' để có được thời gian CPU. Tôi đoán 10 ms là đủ chính xác cho điều đó ... –

0

tôi đã viết này:

https://github.com/peppelinux/xt_recent_parser

đầu ra là như thế này:

python3 xt_recent_parser.py 
XT_RECENT python parser 
<[email protected]> 


114.241.108.160, last seen: 2017-03-25 18:21:42 after 13 Connections 
46.165.210.17, last seen: 2017-03-25 13:07:54 after 10 Connections 
61.53.219.162, last seen: 2017-03-25 17:39:17 after 20 Connections 
179.37.141.232, last seen: 2017-03-25 18:08:23 after 2 Connections 
114.42.117.39, last seen: 2017-03-25 13:22:14 after 18 Connections 
177.12.84.234, last seen: 2017-03-25 16:22:14 after 17 Connections 

Tôi nghĩ rằng nó sẽ được dễ dàng để chỉnh sửa nếu bạn cần chuyển đổi một phần nghìn giây, bạn chỉ cần mở rộng JiffyTimeConverter python class

Các vấn đề liên quan