Luis Farias | 9d66fca | 2020-05-28 19:01:58 -0700 | [diff] [blame^] | 1 | .. Copyright (c) 2019 Intel |
| 2 | .. |
| 3 | .. Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | .. you may not use this file except in compliance with the License. |
| 5 | .. You may obtain a copy of the License at |
| 6 | .. |
| 7 | .. http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | .. |
| 9 | .. Unless required by applicable law or agreed to in writing, software |
| 10 | .. distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | .. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | .. See the License for the specific language governing permissions and |
| 13 | .. limitations under the License. |
| 14 | |
| 15 | .. |br| raw:: html |
| 16 | |
| 17 | <br /> |
| 18 | |
| 19 | PTP configuration |
| 20 | ================= |
| 21 | |
| 22 | A.5 PTP Synchronization |
| 23 | ----------------------- |
| 24 | Precision Time Protocol (PTP) provides an efficient way to synchronize |
| 25 | time on the network nodes. This protocol uses Master-Slave architecture. |
| 26 | Grandmaster Clock (Master) is a reference clock for the other nodes, |
| 27 | which adapt their clocks to the master. |
| 28 | |
| 29 | Using Physical Hardware Clock (PHC) from the Grandmaster Clock, NIC port |
| 30 | precision timestamp packets can be served for other network nodes. Slave |
| 31 | nodes adjust their PHC to the master following the IEEE 1588 |
| 32 | specification. |
| 33 | |
| 34 | There are existing implementations of PTP protocol that are widely used |
| 35 | in the industry. One of them is PTP for Linux, which is a set of tools |
| 36 | providing necessary PTP functionality. There is no need to re-implement |
| 37 | the 1588 protocol because PTP for Linux is precise and efficient enough |
| 38 | to be used out of the box. |
| 39 | |
| 40 | To meet xRAN requirements, two tools from PTP for Linux package are |
| 41 | required: ptp4l and phc2sys. |
| 42 | |
| 43 | PTP for Linux\* Requirements |
| 44 | ---------------------------- |
| 45 | |
| 46 | PTP for Linux\* introduces some software and hardware requirements. The |
| 47 | machine on which the tools will be run needs to use at least a 3.10 |
| 48 | Kernel version (built-in PTP support). There are several Kernel options |
| 49 | that need to be enabled in Kernel configuration: |
| 50 | |
| 51 | - CONFIG_PPS |
| 52 | |
| 53 | - CONFIG_NETWORK_PHY_TIMESTAMPING |
| 54 | |
| 55 | - PTP_1588_CLOCK |
| 56 | |
| 57 | Be sure that the Kernel is compiled with these options. |
| 58 | |
| 59 | For the best precision, PTP uses hardware timestamping. NIC has its own |
| 60 | clock, called Physical Hardware Clock (PHC) to read current time just a |
| 61 | moment before the packet is sent to minimalize the delays added by the |
| 62 | Kernel processing the packet. Not every NIC supports that feature. To |
| 63 | confirm that currently attached NIC support Hardware Timestamps, use |
| 64 | ethtool with the command: |
| 65 | |
| 66 | ethtool -T eth0 |
| 67 | |
| 68 | where eth0 is the potential PHC port. The output from the command should |
| 69 | say that there is Hardware Timestamps support. |
| 70 | |
| 71 | To set up PTP for Linux*: |
| 72 | |
| 73 | 1.Download source code:: |
| 74 | |
| 75 | git clone http://git.code.sf.net/p/linuxptp/code linuxptp |
| 76 | |
| 77 | git checkout v2.0 |
| 78 | |
| 79 | 2.Apply patch (this is required to work around issue with some of the |
| 80 | GM PTP packet size.):: |
| 81 | |
| 82 | diff --git a/msg.c b/msg.c |
| 83 | |
| 84 | old mode 100644 |
| 85 | |
| 86 | new mode 100755 |
| 87 | |
| 88 | index d1619d4..40d1538 |
| 89 | |
| 90 | --- a/msg.c |
| 91 | |
| 92 | +++ b/msg.c |
| 93 | |
| 94 | @@ -399,9 +399,11 @@ int msg_post_recv(struct ptp_message \*m, int cnt) |
| 95 | |
| 96 | port_id_post_recv(&m->pdelay_resp.requestingPortIdentity); |
| 97 | |
| 98 | break; |
| 99 | |
| 100 | case FOLLOW_UP: |
| 101 | |
| 102 | + cnt -= 4; |
| 103 | |
| 104 | timestamp_post_recv(m, &m->follow_up.preciseOriginTimestamp); |
| 105 | |
| 106 | break; |
| 107 | |
| 108 | case DELAY_RESP: |
| 109 | |
| 110 | + cnt -= 4; |
| 111 | |
| 112 | timestamp_post_recv(m, &m->delay_resp.receiveTimestamp); |
| 113 | |
| 114 | port_id_post_recv(&m->delay_resp.requestingPortIdentity); |
| 115 | |
| 116 | break; |
| 117 | |
| 118 | 3.Build and install ptp41:: |
| 119 | |
| 120 | # make && make install |
| 121 | |
| 122 | 4.Modify configs/default.cfg to control frequency of Sync interval to |
| 123 | 0.0625s:: |
| 124 | |
| 125 | logSyncInterval -4 |
| 126 | |
| 127 | ptp4l |
| 128 | ---------- |
| 129 | |
| 130 | This tool handles all PTP traffic on the provided NIC port and updated |
| 131 | PHC. It also determines the Grandmaster Clock and tracks |br| |
| 132 | synchronization |
| 133 | status. This tool can be run as a daemon or as a regular Linux\* |
| 134 | application. When the synchronization is reached, it gives output on the |
| 135 | screen for precision tracking. The configuration file of ptp4l contains |
| 136 | many options that can be set to get the best synchronization precision. |
| 137 | Although, even with default.cfg the synchronization quality is good. |
| 138 | |
| 139 | To start the synchronization process run:: |
| 140 | |
| 141 | cd linuxptp |
| 142 | |
| 143 | ./ptp4l -f ./configs/default.cfg -2 -i <if_name> -m |
| 144 | |
| 145 | The output below shows what the output on non-master node should look |
| 146 | like when synchronization is started. This means that PHC on this |
| 147 | machine is synchronized to the master PHC:: |
| 148 | |
| 149 | ptp4l[1434165.358]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE |
| 150 | |
| 151 | ptp4l[1434165.358]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE |
| 152 | |
| 153 | ptp4l[1434166.384]: port 1: new foreign master fcaf6a.fffe.029708-1 |
| 154 | |
| 155 | ptp4l[1434170.352]: selected best master clock fcaf6a.fffe.029708 |
| 156 | |
| 157 | ptp4l[1434170.352]: updating UTC offset to 37 |
| 158 | |
| 159 | ptp4l[1434170.352]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE |
| 160 | |
| 161 | ptp4l[1434171.763]: master offset -5873 s0 freq -18397 path delay 2778 |
| 162 | |
| 163 | ptp4l[1434172.763]: master offset -6088 s2 freq -18612 path delay 2778 |
| 164 | |
| 165 | ptp4l[1434172.763]: port 1: UNCALIBRATED to SLAVE on |
| 166 | MASTER_CLOCK_SELECTED |
| 167 | |
| 168 | ptp4l[1434173.763]: master offset -5886 s2 freq -24498 path delay 2732 |
| 169 | |
| 170 | ptp4l[1434174.763]: master offset 221 s2 freq -20157 path delay 2728 |
| 171 | |
| 172 | ptp4l[1434175.763]: master offset 1911 s2 freq -18401 path delay 2724 |
| 173 | |
| 174 | ptp4l[1434176.763]: master offset 1774 s2 freq -17964 path delay 2728 |
| 175 | |
| 176 | ptp4l[1434177.763]: master offset 1198 s2 freq -18008 path delay 2728 |
| 177 | |
| 178 | ptp4l[1434178.763]: master offset 746 s2 freq -18101 path delay 2755 |
| 179 | |
| 180 | ptp4l[1434179.763]: master offset 218 s2 freq -18405 path delay 2792 |
| 181 | |
| 182 | ptp4l[1434180.763]: master offset 103 s2 freq -18454 path delay 2792 |
| 183 | |
| 184 | ptp4l[1434181.763]: master offset -13 s2 freq -18540 path delay 2813 |
| 185 | |
| 186 | ptp4l[1434182.763]: master offset 9 s2 freq -18521 path delay 2813 |
| 187 | |
| 188 | ptp4l[1434183.763]: master offset 11 s2 freq -18517 path delay 2813 |
| 189 | |
| 190 | phc2sys |
| 191 | ----------- |
| 192 | |
| 193 | The PHC clock is independent from the system clock. Synchronizing only |
| 194 | PHC does not make the system clock exactly the same as the master. The |
| 195 | xRAN library requires use of the system clock to determine a common |
| 196 | point in time on two |br| |
| 197 | machines (O-DU and RU) to start transmission at the |
| 198 | same moment and keep time frames defined by ORAN Fronthaul |br| |
| 199 | specification. |
| 200 | |
| 201 | This application keeps the system clock updated to PHC. It makes it |
| 202 | possible to use POSIX timers as a time reference in xRAN application. |
| 203 | |
| 204 | Run phc2sys with the command:: |
| 205 | |
| 206 | cd linuxptp |
| 207 | |
| 208 | ./phc2sys -s enp25s0f0 -w -m -R 8 |
| 209 | |
| 210 | Command output will look like:: |
| 211 | |
| 212 | ptp4l[1434165.342]: selected /dev/ptp4 as PTP |
| 213 | |
| 214 | phc2sys[1434344.651]: CLOCK_REALTIME phc offset 450 s2 freq -39119 delay |
| 215 | 1354 |
| 216 | |
| 217 | phc2sys[1434344.776]: CLOCK_REALTIME phc offset 499 s2 freq -38620 delay |
| 218 | 1344 |
| 219 | |
| 220 | phc2sys[1434344.902]: CLOCK_REALTIME phc offset 485 s2 freq -38484 delay |
| 221 | 1347 |
| 222 | |
| 223 | phc2sys[1434345.027]: CLOCK_REALTIME phc offset 476 s2 freq -38348 delay |
| 224 | 1346 |
| 225 | |
| 226 | phc2sys[1434345.153]: CLOCK_REALTIME phc offset 392 s2 freq -38289 delay |
| 227 | 1340 |
| 228 | |
| 229 | phc2sys[1434345.278]: CLOCK_REALTIME phc offset 319 s2 freq -38244 delay |
| 230 | 1340 |
| 231 | |
| 232 | phc2sys[1434345.404]: CLOCK_REALTIME phc offset 278 s2 freq -38190 delay |
| 233 | 1349 |
| 234 | |
| 235 | phc2sys[1434345.529]: CLOCK_REALTIME phc offset 221 s2 freq -38163 delay |
| 236 | 1343 |
| 237 | |
| 238 | phc2sys[1434345.654]: CLOCK_REALTIME phc offset 97 s2 freq -38221 delay |
| 239 | 1342 |
| 240 | |
| 241 | phc2sys[1434345.780]: CLOCK_REALTIME phc offset 67 s2 freq -38222 delay |
| 242 | 1344 |
| 243 | |
| 244 | phc2sys[1434345.905]: CLOCK_REALTIME phc offset 68 s2 freq -38201 delay |
| 245 | 1341 |
| 246 | |
| 247 | phc2sys[1434346.031]: CLOCK_REALTIME phc offset 104 s2 freq -38144 delay |
| 248 | 1340 |
| 249 | |
| 250 | phc2sys[1434346.156]: CLOCK_REALTIME phc offset 58 s2 freq -38159 delay |
| 251 | 1340 |
| 252 | |
| 253 | phc2sys[1434346.281]: CLOCK_REALTIME phc offset 12 s2 freq -38188 delay |
| 254 | 1343 |
| 255 | |
| 256 | phc2sys[1434346.407]: CLOCK_REALTIME phc offset -36 s2 freq -38232 delay |
| 257 | 1342 |
| 258 | |
| 259 | phc2sys[1434346.532]: CLOCK_REALTIME phc offset -103 s2 freq -38310 |
| 260 | delay 1348 |
| 261 | |
| 262 | Configuration C3 |
| 263 | ------------------ |
| 264 | |
| 265 | Configuration C3 27 can be simulated for O-DU using a separate server |
| 266 | acting as Fronthaul Network and O-RU at the same time. O-RU server can |
| 267 | be configured to relay PTP and act as PTP master for O-DU. Settings |
| 268 | below can be used to |br| |
| 269 | instantiate this scenario. The difference is that |
| 270 | on the O-DU side, the Fronthaul port can be used as the source of PTP as |
| 271 | well as for U-plane and C-plane traffic. |
| 272 | |
| 273 | 1.Follow the steps in Section A.6.1 to install PTP on the O-RU server. |
| 274 | |
| 275 | 2.Copy configs/default.cfg to configs/default_slave.cfg and modify the |
| 276 | copied file as below:: |
| 277 | |
| 278 | diff --git a/configs/default.cfg b/configs/default.cfg |
| 279 | |
| 280 | old mode 100644 |
| 281 | |
| 282 | new mode 100755 |
| 283 | |
| 284 | index e23dfd7..f1ecaf1 |
| 285 | |
| 286 | --- a/configs/default.cfg |
| 287 | |
| 288 | +++ b/configs/default.cfg |
| 289 | |
| 290 | @@ -3,26 +3,26 @@ |
| 291 | |
| 292 | # Default Data Set |
| 293 | |
| 294 | # |
| 295 | |
| 296 | twoStepFlag 1 |
| 297 | |
| 298 | -slaveOnly 0 |
| 299 | |
| 300 | +slaveOnly 1 |
| 301 | |
| 302 | priority1 128 |
| 303 | |
| 304 | -priority2 128 |
| 305 | |
| 306 | +priority2 255 |
| 307 | |
| 308 | domainNumber 0 |
| 309 | |
| 310 | #utc_offset 37 |
| 311 | |
| 312 | -clockClass 248 |
| 313 | |
| 314 | +clockClass 255 |
| 315 | |
| 316 | clockAccuracy 0xFE |
| 317 | |
| 318 | offsetScaledLogVariance 0xFFFF |
| 319 | |
| 320 | free_running 0 |
| 321 | |
| 322 | freq_est_interval 1 |
| 323 | |
| 324 | dscp_event 0 |
| 325 | |
| 326 | dscp_general 0 |
| 327 | |
| 328 | -dataset_comparison ieee1588 |
| 329 | |
| 330 | +dataset_comparison G.8275.x |
| 331 | |
| 332 | G.8275.defaultDS.localPriority 128 |
| 333 | |
| 334 | maxStepsRemoved 255 |
| 335 | |
| 336 | # |
| 337 | |
| 338 | # Port Data Set |
| 339 | |
| 340 | # |
| 341 | |
| 342 | logAnnounceInterval 1 |
| 343 | |
| 344 | -logSyncInterval 0 |
| 345 | |
| 346 | +logSyncInterval -4 |
| 347 | |
| 348 | operLogSyncInterval 0 |
| 349 | |
| 350 | logMinDelayReqInterval 0 |
| 351 | |
| 352 | logMinPdelayReqInterval 0 |
| 353 | |
| 354 | @@ -37,7 +37,7 @@ G.8275.portDS.localPriority 128 |
| 355 | |
| 356 | asCapable auto |
| 357 | |
| 358 | BMCA ptp |
| 359 | |
| 360 | inhibit_announce 0 |
| 361 | |
| 362 | -inhibit_pdelay_req 0 |
| 363 | |
| 364 | +#inhibit_pdelay_req 0 |
| 365 | |
| 366 | ignore_source_id 0 |
| 367 | |
| 368 | # |
| 369 | |
| 370 | # Run time options |
| 371 | |
| 372 | 1.Start slave port toward PTP GM:: |
| 373 | |
| 374 | ./ptp4l -f ./configs/default_slave.cfg -2 -i enp25s0f0 –m |
| 375 | |
| 376 | Example of output:: |
| 377 | |
| 378 | ./ptp4l -f ./configs/default_slave.cfg -2 -i enp25s0f0 -m |
| 379 | |
| 380 | ptp4l[3904470.256]: selected /dev/ptp6 as PTP clock |
| 381 | |
| 382 | ptp4l[3904470.274]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE |
| 383 | |
| 384 | ptp4l[3904470.275]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE |
| 385 | |
| 386 | ptp4l[3904471.085]: port 1: new foreign master fcaf6a.fffe.029708-1 |
| 387 | |
| 388 | ptp4l[3904475.053]: selected best master clock fcaf6a.fffe.029708 |
| 389 | |
| 390 | ptp4l[3904475.053]: updating UTC offset to 37 |
| 391 | |
| 392 | ptp4l[3904475.053]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE |
| 393 | |
| 394 | ptp4l[3904477.029]: master offset 196 s0 freq -18570 path delay 1109 |
| 395 | |
| 396 | ptp4l[3904478.029]: master offset 212 s2 freq -18554 path delay 1109 |
| 397 | |
| 398 | ptp4l[3904478.029]: port 1: UNCALIBRATED to SLAVE on |
| 399 | MASTER_CLOCK_SELECTED |
| 400 | |
| 401 | ptp4l[3904479.029]: master offset 86 s2 freq -18468 path delay 1109 |
| 402 | |
| 403 | ptp4l[3904480.029]: master offset 23 s2 freq -18505 path delay 1124 |
| 404 | |
| 405 | ptp4l[3904481.029]: master offset 3 s2 freq -18518 path delay 1132 |
| 406 | |
| 407 | ptp4l[3904482.029]: master offset -169 s2 freq -18689 path delay 1141 |
| 408 | |
| 409 | 2.Synchronize local timer clock on O-RU for sample application:: |
| 410 | |
| 411 | ./phc2sys -s enp25s0f0 -w -m -R 8 |
| 412 | |
| 413 | Example of output:: |
| 414 | |
| 415 | ./phc2sys -s enp25s0f0 -w -m -R 8 |
| 416 | |
| 417 | phc2sys[3904510.892]: CLOCK_REALTIME phc offset 343 s0 freq -38967 delay |
| 418 | 1530 |
| 419 | |
| 420 | phc2sys[3904511.017]: CLOCK_REALTIME phc offset 368 s2 freq -38767 delay |
| 421 | 1537 |
| 422 | |
| 423 | phc2sys[3904511.142]: CLOCK_REALTIME phc offset 339 s2 freq -38428 delay |
| 424 | 1534 |
| 425 | |
| 426 | phc2sys[3904511.267]: CLOCK_REALTIME phc offset 298 s2 freq -38368 delay |
| 427 | 1532 |
| 428 | |
| 429 | phc2sys[3904511.392]: CLOCK_REALTIME phc offset 239 s2 freq -38337 delay |
| 430 | 1534 |
| 431 | |
| 432 | phc2sys[3904511.518]: CLOCK_REALTIME phc offset 145 s2 freq -38360 delay |
| 433 | 1530 |
| 434 | |
| 435 | phc2sys[3904511.643]: CLOCK_REALTIME phc offset 106 s2 freq -38355 delay |
| 436 | 1527 |
| 437 | |
| 438 | phc2sys[3904511.768]: CLOCK_REALTIME phc offset -30 s2 freq -38459 delay |
| 439 | 1534 |
| 440 | |
| 441 | phc2sys[3904511.893]: CLOCK_REALTIME phc offset -92 s2 freq -38530 delay |
| 442 | 1530 |
| 443 | |
| 444 | phc2sys[3904512.018]: CLOCK_REALTIME phc offset -173 s2 freq -38639 |
| 445 | delay 1528 |
| 446 | |
| 447 | phc2sys[3904512.143]: CLOCK_REALTIME phc offset -246 s2 freq -38764 |
| 448 | delay 1530 |
| 449 | |
| 450 | phc2sys[3904512.268]: CLOCK_REALTIME phc offset -300 s2 freq -38892 |
| 451 | delay 1532 |
| 452 | |
| 453 | 3. Modify configs/default.cfg as shown below to run PTP master on |
| 454 | Fronthaul of O-RU:: |
| 455 | |
| 456 | diff --git a/configs/default.cfg b/configs/default.cfg |
| 457 | |
| 458 | old mode 100644 |
| 459 | |
| 460 | new mode 100755 |
| 461 | |
| 462 | index e23dfd7..c9e9d4c |
| 463 | |
| 464 | --- a/configs/default.cfg |
| 465 | |
| 466 | +++ b/configs/default.cfg |
| 467 | |
| 468 | @@ -15,14 +15,14 @@ free_running 0 |
| 469 | |
| 470 | freq_est_interval 1 |
| 471 | |
| 472 | dscp_event 0 |
| 473 | |
| 474 | dscp_general 0 |
| 475 | |
| 476 | -dataset_comparison ieee1588 |
| 477 | |
| 478 | +dataset_comparison G.8275.x |
| 479 | |
| 480 | G.8275.defaultDS.localPriority 128 |
| 481 | |
| 482 | maxStepsRemoved 255 |
| 483 | |
| 484 | # |
| 485 | |
| 486 | # Port Data Set |
| 487 | |
| 488 | # |
| 489 | |
| 490 | logAnnounceInterval 1 |
| 491 | |
| 492 | -logSyncInterval 0 |
| 493 | |
| 494 | +logSyncInterval -4 |
| 495 | |
| 496 | operLogSyncInterval 0 |
| 497 | |
| 498 | logMinDelayReqInterval 0 |
| 499 | |
| 500 | logMinPdelayReqInterval 0 |
| 501 | |
| 502 | @@ -37,7 +37,7 @@ G.8275.portDS.localPriority 128 |
| 503 | |
| 504 | asCapable auto |
| 505 | |
| 506 | BMCA ptp |
| 507 | |
| 508 | inhibit_announce 0 |
| 509 | |
| 510 | -inhibit_pdelay_req 0 |
| 511 | |
| 512 | +#inhibit_pdelay_req 0 |
| 513 | |
| 514 | ignore_source_id 0 |
| 515 | |
| 516 | # |
| 517 | |
| 518 | # Run time options |
| 519 | |
| 520 | 4.Start PTP master toward O-DU:: |
| 521 | |
| 522 | ./ptp4l -f ./configs/default.cfg -2 -i enp175s0f1 –m |
| 523 | |
| 524 | Example of output:: |
| 525 | |
| 526 | ./ptp4l -f ./configs/default.cfg -2 -i enp175s0f1 -m |
| 527 | |
| 528 | ptp4l[3903857.249]: selected /dev/ptp3 as PTP clock |
| 529 | |
| 530 | ptp4l[3903857.266]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE |
| 531 | |
| 532 | ptp4l[3903857.267]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE |
| 533 | |
| 534 | ptp4l[3903863.734]: port 1: LISTENING to MASTER on |
| 535 | ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES |
| 536 | |
| 537 | ptp4l[3903863.734]: selected local clock 3cfdfe.fffe.bd005d as best |
| 538 | master |
| 539 | |
| 540 | ptp4l[3903863.734]: assuming the grand master role |
| 541 | |
| 542 | 5.Synchronize local NIC PTP master clock to local NIC PTP slave clock:: |
| 543 | |
| 544 | ./phc2sys -c enp175s0f1 -s enp25s0f0 -w -m -R 8 |
| 545 | |
| 546 | Example of output:: |
| 547 | |
| 548 | ./phc2sys -c enp175s0f1 -s enp25s0f0 -w -m -R 8 |
| 549 | |
| 550 | phc2sys[3904600.332]: enp175s0f1 phc offset 2042 s0 freq -2445 delay |
| 551 | 4525 |
| 552 | |
| 553 | phc2sys[3904600.458]: enp175s0f1 phc offset 2070 s2 freq -2223 delay |
| 554 | 4506 |
| 555 | |
| 556 | phc2sys[3904600.584]: enp175s0f1 phc offset 2125 s2 freq -98 delay 4505 |
| 557 | |
| 558 | phc2sys[3904600.710]: enp175s0f1 phc offset 1847 s2 freq +262 delay 4518 |
| 559 | |
| 560 | phc2sys[3904600.836]: enp175s0f1 phc offset 1500 s2 freq +469 delay 4515 |
| 561 | |
| 562 | phc2sys[3904600.961]: enp175s0f1 phc offset 1146 s2 freq +565 delay 4547 |
| 563 | |
| 564 | phc2sys[3904601.086]: enp175s0f1 phc offset 877 s2 freq +640 delay 4542 |
| 565 | |
| 566 | phc2sys[3904601.212]: enp175s0f1 phc offset 517 s2 freq +543 delay 4517 |
| 567 | |
| 568 | phc2sys[3904601.337]: enp175s0f1 phc offset 189 s2 freq +370 delay 4510 |
| 569 | |
| 570 | phc2sys[3904601.462]: enp175s0f1 phc offset -125 s2 freq +113 delay 4554 |
| 571 | |
| 572 | phc2sys[3904601.587]: enp175s0f1 phc offset -412 s2 freq -212 delay 4513 |
| 573 | |
| 574 | phc2sys[3904601.712]: enp175s0f1 phc offset -693 s2 freq -617 delay 4519 |
| 575 | |
| 576 | phc2sys[3904601.837]: enp175s0f1 phc offset -878 s2 freq -1009 delay |
| 577 | 4515 |
| 578 | |
| 579 | phc2sys[3904601.962]: enp175s0f1 phc offset -965 s2 freq -1360 delay |
| 580 | 4518 |
| 581 | |
| 582 | phc2sys[3904602.088]: enp175s0f1 phc offset -1048 s2 freq -1732 delay |
| 583 | 4510 |
| 584 | |
| 585 | phc2sys[3904602.213]: enp175s0f1 phc offset -1087 s2 freq -2086 delay |
| 586 | 4531 |
| 587 | |
| 588 | phc2sys[3904602.338]: enp175s0f1 phc offset -1014 s2 freq -2339 delay |
| 589 | 4528 |
| 590 | |
| 591 | phc2sys[3904602.463]: enp175s0f1 phc offset -1009 s2 freq -2638 delay |
| 592 | 4531 |
| 593 | |
| 594 | 6. On O-DU Install PTP for Linux tools from source code the same way as |
| 595 | on O-RU above but no need to apply the patch for msg.c |
| 596 | |
| 597 | 7. Start slave port toward PTP master from O-RU using the same |
| 598 | default_slave.cfg as on O-RU (see above):: |
| 599 | |
| 600 | ./ptp4l -f ./configs/default_slave.cfg -2 -i enp181s0f0 –m |
| 601 | |
| 602 | Example of output:: |
| 603 | |
| 604 | ./ptp4l -f ./configs/default_slave.cfg -2 -i enp181s0f0 -m |
| 605 | |
| 606 | ptp4l[809092.918]: selected /dev/ptp6 as PTP clock |
| 607 | |
| 608 | ptp4l[809092.934]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE |
| 609 | |
| 610 | ptp4l[809092.934]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE |
| 611 | |
| 612 | ptp4l[809092.949]: port 1: new foreign master 3cfdfe.fffe.bd005d-1 |
| 613 | |
| 614 | ptp4l[809096.949]: selected best master clock 3cfdfe.fffe.bd005d |
| 615 | |
| 616 | ptp4l[809096.950]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE |
| 617 | |
| 618 | ptp4l[809098.363]: port 1: UNCALIBRATED to SLAVE on |
| 619 | MASTER_CLOCK_SELECTED |
| 620 | |
| 621 | ptp4l[809099.051]: rms 38643 max 77557 freq +719 +/- 1326 delay 1905 +/- |
| 622 | 0 |
| 623 | |
| 624 | ptp4l[809100.051]: rms 1134 max 1935 freq -103 +/- 680 delay 1891 +/- 4 |
| 625 | |
| 626 | ptp4l[809101.051]: rms 453 max 855 freq +341 +/- 642 delay 1888 +/- 0 |
| 627 | |
| 628 | ptp4l[809102.052]: rms 491 max 772 freq +1120 +/- 752 delay 1702 +/- 0 |
| 629 | |
| 630 | ptp4l[809103.052]: rms 423 max 654 freq +1352 +/- 653 delay 1888 +/- 0 |
| 631 | |
| 632 | ptp4l[809104.052]: rms 412 max 579 freq +1001 +/- 672 delay 1702 +/- 0 |
| 633 | |
| 634 | ptp4l[809105.053]: rms 441 max 672 freq +807 +/- 709 delay 1826 +/- 88 |
| 635 | |
| 636 | ptp4l[809106.053]: rms 422 max 607 freq +1353 +/- 636 delay 1702 +/- 0 |
| 637 | |
| 638 | ptp4l[809107.054]: rms 401 max 466 freq +946 +/- 646 delay 1702 +/- 0 |
| 639 | |
| 640 | ptp4l[809108.055]: rms 401 max 502 freq +912 +/- 659 |
| 641 | |
| 642 | 8. Synchronize local clock on O-DU for sample application or l1 |
| 643 | application:: |
| 644 | |
| 645 | ./phc2sys -s enp181s0f0 -w -m -R 8 |
| 646 | |
| 647 | Example of output:: |
| 648 | |
| 649 | ./phc2sys -s enp181s0f0 -w -m -R 8 |
| 650 | |
| 651 | phc2sys[809127.123]: CLOCK_REALTIME phc offset 675 s0 freq -37379 delay |
| 652 | 1646 |
| 653 | |
| 654 | phc2sys[809127.249]: CLOCK_REALTIME phc offset 696 s2 freq -37212 delay |
| 655 | 1654 |
| 656 | |
| 657 | phc2sys[809127.374]: CLOCK_REALTIME phc offset 630 s2 freq -36582 delay |
| 658 | 1648 |
| 659 | |
| 660 | phc2sys[809127.500]: CLOCK_REALTIME phc offset 461 s2 freq -36562 delay |
| 661 | 1642 |
| 662 | |
| 663 | phc2sys[809127.625]: CLOCK_REALTIME phc offset 374 s2 freq -36510 delay |
| 664 | 1643 |
| 665 | |
| 666 | phc2sys[809127.751]: CLOCK_REALTIME phc offset 122 s2 freq -36650 delay |
| 667 | 1649 |
| 668 | |
| 669 | phc2sys[809127.876]: CLOCK_REALTIME phc offset 34 s2 freq -36702 delay |
| 670 | 1650 |
| 671 | |
| 672 | phc2sys[809128.002]: CLOCK_REALTIME phc offset -112 s2 freq -36837 delay |
| 673 | 1645 |
| 674 | |
| 675 | phc2sys[809128.127]: CLOCK_REALTIME phc offset -160 s2 freq -36919 delay |
| 676 | 1643 |
| 677 | |
| 678 | phc2sys[809128.252]: CLOCK_REALTIME phc offset -270 s2 freq -37077 delay |
| 679 | 1657 |
| 680 | |
| 681 | phc2sys[809128.378]: CLOCK_REALTIME phc offset -285 s2 freq -37173 delay |
| 682 | 1644 |
| 683 | |
| 684 | phc2sys[809128.503]: CLOCK_REALTIME phc offset -349 s2 freq -37322 delay |
| 685 | 1644 |
| 686 | |
| 687 | phc2sys[809128.629]: CLOCK_REALTIME phc offset -402 s2 freq -37480 delay |
| 688 | 1641 |
| 689 | |
| 690 | phc2sys[809128.754]: CLOCK_REALTIME phc offset -377 s2 freq -37576 delay |
| 691 | 1648 |
| 692 | |
| 693 | phc2sys[809128.879]: CLOCK_REALTIME phc offset -467 s2 freq -37779 delay |
| 694 | 1650 |
| 695 | |
| 696 | phc2sys[809129.005]: CLOCK_REALTIME phc offset -408 s2 freq -37860 delay |
| 697 | 1648 |
| 698 | |
| 699 | phc2sys[809129.130]: CLOCK_REALTIME phc offset -480 s2 freq -38054 delay |
| 700 | 1655 |
| 701 | |
| 702 | phc2sys[809129.256]: CLOCK_REALTIME phc offset -350 s2 freq -38068 delay |
| 703 | 1650 |
| 704 | |
| 705 | Support in xRAN Library |
| 706 | ---------------------------- |
| 707 | |
| 708 | The xRAN library provides an API to check whether PTP for Linux is |
| 709 | running correctly. There is a function called xran_is_synchronized(). It |
| 710 | checks if ptp4l and phc2sys are running in the system by making PMC tool |
| 711 | requests for current port state and comparing it with the expected |
| 712 | value. This verification should be done before initialization. |
| 713 | |
| 714 | *notes. “SLAVE” is the only expected value in this release; only a |
| 715 | non-master scenario is supported currently.* |
| 716 | |
| 717 | .. |image0| image:: media/image3.png |
| 718 | :width: 2.52364in |
| 719 | :height: 3.77174in |
| 720 | .. |image1| image:: media/image8.png |
| 721 | :width: 6.258in |
| 722 | :height: 1.40538in |
| 723 | .. |image2| image:: media/image10.emf |
| 724 | :width: 6.18493in |
| 725 | :height: 0.53448in |
| 726 | .. |image3| image:: media/image15.png |
| 727 | :width: 6.27856in |
| 728 | :height: 2.672in |
| 729 | .. |image4| image:: media/image21.JPG |
| 730 | :width: 6.17708in |
| 731 | :height: 6.09375in |