Icetea: qsfp_service: DR2_4x400G,DR1_8x200G,DR1_8x100G optics support#557
Icetea: qsfp_service: DR2_4x400G,DR1_8x200G,DR1_8x100G optics support#557joywu-coder wants to merge 4 commits into
Conversation
| PROFILE_400G_2_PAM4_RS544X2N_OPTICAL = 51, | ||
| PROFILE_800G_4_PAM4_RS544X2N_OPTICAL = 52, | ||
| PROFILE_200G_1_PAM4_RS544X2N_OPTICAL = 53, | ||
| PROFILE_100G_1_PAM4_RS544X2N_OPTICAL = 54, |
There was a problem hiding this comment.
Can we reuse PROFILE_100G_1_PAM4_RS544_OPTICAL instead of defining another new profile?
There was a problem hiding this comment.
Can we reuse PROFILE_100G_1_PAM4_RS544_OPTICAL instead of defining another new profile?
Yes, using PROFILE_100G_1_PAM4_RS544_OPTICAL = 47 can work as well. We originally thought the "FEC RS544X2N" for 100G should be supported, too.
| DR2_400G = 27, | ||
| DR2_4x400G = 28 | ||
| DR1_8x200G = 29, | ||
| DR1_100G = 30, | ||
| DR1_8x100G = 31, |
There was a problem hiding this comment.
We only need DR2_400G and DR1_100G here
DR2_4x400G is DR2_400G media interface code on lanes 0,2,4,6. Similarly for the other modes
There was a problem hiding this comment.
We only need DR2_400G and DR1_100G here
DR2_4x400G is DR2_400G media interface code on lanes 0,2,4,6. Similarly for the other modes
Got it, thanks.
| SMFMediaInterfaceCode::LR4_10_400G, | ||
| SMFMediaInterfaceCode::LR4_10_400G, | ||
| }, | ||
| /* new requirement not supoort the two combinations |
There was a problem hiding this comment.
Please keep this section and not comment out. While not a supported mode on Icetea right now, we may still support it on other platforms
There was a problem hiding this comment.
Please keep this section and not comment out. While not a supported mode on Icetea right now, we may still support it on other platforms
Got it, thanks.
| } else if ( | ||
| smfCode == SMFMediaInterfaceCode::DR2_400G && | ||
| firstModuleCapability->hostStartLanes.size() == 4) { | ||
| moduleMediaInterface = MediaInterfaceCode::DR2_4x400G; | ||
| } else if ( | ||
| smfCode == SMFMediaInterfaceCode::DR1_200G && | ||
| firstModuleCapability->hostStartLanes.size() == 8) { | ||
| moduleMediaInterface = MediaInterfaceCode::DR1_8x200G; | ||
| } else if ( | ||
| smfCode == SMFMediaInterfaceCode::DR1_100G && | ||
| firstModuleCapability->hostStartLanes.size() == 8) { | ||
| moduleMediaInterface = MediaInterfaceCode::DR1_8x100G; |
There was a problem hiding this comment.
We don't need these changes.
moduleMediaInterface corresponds to the SMF code corresponding to the first Application that module advertises and not the speed we configure on it. In the 2x800G-DR4 case, the module always advertises 800G-DR4 on lanes 0 and 2. The code in lines 2960-2962 already checks this.
There was a problem hiding this comment.
We don't need these changes.
moduleMediaInterface corresponds to the SMF code corresponding to the first Application that module advertises and not the speed we configure on it. In the 2x800G-DR4 case, the module always advertises 800G-DR4 on lanes 0 and 2. The code in lines 2960-2962 already checks this.
Got it, thanks.
| } | ||
| break; | ||
| case MediaInterfaceCode::DR2_400G: | ||
| expectedMediaLanes = {0, 1}; |
There was a problem hiding this comment.
expectedMediaLane depends on hostLane right?
If hostLane is 0,1 expectedMediaLanes = {0,1}
If hostLane is 2,3 expectedMediaLanes = {2,3}
If hostLane is 4,5 expectedMediaLanes = {4,5}
If hostLane is 6,7 expectedMediaLanes = {6,7}
There was a problem hiding this comment.
expectedMediaLane depends on hostLane right? If hostLane is 0,1 expectedMediaLanes = {0,1} If hostLane is 2,3 expectedMediaLanes = {2,3} If hostLane is 4,5 expectedMediaLanes = {4,5} If hostLane is 6,7 expectedMediaLanes = {6,7}
Yes, I have handled the mapping in the switch case "MediaInterfaceCode::DR4_2x800G" and the sub switch case "cfg::PortProfileID::PROFILE_400G_2_PAM4_RS544X2N_OPTICAL".
| *mediaIntfCode == MediaInterfaceCode::DR2_4x400G || | ||
| *mediaIntfCode == MediaInterfaceCode::DR1_8x200G || | ||
| *mediaIntfCode == MediaInterfaceCode::DR1_8x100G || |
There was a problem hiding this comment.
Not required, as this switch case is on moduleMediaInterface which is always DR4_2x800G
There was a problem hiding this comment.
Not required, as this switch case is on moduleMediaInterface which is always DR4_2x800G
Got it, thanks.
| *mediaIntfCode == MediaInterfaceCode::DR2_4x400G || | ||
| *mediaIntfCode == MediaInterfaceCode::DR1_8x200G || | ||
| *mediaIntfCode == MediaInterfaceCode::DR1_8x100G || |
There was a problem hiding this comment.
Not required, as this switch case is on moduleMediaInterface which is always DR4_2x800G
There was a problem hiding this comment.
Not required, as this switch case is on moduleMediaInterface which is always DR4_2x800G
Got it, thanks.
|
@joywu-coder Can you let us know once you've tested with these new code changes? |
@shiva-menta Yes, it has been verified. The new logs are attached at the end of the description. Please check. Thank you. |
|
@shiva-menta has imported this pull request. If you are a Meta employee, you can view this in D83347793. |
|
@shiva-menta merged this pull request in 49a2778. |
Description
Add codes to support the new DR2_4x400G, DR1_8x200G, and DR1_8x100G modes for Icetea QSFP service.
Motivation
According to the requirement change, Icetea QSFP service needs to support the new DR2_4x400G, DR1_8x200G, and DR1_8x100G modes.
Test Plan
Test cases will cover the following modes:
---->SMFMediaInterfaceCode: DR4_800G = 0x77
---->PROFILE_800G_4_PAM4_RS544X2N_OPTICAL = 52
---->SMFMediaInterfaceCode: DR4_400G = 0x1C
---->PROFILE_400G_4_PAM4_RS544X2N_OPTICAL = 38
---->SMFMediaInterfaceCode: DR2_400G = 0x75
---->PROFILE_400G_2_PAM4_RS544X2N_OPTICAL = 51
---->SMFMediaInterfaceCode: DR1_200G = 0x73
---->PROFILE_200G_1_PAM4_RS544X2N_OPTICAL = 53
---->SMFMediaInterfaceCode: DR1_100G = 0x14
---->PROFILE_100G_1_PAM4_RS544X2N_OPTICAL = 54
Test steps as follows:
Compilation has passed for qsfp_hw_test, qsfp_service, and fboss-platform-mapping-gen
Run "fboss-platform-mapping-gen --platform-name icetea800bc" can generate the platform_mapping configs with the new profile "PROFILE_100G_1_PAM4_RS544X2N_OPTICAL = 54".
icetea800bc_platform_mapping_53-54-51-38-52.json
Transceivers deploy in the front panel:
Ports 1-18: 18 Finisar optical modules.
Ports 19-32: 14 Terahop(Innolight) optical modules.
Port 33: 1 Innolight QSFP28.
QSFP Hardware Test Config:
Ports 1-4: PROFILE_200G_1_PAM4_RS544X2N_OPTICAL = 53.
Ports 5-8: PROFILE_100G_1_PAM4_RS544X2N_OPTICAL = 54.
Ports 9-12: PROFILE_400G_2_PAM4_RS544X2N_OPTICAL = 51.
Ports 13-16: PROFILE_400G_4_PAM4_RS544X2N_OPTICAL = 38.
Ports 17-32: PROFILE_800G_4_PAM4_RS544X2N_OPTICAL = 52.
Port 33(QSFP28): PROFILE_100G_4_NRZ_RS528_OPTICAL = 23.
qsfp_profile_53-54-51-38-52_all_ports_conf.txt
Run 0.7.2 t0_qsfp_hw_tests, the result passed:
./bin/run_test.py qsfp --qsfp-config ./qsfp_profile_53-54-51-38-52_all_ports.conf --platform_mapping_override_path ./icetea800bc_platform_mapping_53-54-51-38-52.json --filter_file=./share/hw_sanity_tests/t0_qsfp_hw_tests.conf --skip-known-bad-tests "icetea800bc/physdk-credo-0.7.2/credo-0.7.2"
./bin/run_test.py qsfp --qsfp-config ./qsfp_profile_53-54-51-38-52_all_ports.conf --platform_mapping_override_path ./icetea800bc_platform_mapping_53-54-51-38-52.json --skip-known-bad-tests "icetea800bc/physdk-credo-0.7.2/credo-0.7.2"
./bin/run_test.py qsfp --qsfp-config ./qsfp_profile_53-54-51-38-52_all_ports.conf --platform_mapping_override_path ./icetea800bc_platform_mapping_53-54-51-38-52.json --filter_file=./share/hw_sanity_tests/t0_qsfp_hw_tests.conf --skip-known-bad-tests "icetea800bc/physdk-credo-0.9.0/credo-0.9.0"
./bin/run_test.py qsfp --qsfp-config ./qsfp_profile_53-54-51-38-52_all_ports.conf --platform_mapping_override_path ./icetea800bc_platform_mapping_53-54-51-38-52.json --skip-known-bad-tests "icetea800bc/physdk-credo-0.9.0/credo-0.9.0"
Test result for the commit: 920a04e
Please refer to the new logs in GDrive: https://drive.google.com/drive/folders/1seDPes3BA5gnPuzrPwI65AKtpCEV68sX