1
0
mirror of https://github.com/golang/go synced 2024-11-19 16:24:45 -07:00

runtime: use the nsec system call instead of /dev/bintime on Plan 9

LGTM=0intro
R=0intro
CC=ality, dave, golang-codereviews, jas, mischief, rsc
https://golang.org/cl/104570043
This commit is contained in:
Aram Hăvărneanu 2014-07-09 12:33:42 +02:00
parent 0a2083edd7
commit a84e3ad198
4 changed files with 22 additions and 22 deletions

View File

@ -150,29 +150,13 @@ runtime·usleep(uint32 µs)
int64
runtime·nanotime(void)
{
static int32 fd = -1;
byte b[8];
uint32 hi, lo;
int64 ns, scratch;
// As long as all goroutines share the same file
// descriptor table we can get away with using
// just a static fd. Without a lock the file can
// be opened twice but that's okay.
//
// Using /dev/bintime gives us a latency on the
// order of ten microseconds between two calls.
//
// The naïve implementation (without the cached
// file descriptor) is roughly four times slower
// in 9vx on a 2.16 GHz Intel Core 2 Duo.
if(fd < 0 && (fd = runtime·open("/dev/bintime", OREAD|OCEXEC, 0)) < 0)
return 0;
if(runtime·pread(fd, b, sizeof b, 0) != sizeof b)
return 0;
hi = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
lo = b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7];
return (int64)hi<<32 | (int64)lo;
ns = runtime·nsec(&scratch);
// TODO(aram): remove hack after I fix _nsec in the pc64 kernel.
if(ns == 0)
return scratch;
return ns;
}
void

View File

@ -15,6 +15,7 @@ int32 runtime·plan9_tsemacquire(uint32 *addr, int32 ms);
int32 runtime·plan9_semrelease(uint32 *addr, int32 count);
int32 runtime·notify(void (*fn)(void*, int8*));
int32 runtime·noted(int32);
int64 runtime·nsec(int64*);
void runtime·sigtramp(void*, int8*);
void runtime·sigpanic(void);
void runtime·goexitsall(int8*);

View File

@ -64,6 +64,16 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
INT $64
RET
TEXT runtime·nsec(SB),NOSPLIT,$0
MOVL $53, AX
INT $64
CMPL AX, $-1
JNE 4(PC)
MOVL a+0(FP), CX
MOVL AX, 0(CX)
MOVL AX, 4(CX)
RET
TEXT runtime·notify(SB),NOSPLIT,$0
MOVL $28, AX
INT $64

View File

@ -77,6 +77,11 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
SYSCALL
RET
TEXT runtime·nsec(SB),NOSPLIT,$0
MOVQ $53, BP
SYSCALL
RET
TEXT runtime·notify(SB),NOSPLIT,$0
MOVQ $28, BP
SYSCALL