.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2020 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH time_namespaces 7 "2 maj 2024" "Linux man\-pages 6.8" .SH NAMN time_namespaces — översikt över Linux tidnamnrymder .SH BESKRIVNING Tidnamnrymder virtualiserar värden för två systemklockor: .IP \[bu] 3 \fBCLOCK_MONOTONIC\fP (och likaledes \fBCLOCK_MONOTONIC_COARSE\fP och \fBCLOCK_MONOTONIC_RAW\fP), en inte inställbar klocka som representerar monoton tid sedan \[em] såsom beskrivs av POSIX \[em] ”någon ospecificerad punkt i det förgångna”. .IP \[bu] \fBCLOCK_BOOTTIME\fP (och likaledes \fBCLOCK_BOOTTIME_ALARM\fP), en inte inställbar klocka som är identisk med \fBCLOCK_MONOTONIC\fP, förutom att den även inkluderar eventuell tid som systemet har varit vilande. .P Alltså delar processerna i en tidnamnrymd värden per namnrymd för dessa klockor. Detta påverkar diverse API:er som mäter mot dessa klockor, inklusive: \fBclock_gettime\fP(2), \fBclock_nanosleep\fP(2), \fBnanosleep\fP(2), \fBtimer_settime\fP(2), \fBtimerfd_settime\fP(2) och \fI/proc/uptime\fP. .P .\" För närvarande är det enda sättet att skapa en tidnamnrymd genom att anropa \fBunshare\fP(2) med flaggan \fBCLONE_NEWTIME\fP. Detta anrop skapar en ny tidnamnrymd men placerar \fIinte\fP den anropande processen i den nya namnrymden. Istället placeras den anropande processens sedermera skapade barn i den nya namnrymden. Detta gör att klockavstånd (se nedan) för den nya namnrymden kan sättas före den första processen placeras i namnrymden. Den symboliska länken \fI/proc/\fPpid\fI/ns/time_for_children\fP visar tidnamnrymden i vilken barnen till en process kommer skapas. (En process kan använda en filbeskrivare som öppnas mot denna symboliska länk i ett anrop av \fBsetns\fP(2) för att flytta in i namnrymden.) .SS \fI/proc/\fPpid\fI/timens_offsets\fP Associerat med varje tidnamnrymd finns avstånd, uttryckta med avseende på den initiala tidnamnrymden, som definierar värdena för den monotona klockan och starttidsklockan i den namnrymden. Dessa avstånd visas via filen \fI/proc/\fPpid\fI/timens_offsets\fP. Inom denna fil uttrycks avstånden som rader som består av tre blankavgränsade fält: .P .in +4n .EX .EE .in .P \fIKlock\-id\fP är en sträng som identifierar klockan vars avstånd visas. Detta fält är antingen \fImonotonic\fP, för \fBCLOCK_MONOTONIC\fP, eller \fIboottime\fP, för \fBCLOCK_BOOTTIME\fP. De återstående fälten uttrycker avståndet (sekunder plus nanosekunder) för klockan i denna tidnamnrymd. Dessa avstånd uttrycks relativt klockvärdena i den initiala tidnamnrymden. Värdet \fIavstånd\-sek\fP kan vara negativt, föremål för begränsningarna som anges nedan; \fIavstånd\-nanosek\fP är ett teckenlöst värde. .P I den initiala tidnamnrymden är innehållet i filen \fItimens_offsets\fP som följer: .P .in +4n .EX $ \fBcat /proc/self/timens_offsets\fP monotonic 0 0 boottime 0 0 .EE .in .P I en ny tidnamnrymd som inte har haft några medlemsprocesser kan klockavstånden ändras genom att skriva nyradsavslutade poster med samma format till filen \fItimens_offsets\fP. Det går att skriva till filen flera gånger, men efter att den första processen har skapats i eller gått in i namnrymden kommer \fBwrite\fP(2) till denna fil att misslyckas med felet \fBEACCES\fP. För att skriva till filen \fItimens_offsets\fP måste en process ha förmågan \fBCAP_SYS_TIME\fP i användarnamnrymden som äger tidnamnrymden. .P Skrivningar till filen \fItimens_offsets\fP kan misslyckas med följande fel: .TP \fBEINVAL\fP Ett värde på \fIavstånd\-nanosek\fP större än 999 999 999. .TP \fBEINVAL\fP Ett värde på \fIklock\-id\fP som inte är giltigt. .TP \fBEPERM\fP Anroparen har inte förmågan \fBCAP_SYS_TIME\fP. .TP \fBERANGE\fP Ett värde på \fIavstånd\-sek\fP är utanför intervallet. Speciellt; .RS .IP \[bu] 3 kan \fIavstånd\-sek\fP inte sättas till ett värde vilket skulle ge den aktuella tiden på motsvarande klocka inuti namnrymden ett negativt värde; vidare .IP \[bu] kan \fIavstånd\-sek\fP inte sättas till ett värde så att tiden på motsvarande klocka inuti namnrymden skulle överskrida halva värdet på kärnkonstanten \fBKTIME_SEC_MAX\fP (detta begränsar klockvärdet till ett maximum av ungefär 146 år). .RE .P I en ny tidnamnrymd skapad med \fBunshare\fP(2) ärvs innehållet i filen \fItimens_offsets\fP från tidnamnrymden hos den skapande processen. .SH NOTERINGAR Användning av cgroup\-namnrymder kräver en kärna som är konfigurerad med alternativet \fBCONFIG_TIME_NS\fP. .P Observera att tidnamnrymder inte virtualiserar klockan \fBCLOCK_REALTIME\fP. Virtualisering av denna klocka undveks på grund av komplexitet och overhead inom kärnan. .P För kompatibilitet med den ursprungliga implementationen kan, när man skriver ett \fIklock\-id\fP till filen \fI/proc/\fPpid\fI/timens_offsets\fP, de numeriska värdena av ID:n skrivas istället för de symboliska namnen som visas ovan; d.v.s., 1 istället för \fImonotonic\fP, och 7 istället för \fIboottime\fP. För bästa läsbarhet rekommenderas det att man använder symboliska namn hellre än nummer. .P Motivationen för att lägga till tidnamnrymder var för att göra det möjligt att låta den monotona klockan och starttidsklockan behålla konsistenta värden under migrering av behållare och checkpunkt/återställning. .SH EXEMPEL Följande skalsession demonstrerar funktionen hos tidnamnrymder. Vi börjar med att visa inodsnumret för tidnamnrymden för ett skal i den initiala tidnamnrymden: .P .in +4n .EX $ \fBreadlink /proc/$$/ns/time\fP time:[4026531834] .EE .in .P Fortfarande i den initiala tidnamnrymden visar vi systemets uppetid med \fBuptime\fP(1) och använder exempelprogrammet \fIclock_times\fP som visas i \fBclock_getres\fP(2) för att visa värdet på olika klockor: .P .in +4n .EX $ \fBuptime \-\-pretty\fP up 21 hours, 17 minutes $ \fB./clock_times\fP CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 36m 41s) CLOCK_TAI : 1585989438.972 (18356 days + 8h 37m 18s) CLOCK_MONOTONIC: 56338.247 (15h 38m 58s) CLOCK_BOOTTIME : 76633.544 (21h 17m 13s) .EE .in .P Vi använder sedan \fBunshare\fP(1) för att skapa en tidnamnrymd och köra ett skal \fBbash\fP(1). Från det nya skalet använder vi det inbyggda kommandot \fBecho\fP för att skriva poster till filen \fItimens_offsets\fP och justera avståndet för klockan \fBCLOCK_MONOTONIC\fP framåt 2 dagar och avståndet för klockan \fBCLOCK_BOOTTIME\fP framåt 7 dagar: .P .in +4n .EX $ \fBPS1="ns2# " sudo unshare \-T \-\- bash \-\-norc\fP ns2# \fBecho "monotonic $((2*24*60*60)) 0" > /proc/$$/timens_offsets\fP ns2# \fBecho "boottime $((7*24*60*60)) 0" > /proc/$$/timens_offsets\fP .EE .in .P Ovan startar vi skalet \fBbash\fP(1) med flaggan \fB\-\-norc\fP så att inga uppstartsskript körs. Detta säkerställer att inga barnprocesser skapas från skalet före vi har haft en chans att uppdatera filen \fItimens_offsets\fP. .P Vi använder sedan \fBcat\fP(1) för att visa innehållet i filen \fItimens_offsets\fP. Att \fBcat\fP(1) körs skapar den första processen i den nya tidnamnrymden, varefter vidare försök att uppdatera filen \fItimens_offsets\fP ger ett fel. .P .in +4n .EX ns2# \fBcat /proc/$$/timens_offsets\fP monotonic 172800 0 boottime 604800 0 ns2# \fBecho "boottime $((9*24*60*60)) 0" > /proc/$$/timens_offsets\fP bash: echo: skrivfel: Åtkomst nekas .EE .in .P Fortfarande i den nya namnrymden kör vi \fBuptime\fP(1) och exempelprogrammet \fIclock_times\fP: .P .in +4n .EX ns2# \fBuptime \-\-pretty\fP up 1 week, 21 hours, 18 minutes ns2# \fB./clock_times\fP CLOCK_REALTIME : 1585989457.056 (18356 days + 8h 37m 37s) CLOCK_TAI : 1585989494.057 (18356 days + 8h 38m 14s) CLOCK_MONOTONIC: 229193.332 (2 days + 15h 39m 53s) CLOCK_BOOTTIME : 681488.629 (7 days + 21h 18m 8s) .EE .in .P Från ovanstående utskrift kan vi se att den monotona klockan och starttidsklockan har andra värden i den nya tidnamnrymden. .P Genom att undersöka de symboliska länkarna \fI/proc/\fPpid\fI/ns/time\fP och \fI/proc/\fPpid\fI/ns/time_for_children\fP ser vi att skalet är medlem av den initiala tidnamnrymden, men dess barn skapas i den nya namnrymden. .P .in +4n .EX ns2# \fBreadlink /proc/$$/ns/time\fP time:[4026531834] ns2# \fBreadlink /proc/$$/ns/time_for_children\fP time:[4026532900] ns2# \fBreadlink /proc/self/ns/time\fP # Skapar en barnprocess time:[4026532900] .EE .in .P Efter att ha återvänt till skalet i den initiala namnrymden ser vi att den monotona klockan och starttidsklockan är opåverkade av ändringarna av \fItimens_offsets\fP som gjordes i den andra tidnamnrymden: .P .in +4n .EX $ \fBuptime \-\-pretty\fP up 21 hours, 19 minutes $ \fB./clock_times\fP CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 38m 51s) CLOCK_TAI : 1585989438.972 (18356 days + 8h 39m 28s) CLOCK_MONOTONIC: 56338.247 (15h 41m 8s) CLOCK_BOOTTIME : 76633.544 (21h 19m 23s) .EE .in .SH "SE ÄVEN" .\" clone3() support for time namespaces is a work in progress .\" .BR clone3 (2), \fBnsenter\fP(1), \fBunshare\fP(1), \fBclock_settime\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBnamespaces\fP(7), \fBtime\fP(7) .PP .SH ÖVERSÄTTNING Den svenska översättningen av denna manualsida skapades av Göran Uddeborg . .PP Denna översättning är fri dokumentation; läs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE eller senare för upphovsrättsvillkor. Vi tar INGET ANSVAR. .PP Om du hittar fel i översättningen av denna manualsida, skicka ett mail till .MT Tp-sv@listor.tp-sv.se .ME .