comparison src/os/solaris/vm/os_solaris.cpp @ 342:37f87013dfd8

6711316: Open source the Garbage-First garbage collector Summary: First mercurial integration of the code for the Garbage-First garbage collector. Reviewed-by: apetrusenko, iveresov, jmasa, sgoldman, tonyp, ysr
author ysr
date Thu, 05 Jun 2008 15:57:56 -0700
parents e3729351c946
children 1ee8caae33af
comparison
equal deleted inserted replaced
189:0b27f3512f9e 342:37f87013dfd8
1689 1689
1690 return true; 1690 return true;
1691 } 1691 }
1692 } 1692 }
1693 1693
1694 bool os::supports_vtime() { return true; }
1695
1696 bool os::enable_vtime() {
1697 int fd = open("/proc/self/ctl", O_WRONLY);
1698 if (fd == -1)
1699 return false;
1700
1701 long cmd[] = { PCSET, PR_MSACCT };
1702 int res = write(fd, cmd, sizeof(long) * 2);
1703 close(fd);
1704 if (res != sizeof(long) * 2)
1705 return false;
1706
1707 return true;
1708 }
1709
1710 bool os::vtime_enabled() {
1711 int fd = open("/proc/self/status", O_RDONLY);
1712 if (fd == -1)
1713 return false;
1714
1715 pstatus_t status;
1716 int res = read(fd, (void*) &status, sizeof(pstatus_t));
1717 close(fd);
1718 if (res != sizeof(pstatus_t))
1719 return false;
1720
1721 return status.pr_flags & PR_MSACCT;
1722 }
1723
1724 double os::elapsedVTime() {
1725 return (double)gethrvtime() / (double)hrtime_hz;
1726 }
1727
1694 // Used internally for comparisons only 1728 // Used internally for comparisons only
1695 // getTimeMillis guaranteed to not move backwards on Solaris 1729 // getTimeMillis guaranteed to not move backwards on Solaris
1696 jlong getTimeMillis() { 1730 jlong getTimeMillis() {
1697 jlong nanotime = getTimeNanos(); 1731 jlong nanotime = getTimeNanos();
1698 return (jlong)(nanotime / NANOSECS_PER_MILLISECS); 1732 return (jlong)(nanotime / NANOSECS_PER_MILLISECS);
2659 cur++; 2693 cur++;
2660 } 2694 }
2661 return bottom; 2695 return bottom;
2662 } 2696 }
2663 2697
2664 // Detect the topology change. Typically happens during CPU pluggin-unplugging. 2698 // Detect the topology change. Typically happens during CPU plugging-unplugging.
2665 bool os::numa_topology_changed() { 2699 bool os::numa_topology_changed() {
2666 int is_stale = Solaris::lgrp_cookie_stale(Solaris::lgrp_cookie()); 2700 int is_stale = Solaris::lgrp_cookie_stale(Solaris::lgrp_cookie());
2667 if (is_stale != -1 && is_stale) { 2701 if (is_stale != -1 && is_stale) {
2668 Solaris::lgrp_fini(Solaris::lgrp_cookie()); 2702 Solaris::lgrp_fini(Solaris::lgrp_cookie());
2669 Solaris::lgrp_cookie_t c = Solaris::lgrp_init(Solaris::LGRP_VIEW_CALLER); 2703 Solaris::lgrp_cookie_t c = Solaris::lgrp_init(Solaris::LGRP_VIEW_CALLER);